2017-02-24 9 views
4

私はExoplayerバージョン2.0.4を再生しますHLSストリーム(.m3u8)を使用しています。私のHLSストリームにはクローズドキャプションが含まれています。 exoplayerでクローズドキャプションを制御するにはどうすればよいですか?必要に応じて字幕を表示/非表示し、必要に応じて字幕レイアウトの配置を変更することは可能ですか?ExoplayerのHLSストリーミングURLでクローズドキャプションをオン/オフにする方法は?

+0

こんにちはRAM、字幕を正しく表示できましたか?もしそうなら、バージョン2のExoplayerで字幕を追加するコードを共有できますか?ありがとうございます – Jaz

+0

Exoplayerでは、私はgithubプロジェクトでSimpleExplayer Viewクラスを使ってクローズドキャプションをカスタマイズすることができました。あなたは、表示/非表示、タイトルテキストのフォント、色、配置を変更することができます... –

+1

@RamJayあなたは字幕を表示/非表示にできましたか?私はExoplayerで字幕を表示することもできましたが、現在はそれらをON/OFFしたいと思っています。これどうやってやるの? – William

答えて

4

DefaultTrackSelectorを使用して、ExoPlayer 2でキャプションの選択を制御することができました。以下のコードは、ExoPlayer 2 DemoのTrackSelectionHelperクラスに基づいて変更されました。これは実装の詳細を参照する必要があります。

キャプションをオフにするには、テキストトラックのレンダラーを無効にして、選択オーバーライドをクリアする必要があります。

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

TRACK_TEXT Iは、ビデオ/オーディオトラックに関連するテキストトラック(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)、TrackSelectionHelperファイルから始まる、ExoPlayer 2 Demoをチェックしてください。注: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 テキストとビデオのトラックがすべて1つのマニフェスト/ URLに含まれています。実装の詳細は[デモ](https://github.com/google/ExoPlayer/tree/release-v2/demos/main/src/main/java/com/google/android/exoplayer2/demo)に基づいています –

+1

ありがとう@テイラーが、私はDASHを使用していると私はキャプションをビデオにリンクする必要があります。現在共有しているリンクで同じソリューションを使用していますが、この方法では、プレーヤーを解放して再起動しない限り、キャプションを有効または無効にすることはできません。 –

関連する問題