Search code examples
androidmedia-player

MediaPlayer onTimedText(MediaPlayer mp, final TimedText text) getting text null every time in android


Hi I am working on MediaPlayer My code is describe below :

  private void captionOn(String fileName) {
    if (fileName != null) {
        try {
            if (mediaPlayer != null && contentPlaying && mediaPlayer.isPlaying()) {
                Log.d(TAG,"TEST getSubtitleFile(fileName) == "+getSubtitleFile(R.raw.abc));
                mediaPlayer.addTimedTextSource(getSubtitleFile(R.raw.abc), MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
                textTrackIndex = findTrackIndexFor(
                        MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT,
                        mediaPlayer.getTrackInfo());
                Log.i("My Message", "textTrackIndex : " + textTrackIndex);
                if (textTrackIndex >= 0) {
                    mediaPlayer.selectTrack(textTrackIndex);
                    isCaptionOn = true;
                } else {
                    Log.w("My Message", "Cannot find text track!");
                }
                mediaPlayer.setOnTimedTextListener(this);


            } else {
                Log.d("My Message", "media player Null");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Log.d("My Message", "Exception adding timed Text");
        }
    } else {
        Toast.makeText(mContext, "No Caption Available at the moment",
                Toast.LENGTH_SHORT).show();
    }
}


 @Override
public void onTimedText(MediaPlayer mp, final TimedText text) {
    Log.i("My Message", "inside onTimedText Listener");
    Log.i("My Message", "inside onTimedText Listener text = "+text);

    timedTextHandler.post(new Runnable() {
        @Override
        public void run() {
            Log.i("My Message", "inside onTimedText Listener run************** = ");
            if (null != text) {
                Log.i("My Message", "timed Text:" + text.getText());
                if (text.getText() != null) {
                    String mText = text.getText().trim();
                    timedTextTextView.setVisibility(View.VISIBLE);
                    timedTextTextView.setText(mText);
                }
            } else {
                timedTextTextView.setVisibility(View.INVISIBLE);
            }
        }
    });
}

The method getSubtitleFile() print the filepath sucessfully. but inside onTimedText i am getting text null.

i am using a videoview and set onPrepareListener() on that. and inside onPrepared(MediaPlayer mediaPlayer)

 @Override
public void onPrepared(MediaPlayer mediaPlayer) {
    this.mediaPlayer = mediaPlayer;
    this.mediaPlayer.setOnBufferingUpdateListener(this);
    this.mediaPlayer.setWakeMode(mContext, PowerManager.PARTIAL_WAKE_LOCK);
    isPrepared = true;
    Log.d(TAG, "TEST OnPrepared");
    //if(Constants.IS_DEBUGGING_ON) {
        Log.d("", "OnPrepared");
   // }
    mMovieDuration = mediaPlayer.getDuration();

    video.start();

    if(isCaptionDownloaded){
        captionOn(ccFileName);
    }
}

can anyone suggest what i am doing wrong here.


Solution

  • I think the problem is in your .srt file. I solved the same type of problem. Please have a look on my answer.

    [MediaPlayer addTimedTextSource in android click here for answer]