내용으로 건너뛰기
마인테크WIKI
사용자 도구
로그인
사이트 도구
도구
문서 보기
이전 판
백링크
최근 바뀜
미디어 관리
사이트맵
로그인
최근 바뀜
미디어 관리
사이트맵
추적:
wowza006
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
* conf/crossdomain.xml 파일을 만들고 아래의 내용을 넣어준다. <code> <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" secure="false"/> <site-control permitted-cross-domain-policies="all"/> <allow-http-request-headers-from domain="*" headers="*"/> </cross-domain-policy> </code> * conf/VHost.xml 파일을 열어서 아래의 내용을 추가해 준다. <code> <HTTPProvider> <BaseClass>com.wowza.wms.http.HTTPCrossdomain</BaseClass> <RequestFilters>*crossdomain.xml</RequestFilters> <AuthenticationMethod>none</AuthenticationMethod> </HTTPProvider> </code> * 와우자를 다시 시작해 준다. * 또 다른 방법으로 아래의 소스를 이용해 모듈을 만들어서 추가해 준다. <code> package com.wowza.wms.http; import java.io.*; import java.util.*; import java.net.*; import com.wowza.wms.application.*; import com.wowza.wms.client.*; import com.wowza.wms.logging.*; import com.wowza.wms.server.*; import com.wowza.wms.vhost.*; import com.wowza.wms.http.*; import com.wowza.util.*; import com.wowza.wms.httpstreamer.model.*; //import org.json.*; public class HTTPConnectionCountsXMLCORS extends HTTProvider2Base { class MyCounter { int total = 0; } private void outputConnectionInfo(StringBuffer ret, ConnectionCounter counter) { ret.append("<ConnectionsCurrent>"+counter.getCurrent()+"</ConnectionsCurrent>"); ret.append("<ConnectionsTotal>"+counter.getTotal()+"</ConnectionsTotal>"); ret.append("<ConnectionsTotalAccepted>"+counter.getTotalAccepted()+"</ConnectionsTotalAccepted>"); ret.append("<ConnectionsTotalRejected>"+counter.getTotalRejected()+"</ConnectionsTotalRejected>"); } private void outputIOPerformanceInfo(StringBuffer ret, IOPerformanceCounter ioPerformance) { ret.append("<MessagesInBytesRate>"+ioPerformance.getMessagesInBytesRate()+"</MessagesInBytesRate>"); ret.append("<MessagesOutBytesRate>"+ioPerformance.getMessagesOutBytesRate()+"</MessagesOutBytesRate>"); } private int toCount(Integer intObj, MyCounter counter) { int ret = intObj==null?0:intObj.intValue(); counter.total += ret; return ret; } public void onHTTPRequest(IVHost inVhost, IHTTPRequest req, IHTTPResponse resp) { if (!doHTTPAuthentication(inVhost, req, resp)) return; StringBuffer ret = new StringBuffer(); String queryStr = req.getQueryString(); Map<String, String> queryMap = HTTPUtils.splitQueryStr(queryStr); boolean isFlat = false; isFlat = this.properties.getPropertyBoolean("isFlat", isFlat); if (queryMap.containsKey("flat")) isFlat = true; try { List<String> vhostNames = VHostSingleton.getVHostNames(); ret.append("<?xml version=\"1.0\"?>\n<WowzaMediaServer>"); IServer server = Server.getInstance(); if (!isFlat) { outputConnectionInfo(ret, server.getConnectionCounter()); outputIOPerformanceInfo(ret, server.getIoPerformanceCounter()); } Iterator<String> iter = vhostNames.iterator(); while (iter.hasNext()) { String vhostName = iter.next(); IVHost vhost = (IVHost)VHostSingleton.getInstance(vhostName); if (vhost != null) { if (!isFlat) { ret.append("<VHost>"); ret.append("<Name>"+URLEncoder.encode(vhostName, "UTF-8")+"</Name>"); ret.append("<TimeRunning>"+vhost.getTimeRunningSeconds()+"</TimeRunning>"); ret.append("<ConnectionsLimit>"+vhost.getConnectionLimit()+"</ConnectionsLimit>"); outputConnectionInfo(ret, vhost.getConnectionCounter()); outputIOPerformanceInfo(ret, vhost.getIoPerformanceCounter()); } List<String> appNames = vhost.getApplicationNames(); Iterator<String> appNameIterator = appNames.iterator(); while (appNameIterator.hasNext()) { String applicationName = appNameIterator.next(); IApplication application = vhost.getApplication(applicationName); if (application == null) continue; if (!isFlat) { ret.append("<Application>"); ret.append("<Name>"+URLEncoder.encode(applicationName, "UTF-8")+"</Name>"); ret.append("<Status>loaded</Status>"); ret.append("<TimeRunning>"+application.getTimeRunningSeconds()+"</TimeRunning>"); outputConnectionInfo(ret, application.getConnectionCounter()); outputIOPerformanceInfo(ret, application.getIoPerformanceCounter()); } List<String> appInstances = application.getAppInstanceNames(); Iterator<String> iterAppInstances = appInstances.iterator(); while (iterAppInstances.hasNext()) { String appInstanceName = iterAppInstances.next(); IApplicationInstance appInstance = application.getAppInstance(appInstanceName); if (appInstance == null) continue; if (!isFlat) { ret.append("<ApplicationInstance>"); ret.append("<Name>"+URLEncoder.encode(appInstance.getName(), "UTF-8")+"</Name>"); ret.append("<TimeRunning>"+appInstance.getTimeRunningSeconds()+"</TimeRunning>"); outputConnectionInfo(ret, appInstance.getConnectionCounter()); outputIOPerformanceInfo(ret, appInstance.getIOPerformanceCounter()); } Map<String, Integer> flashCounts = appInstance.getPlayStreamCountsByName(); Map<String, Integer> smoothCounts = appInstance.getHTTPStreamerSessionCountsByName(IHTTPStreamerSession.SESSIONPROTOCOL_SMOOTHSTREAMING); Map<String, Integer> cupertinoCounts = appInstance.getHTTPStreamerSessionCountsByName(IHTTPStreamerSession.SESSIONPROTOCOL_CUPERTINOSTREAMING); Map<String, Integer> sanjoseCounts = appInstance.getHTTPStreamerSessionCountsByName(IHTTPStreamerSession.SESSIONPROTOCOL_SANJOSESTREAMING); Map<String, Integer> rtspCounts = appInstance.getRTPSessionCountsByName(); List<String> publishStreams = appInstance.getStreams().getPublishStreamNames(); Set<String> streamNames = new HashSet<String>(); streamNames.addAll(publishStreams); streamNames.addAll(flashCounts.keySet()); streamNames.addAll(smoothCounts.keySet()); streamNames.addAll(cupertinoCounts.keySet()); streamNames.addAll(sanjoseCounts.keySet()); streamNames.addAll(rtspCounts.keySet()); Iterator<String> siter = streamNames.iterator(); while(siter.hasNext()) { String streamName = siter.next(); MyCounter counter = new MyCounter(); if (isFlat) { int flashCount = toCount(flashCounts.get(streamName), counter); int cupertinoCount = toCount(cupertinoCounts.get(streamName), counter); int smoothCount = toCount(smoothCounts.get(streamName), counter); int sanjoseCount = toCount(sanjoseCounts.get(streamName), counter); int rtspCount = toCount(rtspCounts.get(streamName), counter); ret.append("<Stream "); ret.append("vhostName=\""+URLEncoder.encode(vhostName, "UTF-8")+"\" "); ret.append("applicationName=\""+URLEncoder.encode(applicationName, "UTF-8")+"\" "); ret.append("appInstanceName=\""+URLEncoder.encode(appInstanceName, "UTF-8")+"\" "); ret.append("streamName=\""+URLEncoder.encode(streamName, "UTF-8")+"\" "); ret.append("sessionsFlash=\""+flashCount+"\" "); ret.append("sessionsCupertino=\""+cupertinoCount+"\" "); ret.append("sessionsSanJose=\""+sanjoseCount+"\" "); ret.append("sessionsSmooth=\""+smoothCount+"\" "); ret.append("sessionsRTSP=\""+rtspCount+"\" "); ret.append("sessionsTotal=\""+counter.total+"\" "); ret.append("/>"); } else { ret.append("<Stream>"); ret.append("<Name>"+URLEncoder.encode(streamName, "UTF-8")+"</Name>"); ret.append("<SessionsFlash>"+toCount(flashCounts.get(streamName), counter)+"</SessionsFlash>"); ret.append("<SessionsCupertino>"+toCount(cupertinoCounts.get(streamName), counter)+"</SessionsCupertino>"); ret.append("<SessionsSanJose>"+toCount(sanjoseCounts.get(streamName), counter)+"</SessionsSanJose>"); ret.append("<SessionsSmooth>"+toCount(smoothCounts.get(streamName), counter)+"</SessionsSmooth>"); ret.append("<SessionsRTSP>"+toCount(rtspCounts.get(streamName), counter)+"</SessionsRTSP>"); ret.append("<SessionsTotal>"+counter.total+"</SessionsTotal>"); ret.append("</Stream>"); } } if (!isFlat) ret.append("</ApplicationInstance>"); } if (!isFlat) ret.append("</Application>"); } if (!isFlat) ret.append("</VHost>"); } } ret.append("</WowzaMediaServer>"); } catch (Exception e) { WMSLoggerFactory.getLogger(HTTPServerVersion.class).error("HTTPServerInfoXML.onHTTPRequest: "+e.toString()); e.printStackTrace(); } try { resp.setHeader("Access-Control-Allow-Origin", "*"); resp.setHeader("Content-Type", "text/xml"); OutputStream out = resp.getOutputStream(); byte[] outBytes = ret.toString().getBytes(); out.write(outBytes); } catch (Exception e) { WMSLoggerFactory.getLogger(HTTPServerVersion.class).error("HTTPServerInfoXML.onHTTPRequest: "+e.toString()); e.printStackTrace(); } } } </code> * VHost.xml 파일에 추가한다. <code> <HTTPProvider> <BaseClass>com.wowza.wms.http.HTTPConnectionCountsXMLCORS</BaseClass> <RequestFilters>statsXMLCORS*</RequestFilters> <AuthenticationMethod>none</AuthenticationMethod> </HTTPProvider> </code>
wowza006.txt
· 마지막으로 수정됨: 2014/01/14 02:58 저자
minetech
문서 도구
문서 보기
이전 판
백링크
맨 위로