メタデータには、長さ、幅、高さ、フレームレートなどビデオファイルに関する情報が含まれています。ビデオファイルに追加されるメタデータ情報は、ビデオファイルのエンコードに使用するソフトウェアによって決まります。
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]);
}
}
前述のコードを実行すると、次のような出力が生成されます。
width: 320
audiodelay: 0.038
canSeekToEnd: true
height: 213
cuePoints: ,,
audiodatarate: 96
duration: 16.334
videodatarate: 400
framerate: 15
videocodecid: 4
audiocodecid: 2
ビデオにオーディオがない場合は、エンコード中にメタデータにオーディオ情報が追加されないので、
audiodatarate
などのオーディオ関連のメタデータ情報は
undefined
を返します。
前述のコードでは、キューポイント情報は表示されていません。 キューポイントメタデータを表示するには、オブジェクトのアイテムを再帰的に表示する次の関数を使用することができます。
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);
}
}
}
前述のコード例を使用し、
onMetaData()
メソッドの
infoObject
パラメーターをトレースすると、出力は次のようになります。
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
次の例では、MP4 ビデオのメタデータが表示されます。
metaDataOut
という TextArea オブジェクトがあり、このオブジェクトにメタデータを書き込むことを想定しています。
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;
}
}
}
onMetaData()
関数では、このビデオに対して次の出力が生成されました。
moovposition=731965
height=352
avclevel=21
videocodecid=avc1
duration=2.36
width=704
videoframerate=25
avcprofile=88
trackinfo=[object Object]
情報オブジェクトの使用
次の表に、
onMetaData()
コールバック関数に渡すことのできる、受信したオブジェクト内のビデオメタデータの値を示します。
パラメーター
|
説明
|
aacaot
|
AAC オーディオオブジェクトタイプ。0、1 または 2 がサポートされています。
|
avclevel
|
10、11、20、21 などの AVC IDC レベル番号です。
|
avcprofile
|
55、77、100 などの AVC プロファイル番号です。
|
audiocodecid
|
使用されたオーディオコーデック(コード / デコード技法)を示すストリング(「.Mp3」や「mp4a」など)です。
|
audiodatarate
|
オーディオがエンコードされるレートをキロバイト秒で示す数値です。
|
audiodelay
|
元の FLV ファイルの「time 0」の時間を示す数値です。 オーディオと正しく同期化するには、ビデオコンテンツを少し遅延させる必要があります。
|
canSeekToEnd
|
ブール値です。プログレッシブダウンロードされるビデオクリップの最後をシークできるようにするために、最後のフレームにキーフレームを付けて FLV ファイルをエンコードした場合に
true
になります。最後のフレームにキーフレームを付けずに FLV ファイルをエンコードした場合は
false
になります。
|
cuePoints
|
オブジェクトの配列。FLV ファイルに埋め込まれたそれぞれのキューポイントに 1 つずつあります。 FLV ファイルにキューポイントがない場合は、値は未定義となります。 各オブジェクトには次のプロパティがあります。
-
type
:キューポイントのタイプを「navigation」または「event」として指定するストリング。
-
name
:キューポイントの名前を示すストリング。
-
time
:キューポイントの時間を示す数値。小数点以下 3 桁(ミリ秒)まで使用します。
-
parameters
:キューポイントを作成するときにユーザーによって指定される、名前と値のペアを持つオプションのオブジェクト。
|
duration
|
ビデオファイルの長さを秒単位で示す数値です。
|
framerate
|
FLV ファイルのフレームレートを示す数値です。
|
height
|
FLV ファイルの高さをピクセル単位で示す数値です。
|
seekpoints
|
ミリ秒単位のタイムスタンプとして使用可能なキーフレームの一覧を示す配列です(オプション)。
|
tags
|
「ilst」アトム内の情報を表すキーと値のペアの配列であり、MP4 ファイルの ID3 タグと同等です。iTunes ではこれらのタグが使用されます。アートワークが使用可能な場合に、その表示に使用することができます。
|
trackinfo
|
サンプル説明 ID など、MP4 ファイル内のすべてのトラックに関する情報を提供するオブジェクトです。
|
videocodecid
|
ビデオのエンコードに使用されたコーデックバージョンを示すストリングです。例えば、「avc1」や「VP6F」などです。
|
videodatarate
|
FLV ファイルのビデオデータレートを示す数値です。
|
videoframerate
|
MP4 ビデオのフレームレートです。
|
width
|
FLV ファイルの幅をピクセル単位で示す数値です。
|
次の表に、
videocodecid
パラメーターで使用可能な値をまとめます。
videocodecid
|
コーデック名
|
2
|
Sorenson H.263
|
3
|
Screen Video(SWF バージョン 7 以降のみ)
|
4
|
VP6(SWF バージョン 8 以降のみ)
|
5
|
アルファチャンネルを使用する VP6 Video(SWF バージョン 8 以降のみ)
|
次の表に、
audiocodecid
パラメーターで使用可能な値をまとめます。
audiocodecid
|
コーデック名
|
0
|
uncompressed
|
1
|
ADPCM
|
2
|
MP3
|
4
|
Nellymoser @ 16 kHz モノラル
|
5
|
Nellymoser、8kHz モノラル
|
6
|
Nellymoser
|
10
|
AAC
|
11
|
Speex
|