2014-12-11 12 views
16

Posso assegnare i sottotitoli una volta, ma dopo ho provato a cambiare i sottotitoli. Non accetterà uno nuovo, visualizzerà il precedente ogni volta.Come modificare i sottotitoli in mediaplayer

Sotto il codice che sto usando per cambiare i sottotitoli.

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

Raccomando personalmente di non utilizzare più MediaPlayer per utilizzare ExoPlayer https://github.com/google/ExoPlayer# Sviluppato da Google, questo è il futuro dei video su Android. Supporta anche i sottotitoli. –

+0

Dato che presumibilmente non vuoi riavviare l'intero oggetto come suggerito nella risposta di @ Mibit, hai provato a combinare le fonti di testo del tempo e le hai semplicemente come tracce diverse, invece di risorse separate? – craigts

risposta

1

Date un'occhiata al state diagram. Prova a reset() e release() il tuo mediaPlayer prima di inizializzarlo di nuovo con le risorse associate.