4

我尝试了 iTech 的这个示例项目(可以在这里找到)它关于使用 Android MediaPlayer 类显示字幕。

当我尝试运行该项目时,媒体播放器可以正常工作,但字幕不能。调试后我发现 getTrackInfo() 只返回一个长度为 2 的数组(即只有视频和音频轨道),并且 timedText 轨道没有包含在数组中。有谁知道为什么?

为方便起见,我在下面发布代码片段:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txtDisplay = (TextView) findViewById(R.id.txtDisplay);
        MediaPlayer player = MediaPlayer.create(this, R.raw.video);

        try {
            player.addTimedTextSource(getSubtitleFile(R.raw.sub),
                    MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
            int textTrackIndex = findTrackIndexFor(
                    TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT, player.getTrackInfo());
            Log.d(TAG, "textTrackIndex = "+textTrackIndex);
            if (textTrackIndex >= 0) {
                player.selectTrack(textTrackIndex);
            } else {
                Log.w(TAG, "Cannot find text track!");
            }
            player.setOnTimedTextListener(this);
            player.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private int findTrackIndexFor(int mediaTrackType, TrackInfo[] trackInfo) {
        int index = -1;
        Log.w(TAG, "trackinfo length = "+trackInfo.length);
        for (int i = 0; i < trackInfo.length; i++) {
            Log.d(TAG, "track type = "+trackInfo[i].getTrackType()+" and mediaTrackType = "+mediaTrackType);
            if (trackInfo[i].getTrackType() == mediaTrackType) {
                return i;
            }
        }
        return index;
    }

请注意,如果您尝试示例项目,视频将不会显示,但只有声音。这不是错误,因为我认为 iTech 故意不显示视频 :)

编辑:

我在 Nexus 10 和 Android 4.2.2 上试过它工作正常。但是为什么仍然无法弄清楚为什么在我的其他装有 Android 4.1.2 的平板电脑上它不起作用......

4

0 回答 0