在安卓设备上呈现HLS流的封闭字幕

9

我正在开发一个本地的Android应用程序,用于流式传输HLS视频。我试图显示CEA-608闭路电视字幕数据,但是遇到了问题。

方法: 我正在运行Jelly Bean设备(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): FATAL EXCEPTION: main E/AndroidRuntime(7311): java.lang.RuntimeException: failure code: -38

问题: 1)原生Android应用程序是否支持从HLS源中的流式字幕数据进行闭路电视字幕呈现? 2)如果不支持,是否有替代方案? 3)上面链接中的文档(如下所述)表明MP4或3GPP媒体源支持带内和带外文本轨道。这是否必然排除了HLS(我认为是基于MPEG-2的)的工作?

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

感谢您能提供的任何帮助!

2个回答

5
我们经历了完全相同的过程。在Android上,MediaPlayer似乎不支持HLS中嵌入的CEA-608字幕。当媒体播放器(MP)正在播放时,OnTimedTextListener从未被调用。尝试在MP正在播放时调用getTrackInfo()会导致崩溃,就像你所提到的那样。
也许Android MP只能解码MP4中包含的SRT。
另一种选择是使用外部定时文本轨道,但在直播流环境中,这将是困难的。

1
你知道最新版本的Android是否支持最近添加到HLS草案规范中的WebVTT字幕吗? - vipw

1
这个问题很老了,但仍有人可能会遇到这个问题。 ExoPlayer试图作为一个Android版本独立的通用多媒体库来解决这个问题。
它目前支持CEA-608、SubRip、TTML、TX3g和WebVtt字幕。当然,并不完全符合所有标准,但是其中的一部分非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接