在Flash Player中捕获或解码HLS MP4视频中嵌入的CEA-608字幕



请求

在Flash/AS3中,如何解码或捕获嵌入mp4中的CEA-608隐藏字幕?我似乎连标题数据的提示都找不到,也找不到任何可以为我指明正确方向的文档。任何文档、示例或想法都会非常有用。

规格

我正在使用OSMF在AS3中构建一个视频播放器。我似乎找不到关于访问嵌入在m3u8视频中mp4块中的CEA-608隐藏字幕的文档。

OSMF CaptioningPlugin需要一个外部XML文件,这样做是行不通的;我正在寻找嵌入式字幕音轨的集成细节。

我尝试过将onTextDataonMetaDataonCaptionDataonTextRR处理程序和侦听器连接到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插件(

其他

  1. 我尝试使用OSMFCCDecoder.swc(很难找到,上传到这里(。文件很少,也没有关于预期结果的信息。

  2. 还反编译了JWPlayer以查看它们如何处理标题,它们解析出字节数组引用

  3. 查看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进行解码的方法。

最新更新