Due tipi di eventi forniscono dati di utilizzo preziosi:
netStatus
e
mediaTypeData
. Inoltre, è possibile utilizzare un timer per registrare periodicamente la posizione dell'indicatore di riproduzione NetStream.
Gli eventi
netStatus
forniscono informazioni utilizzabili per determinare la quantità di flusso visualizzato da un utente. Eventi di transizione flusso buffer e RTMFP generano inoltre un evento
netStatus
.
Gli eventi
mediaTypeData
forniscono informazioni sui metadati e i dati XMP. L'evento Netstream.Play.Complete viene inviato come un evento
mediaTypeData
. Altri dati incorporati nel flusso sono pure disponibili tramite eventi
mediaTypeData
, inclusi cue point, testo e immagini.
L'esempio seguente illustra come creare una classe che monitora eventi di stato e dati da qualsiasi oggetto NetStream attivo in un'applicazione. In genere, tale classe carica i dati da analizzare in un server per la raccolta.
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
}
}
}
}