Android VideoView(StagefrightPlayer)调用setDataSource()两次
我正在使用VideoView背靠背播放视频,我注意到在我的代码第一次播放视频后,StagefrightPlayer对上一个文件执行setDataSource()。紧接着,它对相应的文件执行setDataSource()操作 例如 第一次播放视频时:Android VideoView(StagefrightPlayer)调用setDataSource()两次,android,Android,我正在使用VideoView背靠背播放视频,我注意到在我的代码第一次播放视频后,StagefrightPlayer对上一个文件执行setDataSource()。紧接着,它对相应的文件执行setDataSource()操作 例如 第一次播放视频时: I/Slideshow( 1206): showing video: video1 I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video1') I/Slideshow(
I/Slideshow( 1206): showing video: video1
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video1')
I/Slideshow( 1206): showing video: video2
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video1')
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video2')
第二次(以及之后的任何一次)播放视频:
I/Slideshow( 1206): showing video: video1
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video1')
I/Slideshow( 1206): showing video: video2
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video1')
I/StagefrightPlayer( 876): setDataSource('/mnt/sdcard/cache/video2')
播放视频的代码:
Log.i(TAG, "showing video: "+strfilename);
final String strConstFilename = strfilename;
mActivity.runOnUiThread(new Runnable()
{
public void run()
{
mVideoView.setVisibility(View.VISIBLE);
File file = new File(Environment.getExternalStorageDirectory(), strConstFilename);
mVideoView.setVideoPath(file.getAbsolutePath());
if (mOnCompletionListener != null)
{
mVideoView.setOnCompletionListener(new OnVideoCompletionListener());
}
mVideoView.requestFocus();
mVideoView.start();
}
});
它似乎没有破坏任何东西,但如果我做错了什么,我希望更正代码。这是由于
VideoView.java
中的代码造成的,内部函数openVideo()
实际上执行MediaPlayer.setDataSource
在调用setVideoPath
时被多次调用,创建曲面后,在resume()中
在本例中,当您第二次播放时,我认为首先是surface创建的回调,因此它使用前面的文件路径。然后执行setVideoPath
,因此这次使用正确的文件
它工作得很好,因为当你调用
start
时,已经设置了正确的视频文件。谢谢你的解释:-)听起来像是谷歌代码中的一个bug