2017-02-24 206 views
4

我正在使用Exoplayer Version 2.0.4HLS Streams(.m3u8)。我的HLS流包含隱藏式字幕。我如何使用exoplayer控制隱藏式字幕?是否可以在需要時隱藏/顯示字幕,並在需要時更改字幕布局的位置?如何在Exoplayer中的HLS流式傳輸URL中打開/關閉隱藏式字幕?

+0

嗨拉姆,你是否能夠成功顯示字幕?如果是這樣,你可以分享你的代碼來添加字幕與Exoplayer的版本2?謝謝 – Jaz

+0

在Exoplayer中,我可以通過在github項目中使用SimpleExoplayer View類來自定義隱藏字幕。你可以隱藏/顯示,改變標題的文字字體,顏色,展示位置...... –

+1

@RamJay你能夠顯示/隱藏字幕嗎?我也設法在Exoplayer中顯示字幕,但現在想打開/關閉它們。你怎麼做到這一點? – William

回答

4

我能夠使用DefaultTrackSelector控制ExoPlayer 2中的標題選擇。下面的代碼是基於ExoPlayer 2 Demo的TrackSelectionHelper類進行修改的,應該參考更多實現細節。

要關閉字幕,您需要禁用文本軌道的渲染器並清除選擇覆蓋。

trackSelector.setRendererDisabled(TRACK_TEXT, true); 
trackSelector.clearSelectionOverrides(); 

TRACK_TEXT是我創建表示文本軌道(2)的索引,關於視頻/音頻軌道的局部靜態變量。我相信SelectionOverrides只是以編程方式指定的曲目選擇。

要再次啓用軌道,您需要爲文本軌道啓用渲染器,然後爲所需的文本軌道設置新的SelectionOverride。在執行此操作之前,您需要從DefaultTrackSelector中獲取當前映射文本軌跡的TrackGroupArray

MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo(); 
TrackGroupArray textGroups = mappedTrackInfo.getTrackGroups(TRACK_TEXT); // list of captions 
int groupIndex = 1; // index of desired caption track within the textGroups array 

trackSelector.setRendererDisabled(TRACK_TEXT, false); 
MappingTrackSelector.SelectionOverride override = 
    new MappingTrackSelector.SelectionOverride(fixedFactory, groupIndex, 0); 
trackSelector.setSelectionOverride(TRACK_TEXT, textGroups, override); 

有關詳細實現細節(例如,初始化trackSelector和fixedFactory),檢查出ExoPlayer 2 Demo,先從TrackSelectionHelper文件。注意:TrackSelectionHelper文件是爲選擇視頻/音頻/文本軌道而編寫的,因此請記住,在那裏會有很多代碼,您不需要嚴格選擇字幕。您可以使用SubtitleView將標題置於您的佈局中。您的班級將需要實施TextRenderer.Output並覆蓋onCues()方法。

@Override 
public void onCues(List<Cue> cues) { 
    if (subtitleView != null) { 
     subtitleView.onCues(cues); 
    } 
} 
+0

你在哪裏以及如何將字幕Uri /鏈接傳遞給此代碼? –

+0

@SamRamezanli請參閱這裏瞭解如何創建媒體源並準備播放器:https://google.github.io/ExoPlayer/guide.html#preparing-the-player 我們使用HLS,因此文本和視頻軌道全部包含在一個清單/網址中。更多實現細節基於[demo](https://github.com/google/ExoPlayer/tree/release-v2/demos/main/src/main/java/com/google/android/exoplayer2/demo) –

+1

謝謝@泰勒,但我使用DASH,我需要將標題鏈接到視頻。我目前在分享的鏈接中使用了相同的解決方案,但是,除非我們發佈並重新啓動播放器,否則此方法不允許我們啓用和禁用字幕。 –

相關問題