İki tür olay değerli kullanım verileri sağlar:
netStatus
ve
mediaTypeData
. Ek olarak, NetStream oynatma kafasının konumunu düzenli bir şekilde günlüğe kaydetmek için bir zamanlayıcı kullanılabilir.
netStatus
olayları, bir kullanıcının akışın ne kadarını görüntülediğini belirlemek için kullanabileceğiniz bilgiler sağlar. Arabellek ve RTMFP akışı geçiş olayları ayrıca
netStatus
olayına neden olur.
mediaTypeData
olayları meta veri ve XMP veri bilgileri sağlar. Netstream.Play.Complete olayı bir
mediaTypeData
olayı olarak gönderilir. İşaret noktaları, metin ve görüntüler dahil olmak üzere akış içinde gömülü olan diğer veriler de
mediaTypeData
olayları aracılığıyla kullanılabilir durumdadır.
Aşağıdaki örnek bir uygulamadaki herhangi bir etkin NetStream öğesindeki durum ve veri olaylarını izleyen bir sınıfın nasıl oluşturulacağını gösterir. Normalde, bu tür bir sınıf analiz etmeyi düşündüğü verileri bir koleksiyon sunucusuna yükler.
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
}
}
}
}