请求
在Flash/AS3中,如何解码或捕获嵌入mp4中的CEA-608隐藏字幕?我似乎连标题数据的提示都找不到,也找不到任何可以为我指明正确方向的文档。任何文档、示例或想法都会非常有用。
规格
我正在使用OSMF在AS3中构建一个视频播放器。我似乎找不到关于访问嵌入在m3u8视频中mp4块中的CEA-608隐藏字幕的文档。
OSMF CaptioningPlugin需要一个外部XML文件,这样做是行不通的;我正在寻找嵌入式字幕音轨的集成细节。
我尝试过将onTextData
、onMetaData
、onCaptionData
、onTextRR
处理程序和侦听器连接到OSMF Netstream
,但绝对没有成功(比如……这些事件或处理程序都不会触发或返回任何内容(。
私有函数onTraitAdd($e:MediaElementEvent(:void{var mediaElement:mediaElement=($e.target作为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.mp4http://now.video.nfl.com/i/captiontest/closedcaptiontest_,350k,550k,.mp4.csmil/master.m3u8(尽管此示例文件更复杂,因为它需要HLS插件(
其他
我尝试使用
OSMFCCDecoder.swc
(很难找到,上传到这里(。文件很少,也没有关于预期结果的信息。还反编译了
JWPlayer
以查看它们如何处理标题,它们解析出字节数组引用查看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"
});
HLS流可以包含几种不同格式的字幕:
- CEA608
- WebVTT
- ID3标签CEA608适用于3.0以后的所有苹果iOS设备,但很难支持,因为它是一种基于字符的格式。WebVTT在较新的iOS设备中受支持,但它是基于文本的,解码起来更容易
按照ANSI/SCTE 128 2010第8节的规定,CEA608嵌入H264 SEI NALU中。因此,为了对其进行解码,您需要对H.264比特流进行部分解码。您提供的链接http://help.adobe.com/en_US/adobemediaserver/devguide/WS5262178513756206-55daa065139e25f4596-8000.html似乎描述了一个用于解码CEA608的库,我相信预期的结果将是通过视频呈现的文本。
自己解码CEA608很难,因为这是一种基于字符的格式,可能包括字母、数字、西班牙语、退格、颜色和位置标记。您可以在此处找到CEA608标准:http://www.ce.org/Standards/Standard-Listings/R4-3-Television-Data-Systems-Subcommittee/Line-21-Data-Service.aspx您可能还需要查看MPEG2传输流规范,了解对H264 NALU进行解码的方法。