Как воспроизвести одно видео в двух разных видах одновременно - PullRequest
0 голосов
/ 16 января 2019

Случай: мне нужно спроектировать вид, где одно видео должно быть в фоновом режиме, а другое - на переднем плане с прозрачным видом между ними. (Изображение прилагается) просмотр многослойного видео

Моя реализация: я реализовал добавление Android VideoView в фоновом режиме (полноэкранное видео) и Exoplayer на переднем плане (небольшое видео).

XML

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <com.jumman.videoplayer.player.FullScreenVideoView
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:fitsSystemWindows="true"
        android:id="@+id/VideoView" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/black_transparent">

    </LinearLayout>
    <FrameLayout
        android:layout_width="200dp"
        android:layout_height="250dp"
        android:layout_gravity="center"
        android:orientation="vertical"
        android:background="@android:color/transparent">


        <com.google.android.exoplayer2.ui.PlayerView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_gravity="center"
            android:layout_height="match_parent"
            app:use_controller="false"/>
        <ImageButton
            android:id="@+id/VideoPlayButton"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_gravity="center"

            android:scaleType="fitCenter"
            android:src="@drawable/video_play_button"
            android:background="@null"/>

    </FrameLayout>
</FrameLayout>

(просмотр видео)

videoView.setVideoPath("https://storage.googleapis.com/exoplayer-test-media-1/mkv/android-screens-lavf-56.36.100-aac-avc-main-1280x720.mkv");
    videoView.setOnPreparedListener(
            new MediaPlayer.OnPreparedListener()
            {
                @Override
                public void onPrepared(MediaPlayer mp)
                {
                    mp.setVolume(0f, 0f);
                }
            }
    );

(просмотр игрока)

BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
    TrackSelection.Factory videoTrackSelectionFactory =
            new AdaptiveTrackSelection.Factory(bandwidthMeter);
    TrackSelector trackSelector =
            new DefaultTrackSelector(videoTrackSelectionFactory);
    player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);

    playerView.setPlayer(player);

    DataSource.Factory dataSourceFactory =
            new DefaultDataSourceFactory(this, Util.getUserAgent(this, "Player"));
    ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
    MediaSource mediaSource = new ExtractorMediaSource(Uri.parse("https://storage.googleapis.com/exoplayer-test-media-1/mkv/android-screens-lavf-56.36.100-aac-avc-main-1280x720.mkv"),
            dataSourceFactory, extractorsFactory, null, null);

    player.prepare(mediaSource);

Задача

В приведенной выше реализации мне нужно было предоставить потоковый URL как для VideoView, так и для проигрывателя. Но было бы лучше, если бы я мог смотреть с одного URL, но видео будет воспроизводиться в двух разных режимах. Как я могу подойти к этому, поделитесь, пожалуйста, лучшим решением.

...