我有一个简单的活动,其中包含 VideoView 的一个实例以及对其'的引用。的的MediaPlayer 即可。我的目标是使用 MediaPlayer 对象中的 setNextMediaPlayer ()api,以最大限度地缩短2个视频之间的切换时间。
在下面的代码中,第一个视频效果很好。当第一个视频完成后,第二个视频的音频开始在后台播放,但只有第一个的最后一帧视频显示。
你知道问题是什么吗?为什么第二次视频的视频无法显示?
private VideoView player1;
private MediaPlayer mediaPlayer1;
public static final String URL_1 = "https://example.com/video1.mp4";
public static final String URL_2 = "https://example.com/video2.mp4";
public static final String TAG = "PrebufferingActivity";
public boolean FIRST_TIME = true;
public int count = 0;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prebuffering);
player1 = (VideoView) findViewById(R.id.videoPlayer1);
player1.setOnPreparedListener(new OnPreparedListener(){
@Override
public void onPrepared(MediaPlayer mp) {
mediaPlayer1 = mp;
if(FIRST_TIME == true)
{
mediaPlayer1.start();
player1.requestFocus();
FIRST_TIME = false;
}
}
});
player1.setOnInfoListener(new OnInfoListener(){
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra)
{
if(what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)
{
count++;
if(count % 2 != 0)
{
Log.d(TAG, "Odd count (" + count + ") Prebuffering URL_2");
MediaPlayer myMediaPlayer = MediaPlayer.create(PrebufferingActivity.this, Uri.parse(URL_2));
mp.setNextMediaPlayer(myMediaPlayer);
}
else
{
Log.d(TAG, "Even count (" + count + ") Prebuffering URL_1");
MediaPlayer myMediaPlayer = MediaPlayer.create(PrebufferingActivity.this, Uri.parse(URL_1));
mp.setNextMediaPlayer(myMediaPlayer);
}
}
return false;
}
});
player1.setOnCompletionListener(new OnCompletionListener(){
@Override
public void onCompletion(MediaPlayer mp) {
}
});
// Player 1
player1.setMediaController(new MediaController(this));
player1.setVideoURI(Uri.parse(URL_1));
}
答案 0 :(得分:0)
在您的示例中,您创建了新的MediaPlayer
,但VideoView
一无所知,无法控制它。它不会正常工作。
如果您需要某些特定功能,可能需要构建VideoView
的模拟,使用MediaPlayer
。
关于使用setNextMediaPlayer()
播放第二个视频,您可以在此处找到一些提示:
https://stackoverflow.com/a/28465846/755313