2013-02-07 58 views
8

我正在處理用於流式HLS視頻的原生Android應用程序。我試圖讓CEA-608隱藏式字幕數據顯示,但我遇到了一個問題。在Android上呈現HLS流的隱藏式字幕

方法: 我一個果凍豆設備(API 4.1+),它支持隱藏字幕和HLS播放(http://developer.android.com/about/versions/android-4.1.html#Multimedia)上運行。

試送: 我使用包含字幕數據的樣本蘋果HLS BIP-BOP飼料(https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8

拼搶標題數據測試: 按照Android的文檔,我試圖通過調用來獲取字幕軌道:

"MediaPlayer.getTrackInfo()"

問題:

E/AndroidRuntime(7311):致命異常:主 E/AndroidRuntime(7311):了java.lang.RuntimeException:失敗 當我執行getTrackInfo()線,以在logcat的以下輸出的播放器崩潰代碼:-38

問題: 1)原生Android應用支持從插播字幕數據隱藏字幕渲染上HLS飼料? 2)如果不是,是否有其他選擇? 3)上面鏈接中的文檔(以下引用)表示MP4或3GPP媒體源支持插播字幕。這是否必然排除HLS(我認爲這是基於MPEG-2)的工作原理?

MediaPlayer現在可以處理帶內和帶外文本軌道。 帶內文本軌道作爲MP4或3GPP媒體源中的文本軌道。可以通過addTimedTextSource()方法將帶外文本軌道添加爲外部文本 源文件。在添加了所有外部文本軌道 源後,應調用getTrackInfo()以獲取數據源中所有可用軌道的刷新列表 。

感謝您提供任何幫助!

回答

5

我們經歷了完全相同的練習。 Android上的MediaPlayer似乎不支持嵌入HLS中的CEA-608。當媒體播放器(MP)播放時,OnTimedTextListener從未被調用。試圖在MP播放時調用getTrackInfo()導致崩潰,如您所述。

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

另一種方法是使用外部定時文本軌道,但在直播流環境中,這將是困難的。

+1

您是否知道新版本的Android是否支持最近添加到HLS草稿規範中的WebVTT字幕? – vipw

0

問題是相當古老的,但有些人仍然可能會面臨問題。

ExoPlayer試圖解決作爲一個Android版本獨立的通用多媒體庫的問題。

它目前支持CEA-608,SubRip,TTML,TX3g和WebVtt字幕。當然不是完全的所有標準,而是它們中有用的一部分。