How to play multiple video in different video view

2019-02-22 11:06发布

问题:

Sample Code:

How to play the two video in one activity

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();
   }
}

cannot play two video same time.

回答1:

Play multiple videos is depends on hardware but if your device supports only one instance of media Player then you must call yourVideoView.stopPlayBack() for playing video in another videoview. you can resume video in first videoview by using its resume() method but after stop playing from second.



回答2:

Your device should support playing multiple videos also quality of videos (HD videos) which needs high end devices else it will throw error.

I tried this code it works with all nexus devices.



回答3:

According to this answer, it is very much possible to play multiple videos simultaneously, but it depends on the device and its hardware. The Android version doesn't seem to matter. I'd suggest you read his comments and code for a better understanding.



回答4:

See below code , here play 4 video's in different video view in one activity

main_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1.0"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="ycrathi.com.multiplevideoplay.MainActivity">

    <VideoView
        android:id="@+id/v1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.25" />

    <VideoView
        android:id="@+id/v2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.25" />

    <VideoView
        android:id="@+id/v3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.25" />

    <VideoView
        android:id="@+id/v4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0.25" />


</LinearLayout>

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ycrathi.com.multiplevideoplay">
<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


回答5:

Here is the full answer for showing multiple video in one activity. Working in all device. I have used Surfaceview and Textureview for Playing Videos.

Activity:

 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:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ReactionViewActivity">

   <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black"
        android:layout_below="@+id/rlTopbar">

        <TextureView
            android:id="@+id/textureView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center" />

        <SurfaceView
            android:id="@+id/surface_view"
            android:layout_width="110dp"
            android:layout_height="140dp"
            android:layout_gravity="right"
            android:layout_marginRight="@dimen/margin_20"
            android:layout_marginTop="@dimen/margin_20" />

        <ProgressBar
            android:id="@+id/progress_bar"
            android:layout_width="@dimen/margin_50"
            android:layout_height="@dimen/margin_50"
            android:layout_gravity="center"
            android:indeterminateDrawable="@drawable/custom_progress" />

    </FrameLayout>
</RelativeLayout>