Metadane zawierają informacje o pliku wideo, takie jak czas trwania, szerokość, wysokość i częstość klatek. To, jakie metadane zostaną dodane do pliku wideo, zależy od oprogramowania używanego do zakodowania tego pliku.
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]);
}
}
Kod przedstawiony powyżej generuje wyniki podobne do następujących:
width: 320
audiodelay: 0.038
canSeekToEnd: true
height: 213
cuePoints: ,,
audiodatarate: 96
duration: 16.334
videodatarate: 400
framerate: 15
videocodecid: 4
audiocodecid: 2
Jeśli materiał wideo nie zawiera danych audio, metadane związane z dźwiękiem (takie jak
audiodatarate
) mają wartości
undefined
, ponieważ w trakcie kodowania do metadanych nie są dodawane żadne informacje o dźwięku.
W powyższym kodzie informacje o punktach sygnalizacji nie były wyświetlane. W celu wyświetlenia metadanych punktów sygnalizacji można użyć następującej funkcji, która rekurencyjnie wyświetla elementy w obiekcie Object:
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);
}
}
}
Gdyby użyć powyższego urywka kodu do wyświetlenia parametru
infoObject
w metodzie
onMetaData()
, zostałyby wyświetlone następujące wyniki:
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
Poniższy przykładowy kod wyświetla metadane wideo MP4. Przyjęto założenie, że istnieje obiekt TextArea o nazwie
metaDataOut
, w którym wypisywane są metadane.
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;
}
}
}
Funkcja
onMetaData()
wygenerowała następujące wyniki dla tego wideo:
moovposition=731965
height=352
avclevel=21
videocodecid=avc1
duration=2.36
width=704
videoframerate=25
avcprofile=88
trackinfo=[object Object]
Korzystanie z obiektu informacyjnego
W poniższej tabeli wymieniono możliwe wartości metadanych wideo przekazywanych do funkcji wywołania zwrotnego
onMetaData()
w odbieranym przez nią obiekcie Object:
Parametr
|
Opis
|
aacaot
|
Typ obiektu audio AAC; obsługiwane są typy 0, 1 i 2.
|
avclevel
|
Poziom AVC IDC, na przykład 10, 11, 20, 21 itd.
|
avcprofile
|
Numer profilu AVC, na przykład 55, 77, 100 itd.
|
audiocodecid
|
Ciąg znaków identyfikujący zastosowany kodek audio (technikę kodowania/dekodowania) — na przykład ".Mp3" lub "mp4a".
|
audiodatarate
|
Liczba określająca szybkość transmisji, z jaką zakodowany jest strumień audio, w kilobajtach na sekundę.
|
audiodelay
|
Liczba określająca, w jakim momencie pliku FLV wypada czas „0” oryginalnego pliku FLV. Treść wideo musi być nieznacznie opóźniona w celu prawidłowego zsynchronizowania dźwięku.
|
canSeekToEnd
|
Wartość logiczna (Boolean) równa
true
, jeżeli plik FLV jest zakodowany z klatką kluczową na ostatniej klatce, co pozwala na wyszukiwanie końca stopniowo pobieranego klipu filmowego. Wartość
false
, gdy plik FLV nie jest zakodowany z kluczową klatką na ostatniej klatce.
|
cuePoints
|
Tablica obiektów, po jednym dla każdego punktu sygnalizacji osadzonego w pliku FLV. Wartość jest niezdefiniowana, jeżeli plik FLV nie zawiera punktów sygnalizacji. Każdy obiekt ma następujące właściwości:
-
type
— ciąg znaków określający, czy punkt sygnalizacji jest typu "navigation", czy "event".
-
name
— ciąg znaków, który określa nazwę punktu sygnalizacji.
-
time
— liczba określająca czas położenia punktu sygnalizacji w sekundach, z dokładnością do trzech miejsc dziesiętnych (milisekundy).
-
parameters
— obiekt opcjonalny zawierający pary nazwa-wartość określane przez użytkownika podczas tworzenia punktów sygnalizacji.
|
duration
|
Liczba określająca w sekundach czas trwania pliku wideo.
|
framerate
|
Liczba określająca liczba klatek na sekundę w pliku FLV.
|
height
|
Liczba określająca wysokość pliku wideo w pikselach.
|
seekpoints
|
Tablica z listą dostępnych klatek kluczowych pełniących rolę znaczników czasu, których położenie jest określone w milisekundach. Opcjonalnie.
|
tags
|
Tablica par klucz-wartość reprezentujących informacje z atomu "ilist", który jest odpowiednikiem znaczników ID3 w plikach MP4. Znaczniki te wykorzystywane są przez program iTunes. Mogą posłużyć do wyświetlania grafiki, o ile jest dostępna.
|
trackinfo
|
Obiekt zawierający informacje o wszystkich ścieżkach w pliku MP4, w tym ich identyfikatory opisu próbek.
|
videocodecid
|
Ciąg znaków identyfikujący wersję kodeka użytego do kodowania obrazu wideo. Na przykład: "avc1" lub "VP6F".
|
videodatarate
|
Liczba określająca szybkość transmisji wideo w pliku FLV.
|
videoframerate
|
Częstość klatek wideo MP4.
|
width
|
Liczba określająca szerokość pliku FLV w pikselach.
|
W poniższej tabeli przedstawiono możliwe wartości parametru
videocodecid
:
videocodecid
|
Nazwa kodeka
|
2
|
Sorenson H.263
|
3
|
Wideo ekranowe (tylko pliki SWF w wersji 7 i późniejszych)
|
4
|
VP6 (tylko pliki SWF w wersji 8 i późniejszych)
|
5
|
Wideo VP6 z kanałem (tylko pliki SWF w wersji 8 i późniejszych)
|
W poniższej tabeli przedstawiono możliwe wartości parametru
audiocodecid
:
audiocodecid
|
Nazwa kodeka
|
0
|
bez kompresji
|
1
|
ADPCM
|
2
|
Mp3
|
4
|
Nellymoser przy 16 kHz mono
|
5
|
Nellymoser, 8 kHz mono
|
6
|
Nellymoser
|
10
|
AAC
|
11
|
Speex
|