要求
在 Flash/AS3 中,您如何解码或捕获嵌入在 mp4 中的 CEA-608 隐藏字幕?我似乎连字幕数据的提示都没有,也找不到任何可以为我指明正确方向的文档。任何文档、示例或想法都会非常有帮助。
细节
我正在使用 OSMF 在 AS3 中构建视频播放器。我似乎找不到 /any/ 有关访问嵌入在 m3u8 视频中的 mp4 块中的 CEA-608 隐藏式字幕的文档。
OSMF CaptioningPlugin 需要一个外部 XML 文件,这样就不行了;我正在寻找嵌入式字幕轨道的集成细节。
我已经尝试将onTextData
, onMetaData
, onCaptionData
,onTextRR
处理程序和侦听器附加到 OSMF Netstream
,但绝对没有运气(比如......这些事件或处理程序都不会触发或返回任何东西)。
私有函数 onTraitAdd ($e:MediaElementEvent) : void { var mediaElement: MediaElement = ($e.target as MediaElement);
switch ($e.traitType) {
case MediaTraitType.LOAD:
_netStreamLoadTrait = mediaElement.getTrait(MediaTraitType.LOAD) as NetStreamLoadTrait;
_netStreamLoadTrait.addEventListener(LoadEvent.LOAD_STATE_CHANGE, onNetStreamLoaded);
break;
}
}
private function onNetStreamLoaded ($e:LoadEvent) : void {
var netStream:NetStream = _netStreamLoadTrait.netStream;
netStream.client.addHandler("onTextData", onTextData);
netStream.client.addHandler("onCuePoint", onTextData);
netStream.client.addHandler("onMetaData", onTextData);
netStream.client.addHandler("onCaptionData", onTextData);
netStream.client.addHandler("onTextRR", onTextData);
netStream.client.addHandler("onCaptionInfo", onTextData);
netStream.addEventListener("onTextData", onTextData);
netStream.addEventListener("onCuePoint", onTextData);
netStream.addEventListener("onMetaData", onTextData);
netStream.addEventListener("onCaptionData", onTextData);
netStream.addEventListener("onTextRR", onTextData);
netStream.addEventListener("onCaptionInfo", onTextData);
netStream.addEventListener(NetStatusEvent.NET_STATUS, onNetStreamStatus);
netStream.addEventListener(NetDataEvent.MEDIA_TYPE_DATA, onStreamData);
}
我不知道问题是否与我的 OSMF 实现有关(也许我正在听错误的 NetStream),或者问题是没有办法从视频中获取这些数据。
示例文件:
http://stream.flowplayer.org/big_buck_bunny_with_captions.mp4 http://now.video.nfl.com/i/captiontest/closedcaptiontest_,350k,550k,.mp4.csmil/master.m3u8(这个例子文件比较复杂虽然因为它需要一个 HLS 插件)
其他
还反编译
JWPlayer
以查看它们如何处理字幕,它们解析出 byteArray ref。在 JWPlayer 中查看字幕播放的步骤
- http://support.jwplayer.com/customer/portal/articles/1430278-cea-608-captions
- 打开浏览器 javascript 控制台
- 粘贴此代码
jwplayer("container_wrapper")
.setup({
file: "http://now.video.nfl.com/i/captiontest/closedcaptiontest_,350k,550k,.mp4.csmil/master.m3u8"
});