我试图在Android设备上创建一个视频播放器,它可以从本地服务器流式传输视频。我找到了一个this示例。我遵循指南,最后我能够在我的设备上播放本地视频。然后我开始修改这个项目。我将VideoActivity设置为启动器活动,并注释掉从先前活动收到的所有数据。我修改了
的媒体初始化Media m = new Media(libvlc, media);
mMediaPlayer.setMedia(m);
到
Uri uri = Uri.parse("http://samples.mplayerhq.hu/MPEG-4/embedded_subs/1Video_2Audio_2SUBs_timed_text_streams_.mp4");
Media m = new Media(libvlc, uri);
mMediaPlayer.setMedia(m);
添加了2个新方法(如您所见,这些方法只是简单的方法来查看结果)
private void setSubtitles(){
MediaPlayer.TrackDescription[] tds = mMediaPlayer.getSpuTracks();
mMediaPlayer.setSpuTrack(tds[tds.length - 1].id);
}
private void seekTo(long time) {
mMediaPlayer.setTime(time);
}
并在游戏活动中召唤他们
@Override
public void onEvent(MediaPlayer.Event event) {
VideoActivity player = mOwner.get();
switch(event.type) {
case MediaPlayer.Event.EndReached:
Log.d(TAG, "MediaPlayerEndReached");
player.releasePlayer();
break;
case MediaPlayer.Event.Playing:
---> player.seekTo(1000);
---> player.setSubtitles();
case MediaPlayer.Event.Paused:
case MediaPlayer.Event.Stopped:
default:
break;
}
}
但是当我尝试播放视频时,我得到12401-12591/? A/libc﹕ @@@ ABORTING: INVALID HEAP ADDRESS IN dlfree
。在显示字幕后几秒钟我收到此错误(字幕也太小)。仅当我尝试显示字幕时才会显示此错误。没有字幕视频播放没有任何错误。
我尝试在VLC应用程序上播放此视频,并且能够显示字幕。我试图创建新项目 - 得到了同样的错误。我分析了VLC的android源代码,看起来他们使用几乎相同的逻辑加载字幕(只为视频和字幕设置不同的surfaceViews,但它给了我同样的错误)。那我错过了什么?是什么导致玩家制动以及如何解决?也许已经有用于显示字幕的代码示例。