如何在媒体播放器中更改字幕

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上视频的未来。它也支持字幕。 - Hugo Gresse
既然您可能不想像@Mibit的答案建议的那样重新启动整个对象,那么您是否尝试过将时间文本源合并,并将它们作为不同的轨道而不是单独的资源? - craigts
1个回答

1
请查看状态图。在使用新的资源重新初始化媒体播放器之前,请尝试reset()release()您的mediaPlayer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接