Java MediaPlayer getTrackInfo()从不包含TimedText
我尝试了iTech的这个示例项目(可以找到) 它是关于用Android MediaPlayer类显示字幕的 当我试着运行这个项目时,媒体播放器可以正常工作,但字幕不行。调试之后,我发现getTrackInfo()只返回一个长度为2的数组(这只是视频和音频曲目),而timedText曲目不包含在数组中。有人知道为什么吗 为了方便起见,我在下面发布了代码片段:Java MediaPlayer getTrackInfo()从不包含TimedText,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,我尝试了iTech的这个示例项目(可以找到) 它是关于用Android MediaPlayer类显示字幕的 当我试着运行这个项目时,媒体播放器可以正常工作,但字幕不行。调试之后,我发现getTrackInfo()只返回一个长度为2的数组(这只是视频和音频曲目),而timedText曲目不包含在数组中。有人知道为什么吗 为了方便起见,我在下面发布了代码片段: @Override protected void onCreate(Bundle savedInstanceState) {
@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;
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtDisplay=(TextView)findViewById(R.id.txtDisplay);
MediaPlayer=MediaPlayer.create(这个,R.raw.video);
试一试{
player.addTimedTextSource(getSubtitleFile(R.raw.sub),
MediaPlayer.MEDIA\u MIMETYPE\u TEXT\u SUBRIP);
int textTrackIndex=findTrackIndexFor(
TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT,player.getTrackInfo());
Log.d(标签,“textTrackIndex=“+textTrackIndex”);
如果(textTrackIndex>=0){
player.选择Track(textTrackIndex);
}否则{
Log.w(标记“找不到文本跟踪!”);
}
player.setOnTimedTextListener(此);
player.start();
}捕获(例外e){
e、 printStackTrace();
}
}
私有int-findTrackIndexFor(int-mediaTrackType,TrackInfo[]TrackInfo){
int指数=-1;
Log.w(标签,“trackinfo-length=“+trackinfo.length”);
对于(int i=0;i
请注意,如果您尝试示例项目,视频将不会显示,但只有声音。这不是一个bug,因为我认为iTech故意不显示视频:)
编辑:
我在Nexus10上试用了安卓4.2.2,效果不错。但我还是不明白为什么在我的另一款搭载安卓4.1.2的平板电脑上它不能工作