我正在使用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. 如何在Windows 10 UWP應用程序中顯示HLS流的嵌入式隱藏式字幕?
- 3. Android上的HLS流式傳輸
- 4. Chromecast EIA-608帶HLS的隱藏式字幕
- 5. PeerJS + Angular4 - 如何打開/關閉相機和麥克風,而流式傳輸
- 6. Exoplayer自適應hls流
- 7. 隱藏式字幕的JSON
- 8. 如何在xcode上播放hls流式傳輸
- 9. CloudFront HLS流式傳輸不起作用--S3(HLS v4)
- 10. WPF/C#:正確實施關閉/隱藏形式,而新的形式打開
- 11. 隱藏DIV中的TinyMCE在打開兩次後關閉
- 12. Ios - 當開關打開/關閉時如何顯示/隱藏字段
- 13. 如何從服務器端流式傳輸mp3文件隱藏?
- 14. 在Android中打開和關閉屏幕
- 15. 如何使HLS實時流式傳輸具有低延遲?
- 16. 無法在瀏覽器中打開在線流式傳輸PDF
- 17. Android中的字幕/隱藏式字幕支持
- 18. 如何使用exoplayer傳輸rtsp url?
- 19. HTML5視頻隱藏字幕關閉或開啓方法
- 20. 在Node.JS中流式傳輸
- 21. 如何在Android中播放RTMP實時流式傳輸url
- 22. 用隱身字模式在隱身模式中打開Chrome
- 23. 如何關閉對流式廣播流url的請求?
- 24. 如何以編程方式在Android中打開/關閉通知?
- 25. Twitter沒有關鍵字流式傳輸
- 26. 如何從YouTube視頻中提取隱藏式字幕副本?
- 27. Bootstrap模式popover隱藏關閉
- 28. 摘自dvb-t的隱藏式字幕
- 29. 如何在CentOS 7下關閉屏幕消隱/睡眠模式?
- 30. 如何打開/關閉localhost(xampp)中的MySQL嚴格模式?
嗨拉姆,你是否能夠成功顯示字幕?如果是這樣,你可以分享你的代碼來添加字幕與Exoplayer的版本2?謝謝 – Jaz
在Exoplayer中,我可以通過在github項目中使用SimpleExoplayer View類來自定義隱藏字幕。你可以隱藏/顯示,改變標題的文字字體,顏色,展示位置...... –
@RamJay你能夠顯示/隱藏字幕嗎?我也設法在Exoplayer中顯示字幕,但現在想打開/關閉它們。你怎麼做到這一點? – William