用于MediaPlayer的Android setNextMediaPlayer()API未播放下一个视频

时间:2015-01-20 18:32:44

标签: android android-mediaplayer android-videoview

我有一个简单的活动,其中包含 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));
}

1 个答案:

答案 0 :(得分:0)

在您的示例中,您创建了新的MediaPlayer,但VideoView一无所知,无法控制它。它不会正常工作。

如果您需要某些特定功能,可能需要构建VideoView的模拟,使用MediaPlayer

关于使用setNextMediaPlayer()播放第二个视频,您可以在此处找到一些提示: https://stackoverflow.com/a/28465846/755313