I metadati comprendono informazioni sul file video come durata, larghezza, altezza e frequenza dei fotogrammi. Le informazioni sui metadati aggiunte al file video dipendono dal software utilizzato per codificare il file video.
var nc:NetConnection = new NetConnection();
nc.connect(null);
var ns:NetStream = new NetStream(nc);
ns.client = this;
ns.play("video.flv");
var vid:Video = new Video();
vid.attachNetStream(ns);
addChild(vid);
function onMetaData(infoObject:Object):void
{
var key:String;
for (key in infoObject)
{
trace(key + ": " + infoObject[key]);
}
}
Il codice precedente genera un output simile al seguente:
width: 320
audiodelay: 0.038
canSeekToEnd: true
height: 213
cuePoints: ,,
audiodatarate: 96
duration: 16.334
videodatarate: 400
framerate: 15
videocodecid: 4
audiocodecid: 2
Se il video non dispone dell'audio, le informazioni sui metadati relativi all'audio (come
audiodatarate
) restituiscono
undefined
perché durante la codifica non è stata aggiunta ai metadati alcuna informazione sull'audio.
Nel codice precedente, le informazioni sui cue point non erano visualizzate. Per visualizzare i metadati dei cue point, potete usare la funzione seguente che visualizza in modo ricorsivo gli elementi in un oggetto:
function traceObject(obj:Object, indent:uint = 0):void
{
var indentString:String = "";
var i:uint;
var prop:String;
var val:*;
for (i = 0; i < indent; i++)
{
indentString += "\t";
}
for (prop in obj)
{
val = obj[prop];
if (typeof(val) == "object")
{
trace(indentString + " " + prop + ": [Object]");
traceObject(val, indent + 1);
}
else
{
trace(indentString + " " + prop + ": " + val);
}
}
}
Se utilizzate lo snippet di codice precedente per tracciare il parametro
infoObject
nel metodo
onMetaData()
, viene creato l'output seguente:
width: 320
audiodatarate: 96
audiocodecid: 2
videocodecid: 4
videodatarate: 400
canSeekToEnd: true
duration: 16.334
audiodelay: 0.038
height: 213
framerate: 15
cuePoints: [Object]
0: [Object]
parameters: [Object]
lights: beginning
name: point1
time: 0.418
type: navigation
1: [Object]
parameters: [Object]
lights: middle
name: point2
time: 7.748
type: navigation
2: [Object]
parameters: [Object]
lights: end
name: point3
time: 16.02
type: navigation
L'esempio seguente visualizza i metadati per un video MP4. In questo esempio si presume l'esistenza di un oggetto TextArea denominato
metaDataOut
in cui scrivere i metadati.
package
{
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.display.StageDisplayState;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.MouseEvent;
public class onMetaDataExample extends Sprite
{
var video:Video = new Video();
public function onMetaDataExample():void
{
var videoConnection:NetConnection = new NetConnection();
videoConnection.connect(null);
var videoStream:NetStream = new NetStream(videoConnection);
videoStream.client = this;
addChild(video);
video.x = 185;
video.y = 5;
video.attachNetStream(videoStream);
videoStream.play("video.mp4");
videoStream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
}
public function onMetaData(infoObject:Object):void
{
for(var propName:String in infoObject)
{
metaDataOut.appendText(propName + "=" + infoObject[propName] + "\n");
}
}
private function netStatusHandler(event:NetStatusEvent):void
{
if(event.info.code == "NetStream.Play.Stop")
stage.displayState = StageDisplayState.NORMAL;
}
}
}
La funzione
onMetaData()
ha prodotto l'output seguente per il video:
moovposition=731965
height=352
avclevel=21
videocodecid=avc1
duration=2.36
width=704
videoframerate=25
avcprofile=88
trackinfo=[object Object]
Uso dell'oggetto information
Nella tabella seguente sono riportati i possibili valori dei metadati video che vengono passati alla funzione di callback
onMetaData()
nell'oggetto che ricevono:
Parametro
|
Descrizione
|
aacaot
|
Tipo di oggetto audio AAC; sono supportati 0, 1 o 2.
|
avclevel
|
Numero di livello AVC IDC quale 10, 11, 20, 21 e così via.
|
avcprofile
|
Numero di profilo AVC quale 55, 77, 100 e così via.
|
audiocodecid
|
Una stringa che indica il codec audio (tecnica di codifica/decodifica) usato. Ad esempio, “.Mp3” o “mp4a”
|
audiodatarate
|
Un numero che indica la frequenza con cui è stato codificato l'audio, espressa in kilobyte al secondo.
|
audiodelay
|
Un numero che indica il tempo del file FLV "time 0" del file FLV originale. Il contenuto video deve essere leggermente ritardato per sincronizzare correttamente l'audio.
|
canSeekToEnd
|
Un valore booleano che è
true
se il file FLV viene codificato con un fotogramma chiave sull'ultimo fotogramma che permette di cercare la fine di un file video a scaricamento progressivo. È
false
se il file FLV non viene codificato con un fotogramma chiave sull'ultimo fotogramma.
|
cuePoints
|
Un array di oggetti, uno per ciascun cue point incorporato nel file FLV. Il valore è undefined se il file FLV non contiene cue point. Ciascun oggetto ha le seguenti proprietà:
-
type
: una stringa che specifica se il cue point è di tipo "navigation" o "event".
-
name
: una stringa che indica il nome del cue point.
-
time
: un numero che specifica il tempo del cue point in secondi e considera solo i primi tre decimali (millisecondi).
-
parameters
: un oggetto opzionale in cui le coppie nome-valore vengono definite dall'utente durante la creazione dei cue point.
|
duration
|
Un numero che specifica la durata del file video, espressa in secondi.
|
framerate
|
Un numero che specifica la frequenza dei fotogrammi del file FLV.
|
height
|
Un numero che specifica l'altezza del file FLV, espressa in pixel.
|
seekpoints
|
Un array che elenca i fotogrammi chiave disponibili come timestamp in millisecondi. Opzionale.
|
tag
|
Un array di coppie chiave-valore che rappresenta le informazioni nell'atomo “ilst”, che è l'equivalente dei tag ID3 per i file MP4. iTunes usa questi tag. Può essere usato per visualizzare grafica, se disponibile.
|
trackinfo
|
Oggetto che fornisce informazioni su tutte le tracce nel file MP4, compresi gli ID di descrizione di esempio.
|
videocodecid
|
Una stringa che indica la versione codec utilizzata per codificare il video. - ad esempio, “avc1” o “VP6F”
|
videodatarate
|
Un numero che specifica la velocità dati video del file FLV.
|
videoframerate
|
Frequenza di fotogrammi del video MP4.
|
width
|
Un numero che specifica la larghezza del file FLV, espressa in pixel.
|
Nella tabella seguente sono riportati i valori possibili per il parametro
videocodecid
:
videocodecid
|
Nome del codec
|
2
|
Sorenson H.263
|
3
|
Screen video (solo SWF versione 7 e successive)
|
4
|
VP6 (solo SWF versione 8 e successive)
|
5
|
Video VP6 con canale alfa (solo SWF versione 8 e successive)
|
Nella tabella seguente sono riportati i valori possibili per il parametro
audiocodecid
:
audiocodecid
|
Nome del codec
|
0
|
uncompressed
|
1
|
ADPCM
|
2
|
Mp3
|
4
|
Nellymoser @ 16 kHz mono
|
5
|
Nellymoser, 8kHz mono
|
6
|
Nellymoser
|
10
|
AAC
|
11
|
Speex
|