0

要求

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

其他

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

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

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

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

1 回答 1

3

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

  • CEA608
  • 网络VTT
  • ID3 标签 CEA608 适用于从 3.0 开始的所有 Apple iOS 设备,但难以支持,因为它是基于字符的格式。较新的 iOS 设备支持 WebVTT,但它基于文本且更易于解码。

CEA608 嵌入在 ANSI/SCTE 128 2010 第 8 节中指定的 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 的方法。

于 2014-08-04T11:19:51.563 回答