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

时间:2014-05-21 05:06:28

标签: actionscript-3 osmf m3u8 closed-captions

请求

在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 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插件)

其他

  1. 我尝试使用OSMFCCDecoder.swc(很难找到,uploaded here)。非常little documentation,没有关于预期结果的信息。

  2. 同样反编译JWPlayer以查看它们如何处理字幕,它们解析出byteArray ref

  3. 查看在JWPlayer中播放字幕的步骤

  4. jwplayer("container_wrapper")
        .setup({
            file: "http://now.video.nfl.com/i/captiontest/closedcaptiontest_,350k,550k,.mp4.csmil/master.m3u8"
        });
    

1 个答案:

答案 0 :(得分:2)

HLS Streams可以包含几种不同格式的字幕:

  • CEA608
  • WebVTT插入
  • ID3标签 CEA608适用于从3.0开始的所有Apple iOS设备,但很难支持,因为它是基于字符的格式。 WebVTT在较新的iOS设备中受支持,但基于文本且易于解码。

CEA608嵌入在H264 SEI NALU中,如ANSI / SCTE 128 2010第8节中所述。因此,为了解码它,您需要部分解码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 您可能还需要查看用于解码H264 NALU的方法的MPEG2传输流规范。