Ошибка воспроизведения при использовании двух VideoViews - PullRequest
0 голосов
/ 25 октября 2011

При запуске воспроизведения двух потоков HTTP одновременно в двух VideoView с, это работает. Когда я пытаюсь остановить одно и запустить другое, выдается ошибка. Используемый код:

 mVideoView1.setVideoPath(videoPath);
 mVideoView2.setVideoPath(videoPath);
 mVideoView1.start();       
 Button btn = (Button) findViewById(R.id.button);
     btn.setOnClickListener(new OnClickListener() {
        @Override
               public void onClick(View v) {
        mVideoView1.stopPlayback();
        mVideoView2.start();
        }
    });

Есть идеи, что вызывает эту ошибку? Я получаю такое же поведение, когда использую MediaPlayer и SurfaceView (подготовка второго MediaPlayer в фоновом режиме, release() первого, затем start() второго)

1 Ответ

0 голосов
/ 17 декабря 2015

вы можете использовать следующий код, он работает для меня,

package com.materialexample;

import android.content.Context;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.VideoView;

import in.co.bhadreshtech.materialexample.R;

public class VideoViews extends AppCompatActivity {
    ProgressBar progressBar = null;
    VideoView videoView1 = null;
    VideoView video_views2 = null;
    String videoUrl = "http://www.androidbegin.com/tutorial/AndroidCommercial.3gp";

    Context context = null;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_views);
        context = null;
        videoView1 = (VideoView) findViewById(R.id.video_view1);
        video_views2 = (VideoView) findViewById(R.id.video_views2);
        progressBar = (ProgressBar) findViewById(R.id.progressbar);
        Uri videoUri = Uri.parse(videoUrl);
        videoView1.setVideoURI(videoUri);
        video_views2.setVideoURI(videoUri);
        videoView1.start();
        video_views2.start();
        progressBar.setVisibility(View.VISIBLE);
        videoView1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                // TODO Auto-generated method stub
                mp.start();
                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int arg1,
                                                   int arg2) {
                        // TODO Auto-generated method stub
                        progressBar.setVisibility(View.GONE);
                        mp.start();
                    }
                });

            }
        });
        video_views2.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                // TODO Auto-generated method stub
                mp.start();
                mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
                    @Override
                    public void onVideoSizeChanged(MediaPlayer mp, int arg1,
                                                   int arg2) {
                        // TODO Auto-generated method stub
                        progressBar.setVisibility(View.GONE);
                        mp.start();
                    }
                });

            }
        });

    }
}

также не пропустите добавить буксировку VideoView и один ProgressBar в макете

...