8

我正在开发一个流式传输 HLS 视频的原生 Android 应用程序。我正在尝试显示 CEA-608 隐藏式字幕数据,但我遇到了问题。

方法: 我在果冻豆设备(API 4.1+)上运行,它支持隐藏式字幕和 HLS 播放(http://developer.android.com/about/versions/android-4.1.html#Multimedia)。

测试提要: 我正在使用包含字幕数据的 Apple 示例 HLS bip-bop 提要进行测试(https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8

抓取字幕数据: 根据 Android 文档,我试图通过调用以下方式获取字幕轨道:

"MediaPlayer.getTrackInfo()"

问题: 当我执行 getTrackInfo() 行时播放器崩溃,LogCat 中的输出如下:

E/AndroidRuntime(7311):致命异常:主要 E/AndroidRuntime(7311):java.lang.RuntimeException:失败代码:-38

问题: 1) 原生 Android 应用程序是否支持从 HLS 提要上的流内字幕数据呈现隐藏式字幕?2)如果没有,有其他选择吗?3) 上面链接中的文档(下面引用)表明 MP4 或 3GPP 媒体源支持流媒体字幕。这是否一定会排除 HLS(我认为它是基于 MPEG-2)的工作?

MediaPlayer 现在可以处理带内和带外文本轨道。带内文本轨道作为 MP4 或 3GPP 媒体源中的文本轨道出现。可以通过 addTimedTextSource() 方法将带外文本轨道添加为外部文本源。添加所有外部文本轨道源后,应调用 getTrackInfo() 以获取数据源中所有可用轨道的刷新列表。

谢谢你尽你所能的帮助!

4

2 回答 2

5

我们进行了完全相同的练习。Android 上的 MediaPlayer 似乎不支持 HLS 中嵌入的 CEA-608。播放媒体播放器 (MP) 时从未调用 OnTimedTextListener。如您所述,在播放 MP 时尝试调用 getTrackInfo() 会导致崩溃。

可能是 Android MP 只能解码 MP4 中包含的 SRT。

替代方案是使用外部定时文本轨道,但在实时流媒体环境中,这将是困难的。

于 2013-02-07T20:34:46.120 回答
1

这个问题很老了,但有些人仍然可能面临这个问题。

ExoPlayer试图作为一个独立于 Android 版本的通用多媒体库来解决这个问题。

目前支持 CEA-608、SubRip、TTML、TX3g 和 WebVtt 字幕。当然不是全部标准,而是其中有用的一部分。

于 2016-02-06T06:00:48.010 回答