如何在一个活动中在不同的video视图中播放多个video

示例代码:

如何在一个活动中播放这两个video

public class Two_videos extends Activity { VideoView video1, video2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.two_video); VideoView video1= (VideoView) findViewById(R.id.video1); video1.setVideoPath("/mnt/sdcard/Movies/com.bnb.giggle/IMG_20130415184609.mp4"); video1.start(); VideoView video2= (VideoView) findViewById(R.id.video2); video2.setVideoPath("/mnt/sdcard/Movies/com.bnb.giggle/IMG_20130415184608.mp4"); video2.start(); } } 

不能同时播放两个video。

播放多个video取决于硬件,但如果您的设备仅支持一个媒体播放器实例,则必须调用您的VideoView.stopPlayBack()以在另一个videovideo中播放video。 你可以使用resume()方法在第一videovideo中恢复video,但是从第二video停止播放。

您的设备应支持播放多个video以及需要高端设备的video(高清video)质量,否则会引发错误。

我尝试了这个代码,它适用于所有nexus设备。

根据这个答案 ,很有可能同时播放多个video,但这取决于设备及其硬件。 Android版似乎并不重要。 我建议你阅读他的评论和代码,以便更好地理解。

请参阅下面的代码,这里在一个活动的不同video视图中播放4个video

main_activity.xml

       

MainActivity.java

  package ycrathi.com.multiplevideoplay; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.VideoView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); VideoView v1 = (VideoView) findViewById(R.id.v1); VideoView v2 = (VideoView) findViewById(R.id.v2); VideoView v3 = (VideoView) findViewById(R.id.v3); VideoView v4 = (VideoView) findViewById(R.id.v4); v1.setVideoURI(Uri.parse("http://192.168.1.1/Video/vid5.mp4")); v1.start(); v1.requestFocus(); v1.setKeepScreenOn(true); v2.setVideoURI(Uri.parse("http://192.168.1.1/Video/vid5.mp4")); v2.start(); v2.requestFocus(); v2.setKeepScreenOn(true); v3.setVideoURI(Uri.parse("http://192.168.1.1/Video/vid5.mp4")); v3.start(); v3.requestFocus(); v3.setKeepScreenOn(true); v4.setVideoURI(Uri.parse("http://192.168.1.1/Video/vid5.mp4")); v4.start(); v4.requestFocus(); v4.setKeepScreenOn(true); } } 

AndroidMenifest.xml

              

以下是在一个活动中显示多个video的完整答案。 在所有设备中工作。 我使用Surfaceview和Textureview播放video。

活动:

  public class ReactionViewActivity extends AppCompatActivity { private static final String TAG = ReactionViewActivity.class.getSimpleName(); private String mainVideo = ""; private ProgressBar progress_bar; private SurfaceView mSurfaceView; private TextureView mTextureView; private MediaPlayer mMediaPlayer, mMediaPlayer1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_reaction_view); initView(); } private void initView() { progress_bar = findViewById(R.id.progress_bar); mSurfaceView = findViewById(R.id.surface_view); mTextureView = findViewById(R.id.textureView); textureParams = (FrameLayout.LayoutParams) mTextureView.getLayoutParams(); surfaceParams = (FrameLayout.LayoutParams) mSurfaceView.getLayoutParams(); final String video = getIntent().getStringExtra("video"); mTextureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int i, int i1) { Surface surface = new Surface(surfaceTexture); try { mMediaPlayer1 = new MediaPlayer(); mMediaPlayer1.setDataSource(video); mMediaPlayer1.setSurface(surface); mMediaPlayer1.setLooping(true); mMediaPlayer1.prepareAsync(); // Play video when the media source is ready for playback. mMediaPlayer1.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { progress_bar.setVisibility(View.GONE); mediaPlayer.start(); } }); mMediaPlayer1.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch (IllegalArgumentException e) { Log.d(TAG, e.getMessage()); } catch (SecurityException e) { Log.d(TAG, e.getMessage()); } catch (IllegalStateException e) { Log.d(TAG, e.getMessage()); } catch (IOException e) { Log.d(TAG, e.getMessage()); } } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i1) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) { } }); if (Objects.requireNonNull(getIntent().getExtras()).containsKey("mainVideo")) { mainVideo = getIntent().getStringExtra("mainVideo"); mSurfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDisplay(surfaceHolder); try { mMediaPlayer.setDataSource(mainVideo); mMediaPlayer.setLooping(true); mMediaPlayer.prepare(); mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mMediaPlayer.start(); } }); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { } }); } } @Override public void onBackPressed() { releaseMediaPlayer(); finish(); } @Override protected void onDestroy() { super.onDestroy(); releaseMediaPlayer(); } private void releaseMediaPlayer() { if (mMediaPlayer != null) { mMediaPlayer.release(); mMediaPlayer = null; } if (mMediaPlayer1 != null) { mMediaPlayer1.release(); mMediaPlayer1 = null; } } } 

XML: