두 이벤트 유형
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
}
}
}
}
|
|
|