NetStream 이벤트 모니터링

두 이벤트 유형 netStatus mediaTypeData 는 사용량과 관련하여 유용한 데이터를 제공합니다. 또한 타이머를 사용하여 NetStream 재생 헤드의 위치를 정기적으로 기록할 수도 있습니다.

netStatus 이벤트는 사용자가 보았던 스트림 양을 확인하는 데 사용할 수 있는 정보를 제공합니다. 버퍼와 RTMFP 스트림 전환 이벤트 또한 netStatus 이벤트를 발생시킵니다.

mediaTypeData 이벤트는 메타데이터와 XMP 데이터 정보를 제공합니다. Netstream.Play.Complete 이벤트는 mediaTypeData 이벤트로 전달됩니다. 큐 포인트, 텍스트, 이미지 등 스트림에 포함된 기타 데이터도 mediaTypeData 이벤트를 통해 사용할 수 있습니다.

다음 예제는 응용 프로그램의 활성 NetStream에서 상태 및 데이터 이벤트를 모니터링하는 클래스를 만드는 방법을 보여 줍니다. 일반적으로 이러한 클래스는 분석과 관련된 데이터를 서버에 업로드하여 수집합니다.

package com.adobe.example 
{ 
    import flash.events.NetDataEvent; 
    import flash.events.NetMonitorEvent; 
    import flash.events.NetStatusEvent; 
    import flash.net.NetMonitor; 
    import flash.net.NetStream; 
     
    public class NetStreamEventMonitor 
    { 
        private var netmon:NetMonitor; 
        private var heartbeat:Timer = new Timer( 5000 ); 
         
        public function NetStreamEventMonitor() 
        { 
            //Create NetMonitor object 
            netmon = new NetMonitor(); 
            netmon.addEventListener( NetMonitorEvent.NET_STREAM_CREATE, newNetStream ); 
 
            //Start the heartbeat timer 
            heartbeat.addEventListener( TimerEvent.TIMER, onHeartbeat ); 
            heartbeat.start(); 
        } 
         
        //On new NetStream 
        private function newNetStream( event:NetMonitorEvent ):void 
        { 
            trace( "New Netstream object"); 
            var stream:NetStream = event.netStream; 
            stream.addEventListener(NetDataEvent.MEDIA_TYPE_DATA, onStreamData); 
            stream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);             
        } 
         
        //On data events from a NetStream object 
        private function onStreamData( event:NetDataEvent ):void 
        { 
             
            var netStream:NetStream = event.target as NetStream; 
            trace( "Data event from " + netStream.info.uri + " at " + event.timestamp ); 
            switch( event.info.handler ) 
            { 
                case "onMetaData": 
                    //handle metadata; 
                    break; 
                case "onXMPData": 
                    //handle XMP; 
                    break; 
                case "onPlayStatus": 
                    //handle NetStream.Play.Complete 
                case "onImageData": 
                    //handle image 
                    break; 
                case "onTextData": 
                    //handle text 
                    break; 
                default: 
                    //handle other events 
                     
            } 
        } 
         
        //On status events from a NetStream object 
        private function onStatus( event:NetStatusEvent ):void 
        { 
            trace( "Status event from " + event.target.info.uri + " at " + event.target.time ); 
            //handle status events 
        } 
        //On heartbeat timer 
        private function onHeartbeat( event:TimerEvent ):void 
        { 
            var streams:Vector.<NetStream> = netmon.listStreams(); 
            for( var i:int = 0; i < streams.length; i++ ) 
            { 
                trace( "Heartbeat on " + streams[i].info.uri + " at " + streams[i].time ); 
                //handle heartbeat event 
            } 
        } 
         
    } 
}