Android VideoView无法播放连续视频

5
我想播放两个视频。第一个视频总是可以正常播放。在它结束后,你可以在日志中看到它设置了新的视频URL,但是SurfaceView会抛出一个错误,并且VideoView只会冻结在第一个视频的最后一帧,什么也不会发生。有什么想法吗?谢谢!
更新:令人惊讶的是,OnPreparedListener会为第二个视频调用。
更新2:有时第二个视频可以正常播放,有时不能...而我在代码中没有改变任何内容。这完全是随机的...
更新3:解决方案是在设置新的视频URL之前添加以下行:
mVideoView.setVisibility(View.GONE);

OnCompletionListener代码:

setCurrentPlaybackUrl(); // sets mCurrentMediaUrl to the second video URL
mVideoView.setVideoPath(mCurrentMediaUrl);
mVideoView.start();

第一个视频播放完成后,以下是日志输出:

10-22 12:32:35.762: I/AwesomePlayer(126): setDataSource_l('https://xx/TestingVideo_lo.mp4')
10-22 12:32:35.762: E/BufferQueue(123): [SurfaceView] connect: already connected (cur=3, req=3)
10-22 12:32:35.762: E/MediaPlayerService(126): setVideoSurfaceTexture failed: -22
10-22 12:32:35.762: E/BufferQueue(123): [SurfaceView] connect: already connected (cur=3, req=3)
10-22 12:32:35.762: E/MediaPlayerService(126): setVideoSurfaceTexture failed: -22
1个回答

4
尝试使用onCompletion(MediaPlayer mp),添加mp.stop(),然后执行您的操作。
编辑:我已尝试过这个方法,它有效。
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
       play_video();
}
});

play_video();

其中 play_video 是以下方法:

void play_video() {
    Uri uri = Uri.parse(video_link);
    videoView.setVideoURI(uri);    
    videoView.requestFocus();
    videoView.setVisibility(View.VISIBLE);
    videoView.start();

 }

唯一的区别是我播放了同一个视频两次,而不是两个不同的视频。

1
有时第二个视频可以正常播放,有时却不能...而且在它能够正常工作和不能工作之间,我并没有改变任何代码。这完全是随机的... - Bogdan Zurac
0/3次尝试使用2个不同的URL都未成功。 1/3次尝试使用相同的URL成功了。 我快要疯了... - Bogdan Zurac
等等,我想我找到了问题所在。videoView.setVisibility(View.GONE); 是罪魁祸首。 - Bogdan Zurac
它能工作。至少目前是这样的 :) 非常感谢!如果在不久的将来出现任何问题,我会回来的。祝你有美好的一天! - Bogdan Zurac

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