あなたの質問は遅いと知っていますが、答えが他の人に役立つかもしれません... 私はちょうどこれを取り組んでいましたが、VideViewの表示字幕を変更するのと同じ機能が必要でした。
最初に、VideoViewを初期化するときに2つの字幕(source_1
とsource_2
)を追加します。
次に、VideoViewオブジェクトのonPrepared()リスナーの中で、現在再生中のビデオで使用できるトラックを反復処理して、自分の上に宣言されたマップに保存しますクラス:
private MediaPlayer mediaPlayer;
private HashMap<String, IndexedTrackInfo> availableSubtitleTracks = new HashMap();
private IndexedTrackInfo currentSubtitleTrack;
:
あなたvideoViewに添付MediaPlayerのに必要な参照、利用できる字幕トラック用のマップと現在選択されている字幕トラックがあるプライベートクラスのメンバーは、私のフラグメントにVideoViewが含まれているものを宣言しました
オンの準備リスナーのコンテンツ
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(JGA,"onPrepared");
loadingIndicator.setVisibility(View.GONE);
videoView.start();
controllerFragmentListener.notifyPlaying();
isPlaying=true;
if(mediaPlayer == null) {
mediaPlayer = mp;
}
MediaPlayer.TrackInfo[] tracks = mp.getTrackInfo();
Log.d(TAG, "onInfo: MediaPlayer.getTrackInfo()[" + tracks.length + "]");
MediaPlayer.TrackInfo track;
IndexedTrackInfo indexedTrackInfo = null;
for (int i = 0; i < tracks.length; i++) {
track = tracks[i];
Log.d(TAG, "onInfo: track [email protected]" + i + ": " + track.getTrackType() + " = " + track.toString());
if (track.getTrackType() == MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_SUBTITLE) {
indexedTrackInfo = new IndexedTrackInfo(track, i);
if(track.getFormat().containsKey(TRACK_SUBTITLE_IS_DEFAULT_KEY)) {
Log.d(TAG, "onInfo: Subtitle track has '" + TRACK_SUBTITLE_IS_DEFAULT_KEY + "' with value = " + track.getFormat().getInteger(TRACK_SUBTITLE_IS_DEFAULT_KEY));
if(track.getFormat().getInteger(TRACK_SUBTITLE_IS_DEFAULT_KEY) == 1) {
Log.d(TAG, "onInfo: This track set as default");
currentSubtitleTrack = indexedTrackInfo;
}
}
availableSubtitleTracks.put(track.getLanguage(), indexedTrackInfo);
}
}
if(currentSubtitleTrack == null && indexedTrackInfo != null) {
currentSubtitleTrack = indexedTrackInfo;
mediaPlayer.selectTrack(currentSubtitleTrack.getIndex());
Log.d(TAG, "onInfo: There was no default sub track but there are tracks available... picking the last one as default [" + currentSubtitleTrack.getIndex() + "]");
}
controllerFragmentListener.updateSpinnerSubtitleTracks(availableSubtitleTracks);
controllerFragmentListener.updateSpinnerCurrentSelection(currentSubtitleTrack.getTrackInfo().getLanguage());
}
とMediaPlayerの(IndexedTrackInfo.java
)のTrackInfoに対応するインデックスで各トラックをasociateするためのカスタムPOJO:
public class IndexedTrackInfo {
private MediaPlayer.TrackInfo trackInfo;
private int index;
public IndexedTrackInfo(MediaPlayer.TrackInfo trackInfo, int index) {
this.trackInfo = trackInfo;
this.index = index;
}
public MediaPlayer.TrackInfo getTrackInfo() {
return trackInfo;
}
public int getIndex() {
return index;
}
}
終わりに、私は利用可能を表示するSpinner
を抱えていたなかったものをユーザーにサブタイトルを付けて、それに応じて変更してください。"index"
私がいた...私は、これは他の誰かを助けることができると思います
//To show the subtitles:
mediaPlayer.selectTrack(currentSubtitleTrack.getIndex());
//To hide the subtitles:
mediaPlayer.deselectTrack(currentSubtitleTrack.getIndex());
//To change the track (secondSourceSubtitleTrack is the object in the map corresponding to your other subtitle source):
currentSubtitleTrack = secondSourceSubtitleTrack;
mediaPlayer.selectTrack(currentSubtitleTrack.getIndex());
:あなたのニーズによって異なりますが、/ hidding /現在の字幕トラックを変える示すために、何をする必要がのようなものである
これを長い間騒がしている...これについての文書や例はあまりないようです...