Os metadados incluem informações sobre o arquivo de vídeo, como duração, largura, altura e taxa de quadros. As informações dos metadados que são adicionadas ao arquivo de vídeo dependem do software utilizado para codificar o arquivo.
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]);
}
}
O código anterior gera uma saída parecida com esta:
width: 320
audiodelay: 0.038
canSeekToEnd: true
height: 213
cuePoints: ,,
audiodatarate: 96
duration: 16.334
videodatarate: 400
framerate: 15
videocodecid: 4
audiocodecid: 2
Se o seu vídeo não tem áudio, as informações de metadados relacionadas a áudio (como
audiodatarate
) retornam
undefined
, pois nenhuma informação de áudio é adicionada aos metadados durante a codificação.
No código anterior, as informações de ponto de sinalização não eram exibidas. Para exibir os metadados de ponto de sinalização, use esta função, que exibe os itens recursivamente em um 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);
}
}
}
O uso do snippet de código anterior para rastrear o parâmetro
infoObject
no método
onMetaData()
gera a seguinte saída:
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
O exemplo a seguir exibe os metadados de um vídeo MP4. Ele pressupõe que existe um objeto TextArea chamado
metaDataOut
, no qual grava os metadados.
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;
}
}
}
A função
onMetaData()
gerou a seguinte saída para esse vídeo:
moovposition=731965
height=352
avclevel=21
videocodecid=avc1
duration=2.36
width=704
videoframerate=25
avcprofile=88
trackinfo=[object Object]
Uso do objeto de informação
A tabela a seguir mostra os possíveis valores para os metadados de vídeo que são passados à função de retorno de chamada
onMetaData()
no Object por eles recebido:
Parâmetro
|
Descrição
|
aacaot
|
Tipo de objeto de áudio AAC; são suportados os valores 0, 1 ou 2.
|
avclevel
|
Número de nível AVC IDC, como 10, 11, 20, 21 e assim por diante.
|
avcprofile
|
Número de perfil AVC, como 55, 77, 100 e assim por diante.
|
audiocodecid
|
String que indica o codec de áudio (técnica de codificação/decodificação) que foi usado; por exemplo “.Mp3” ou “mp4a”
|
audiodatarate
|
Número que indica a taxa de codificação de áudio, em KB por segundo.
|
audiodelay
|
Número que indica em que tempo do arquivo FLV está "time 0" do arquivo FLV original. O conteúdo do vídeo precisa ter um pequeno atraso para que o áudio seja sincronizado corretamente.
|
canSeekToEnd
|
Um valor booliano que é
true
se o arquivo FLV está codificado com um quadro-chave no último quadro, o que permite fazer a busca até o final de um arquivo de vídeo com download progressivo. É
falso
se o arquivo FLV não está codificado com um quadro-chave no último quadro.
|
cuePoints
|
Uma matriz de objetos, uma para cada ponto de sinalização incorporado no arquivo FLV. O valor é indefinido se o arquivo FLV não contiver pontos de sinalização. Cada objeto tem as seguintes propriedades:
-
type
: string que especifica o tipo do ponto de sinalização como "navegação" ou "evento".
-
name
: string que é o nome do ponto de sinalização.
-
time
: número que é a hora do ponto de sinalização em segundos, com uma precisão de três casas decimais (milésimos de segundo).
-
parameters
: objeto opcional que tem pares de nome/valor que o usuário designa ao criar os pontos de sinalização.
|
duration
|
Um número que representa a duração do arquivo de vídeo em segundos.
|
framerate
|
Um número que representa a taxa de quadros do arquivo FLV.
|
height
|
Um número que representa a altura do arquivo FLV em pixels.
|
seekpoints
|
Uma matriz que lista os quadros-chave disponíveis como carimbos de data/hora em milésimos de segundo. Opcional.
|
tags
|
Uma matriz de pares chave/valor que representam as informações no núcleo “ilst”, que é o equivalente de tags ID3 para arquivos MP4. O iTunes usa essas tags. Pode ser usado para exibir arte-final, se disponível.
|
trackinfo
|
Objeto que fornece informações sobre todas as faixas do arquivo MP4, inclusive o ID de descrição da amostra.
|
videocodecid
|
Uma string que representa a versão de codec que foi usada para codificar o vídeo. - por exemplo, “avc1” ou “VP6F”
|
videodatarate
|
Um número que representa a taxa de dados do vídeo do arquivo FLV.
|
videoframerate
|
Taxa de quadros do vídeo MP4.
|
width
|
Um número que representa a largura do arquivo FLV em pixels.
|
A tabela a seguir mostra os valores possíveis para o parâmetro
videocodecid
:
videocodecid
|
Nome do codec
|
2
|
Sorenson H.263
|
3
|
Vídeo de tela (somente SWF versão 7 e posteriores)
|
4
|
VP6 (somente SWF versão 8 e posteriores)
|
5
|
Vídeo VP6 com canal alfa (somente SWF versão 8 e posteriores)
|
A tabela a seguir mostra os valores possíveis para o parâmetro
audiocodecid
:
audiocodecid
|
Nome do codec
|
0
|
não compactado
|
1
|
ADPCM
|
2
|
Mp3
|
4
|
Nellymoser @ 16 kHz mono
|
5
|
Nellymoser, 8 kHz mono
|
6
|
Nellymoser
|
10
|
AAC
|
11
|
Speex
|