Basheer
Basheer

Reputation: 404

How to play multiple video in different video view in one activity

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.

Upvotes: 6

Views: 22382

Answers (5)

vishal patel
vishal patel

Reputation: 94

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>

Upvotes: -1

Yogesh Rathi
Yogesh Rathi

Reputation: 6499

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>

Upvotes: 0

Rohit
Rohit

Reputation: 2681

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.

Upvotes: 2

ultimate
ultimate

Reputation: 727

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.

Upvotes: 2

Michell Bak
Michell Bak

Reputation: 13242

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.

Upvotes: 1

Related Questions