我正在使用Exoplayer Version 2.0.4玩HLS Streams(.m3u8)。我的HLS流包含隱藏式字幕。我如何使用exoplayer控制隱藏式字幕?是否可以在需要時隱藏/顯示字幕,並在需要時更改字幕布局的位置?如何在Exoplayer中的HLS流式傳輸URL中打開/關閉隱藏式字幕?
回答
我能夠使用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);
}
}
你在哪裏以及如何將字幕Uri /鏈接傳遞給此代碼? –
@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) –
謝謝@泰勒,但我使用DASH,我需要將標題鏈接到視頻。我目前在分享的鏈接中使用了相同的解決方案,但是,除非我們發佈並重新啓動播放器,否則此方法不允許我們啓用和禁用字幕。 –
- 1. 如何顯示來自m3u8 URL的HLS視頻流的隱藏字幕格式
- 2. 如何從流式傳輸在線視頻中提取隱藏式字幕
- 3. 在Android上呈現HLS流的隱藏式字幕
- 4. ExoPlayer和HLS流
- 5. 如何在Windows 10 UWP應用程序中顯示HLS流的嵌入式隱藏式字幕?
- 6. 如何在實時RTMP流中提供隱藏式字幕?
- 7. 如何從隱藏在URL iOS中的視頻流式傳輸視頻?
- 8. 如何打開最近關閉或隱藏形式
- 9. 使用EXOplayer在多屏幕上進行MPEG Dash流式傳輸
- 10. 如何關閉/隱藏以前在jQuery中打開的ul li?
- 11. Android上的HLS流式傳輸
- 12. Galaxy S3上的HLS流式傳輸
- 13. Android ExoPlayer通過HTTP流式傳輸
- 14. 打開隱藏字幕按鈕關閉iOS上
- 15. Chromecast EIA-608帶HLS的隱藏式字幕
- 16. PeerJS + Angular4 - 如何打開/關閉相機和麥克風,而流式傳輸
- 17. Exoplayer自適應hls流
- 18. 隱藏式字幕的JSON
- 19. 如何在xcode上播放hls流式傳輸
- 20. 在android中以編程方式打開和關閉屏幕
- 21. CloudFront HLS流式傳輸不起作用--S3(HLS v4)
- 22. WPF/C#:正確實施關閉/隱藏形式,而新的形式打開
- 23. 隱藏DIV中的TinyMCE在打開兩次後關閉
- 24. Ios - 當開關打開/關閉時如何顯示/隱藏字段
- 25. 如何從服務器端流式傳輸mp3文件隱藏?
- 26. 我如何隱藏c#窗體中的關閉按鈕形式
- 27. 在Android中打開和關閉屏幕
- 28. 如何使HLS實時流式傳輸具有低延遲?
- 29. 無法在瀏覽器中打開在線流式傳輸PDF
- 30. Android:如何以編程方式打開和關閉屏幕?
嗨拉姆,你是否能夠成功顯示字幕?如果是這樣,你可以分享你的代碼來添加字幕與Exoplayer的版本2?謝謝 – Jaz
在Exoplayer中,我可以通過在github項目中使用SimpleExoplayer View類來自定義隱藏字幕。你可以隱藏/顯示,改變標題的文字字體,顏色,展示位置...... –
@RamJay你能夠顯示/隱藏字幕嗎?我也設法在Exoplayer中顯示字幕,但現在想打開/關閉它們。你怎麼做到這一點? – William