在Android上为HLS流渲染隐藏式字幕

时间:2013-02-07 00:54:47

标签: android http-live-streaming closed-captions

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

方法 我正在使用Jelly bean设备(API 4.1+),它支持隐藏式字幕和HLS播放(http://developer.android.com/about/versions/android-4.1.html#Multimedia)。

测试Feed 我正在测试使用包含字幕数据的Apple样本HLS bip-bop Feed(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()来获取   刷新数据源中所有可用曲目的列表。

感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:5)

我们通过完全相同的运动。 Android上的MediaPlayer似乎不支持嵌入在HLS中的CEA-608。播放媒体播放器(MP)时从未调用OnTimedTextListener。试图在MP播放时调用getTrackInfo()导致你提到的崩溃。

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

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

答案 1 :(得分:0)

问题已经很久了,但是有些人仍然可能会面临这个问题。

ExoPlayer尝试将此问题解决为Android版独立的通用多媒体库。

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