Zdarzenia
netStatus
i
mediaTypeData
udostępniają ważne dane dotyczące użycia. Można również okresowo rejestrować położenie głowicy odtwarzania obiektu NetStream przy użyciu czasomierza.
Zdarzenia
netStatus
udostępniają informacje, za pomocą których można określić ilość strumienia wyświetloną na komputerze użytkownika. Zdarzenia buforu i zdarzenia przejścia przesyłania strumieniowego RTMFP również wywołują zdarzenie
netStatus
.
Zdarzenia
mediaTypeData
udostępniają informacje o metadanych i danych XMP. Zdarzenie Netstream.Play.Complete jest wywoływane jako zdarzenie
mediaTypeData
. Zdarzenia
mediaTypeData
udostępniają również inne dane osadzone w strumieniu, takie jak punkty sygnalizacji, tekst i obrazy.
W poniższym przykładzie pokazano, jak utworzyć klasę monitorującą zdarzenia stanu i danych każdego aktywnego obiektu NetStream w aplikacji. Zazwyczaj taka klasa wysyła analizowane dane na serwer kolekcji.
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
}
}
}
}