Deux types d’événements fournissent des données d’utilisation utiles :
netStatus
et
mediaTypeData
. Il est par ailleurs possible d’utiliser un objet timer pour enregistrer régulièrement la position de la tête de lecture du NetStream.
Les événements
netStatus
fournissent des informations permettant de déterminer la quantité de données diffusées par un utilisateur. Les événements de tampon et de transition de flux RTMFP déclenchent également des événements
netStatus
.
Les événements
mediaTypeData
fournissent des métadonnées et des informations de données XMP. L’événement Netstream.Play.Complete est distribué en tant qu’événement
mediaTypeData
. D’autres données intégrées au flux sont également disponibles via les événements
mediaTypeData
, notamment les points de repère, le texte et les images.
L’exemple suivant explique comment créer une classe permettant de gérer les événements d’état et de données à partir de n’importe quel objet NetStream actif dans une application. En règle générale, une telle classe charge les données qu’elle souhaite analyser sur un serveur en vue de les stocker.
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
}
}
}
}