使用OSMF的Flash视频mp4元数据

时间:2012-02-08 17:37:27

标签: flash actionscript-3 osmf

如果我在QuickTime中播放我的MP4,我可以在显示屏上看到隐藏字幕消息。

感谢QuickTime我知道元数据已存在,所以我也试图在我的Flash视频播放器中显示CC。但是,两种提取元数据的方法只返回有关视频负载的信息,我从来没有得到任何其他信息。

我猜我没有正确加载mp4中的元数据?或者CC数据可能不在元数据中?

代码

private function streamMetaData(obj:Object):void {
    this._metaData = obj;
    for(var key:String in obj) {
        trace("STREAM_METADATA: " + key + "=" + obj[key]);
    }
}
private function onMetaData(event:OvpEvent):void {
    for(var key:String in event.data) {
        trace("METADATA: " + key + "=" + event.data[key]);
    }
}

this._sprite = new AkamaiMediaSprite(); // essentially synonymous with OVP (OSMF)

this.sprite.addEventListener(OvpEvent.METADATA, this.onMetaData, false, 0, true);
this.sprite.netStream.client = {onMetaData:this.streamMetaData};

输出

STREAM_METADATA: trackinfo=[object Object],[object Object],[object Object]
STREAM_METADATA: avcprofile=77
STREAM_METADATA: duration=1657.835
STREAM_METADATA: moovPosition=131287896
STREAM_METADATA: width=512
STREAM_METADATA: avclevel=21
STREAM_METADATA: height=288
STREAM_METADATA: audiosamplerate=44100
STREAM_METADATA: videoframerate=15
STREAM_METADATA: videocodecid=avc1
STREAM_METADATA: audiocodecid=mp4a
STREAM_METADATA: audiochannels=2
STREAM_METADATA: aacaot=2
METADATA: trackinfo=[object Object],[object Object],[object Object]
METADATA: avcprofile=77
METADATA: duration=1657.835
METADATA: moovPosition=131287896
METADATA: width=512
METADATA: avclevel=21
METADATA: height=288
METADATA: audiosamplerate=44100
METADATA: videoframerate=15
METADATA: videocodecid=avc1
METADATA: audiocodecid=mp4a
METADATA: audiochannels=2
METADATA: aacaot=2

2 个答案:

答案 0 :(得分:1)

我不熟悉您使用的特定视频库,但如果它“实际上与Open Video Player同义”,我在他们的文档中发现了一些有趣的内容:他们有event for captions {{1}传递OvpEvent.CAPTION对象。

也许这会起作用(未经测试)

org.openvideoplayer.cc.Caption

答案 1 :(得分:0)

由于视频中有3首曲目,因此:

STREAM_METADATA: trackinfo=[object Object],[object Object],[object Object]

......其中一个可能是CC曲目。即,CC不是元数据,而是嵌入为轨道。如果您在streamMetaData方法中跟踪这三个对象的属性,可以提供更多信息。

您也可以尝试OvpEvent.NETSTREAM_TEXTDATA。这看起来像是NetStream的onTextData事件的中继,它往往适用于获取嵌入式字幕。

this.sprite.addEventListener(OvpEvent.NETSTREAM_TEXTDATA, this.onTextData, false, 0, true);

检查事件对象(与其他对象一样),因为文档没有意义,在OvpEvent上谈论info属性,虽然它似乎没有(因此它们可能意味着像onMetaData中的data