我尝试了 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 的平板电脑上它不起作用......