2014-12-11 30 views
16

我可以分配一次字幕,但之後如果我嘗試更改字幕。它不會接受新的,每次都顯示前一個。如何更改媒體播放器中的字幕

下面的代碼我用來改變字幕。

MediaPlayer mediaPlayer; 

    public void changeSubtitle() 
    { 
    //disable subtitle if it has 
    if(textTrackIndex!=0){  
    mediaPlayer.deselectTrack(textTrackIndex); 
    textTrackIndex=0; 
    mediaPlayer.setOnTimedTextListener(null); 
    } 

    //try to asssign new subtitle 

       mediaPlayer 
         .addTimedTextSource(
           (Environment.getExternalStorageDirectory() 
             .getPath() 
             + "/"+"filename", 
           MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP); 
    int textTrackIndex = findTrackIndexFor(TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT,mediaPlayer.getTrackInfo()); 

      if (textTrackIndex >= 0) { 
       mediaPlayer.selectTrack(textTrackIndex); 
      } else { 
       Log.w(TAG, "Cannot find text track!"); 
      } 
      mediaPlayer.setOnTimedTextListener(this); 
    } 

    private int findTrackIndexFor(int mediaTrackType, TrackInfo[] trackInfo) 
    { 
      int index = -1; 
      for (int i = 0; i < trackInfo.length; i++) { 
       if (trackInfo[i].getTrackType() == mediaTrackType) { 
        return i; 
       } 
      } 
      return index; 
     } 
+2

我個人推薦不再使用MediaPlayer來使用ExoPlayer https://github.com/google/ExoPlayer#由Google開發,這是Android上視頻的未來。它也支持字幕。 – 2015-11-25 12:41:34

+0

由於你可能不想按照@Mibit的回答建議的那樣重新啓動整個對象,你是否嘗試過將時間文本源合併在一起,並將它們作爲不同的軌道而不是單獨的資源? – craigts 2015-12-02 05:09:25

回答

1

看看state diagram。在使用新關聯的資源重新初始化之前,請嘗試使用reset()release()您的mediaPlayer