Exoplayer, синхронно воспроизводить аудиопоток и видеопоток?

Я использую следующий код для воспроизведения потока (в котором есть как видео, так и аудио). Но что, если мне нужны синхронный видеопоток и отдельный аудиопоток для видеопотока? Например, предположим, что есть

Оба video.mp4 и audio.mp3 принадлежат video1 и имеют одинаковую длину 1:23:34. Могу ли я воспроизводить video.mp4 и audio.mp3 синхронно, как если бы они были одним потоком, с одним ExoPlayer? Пользователь должен иметь возможность приостанавливать / воспроизводить / искать, и одно и то же действие должно применяться к обоим потокам.

Если нет, и мне нужно использовать два ExoPlayer, один для видео и один для звука, как я могу синхронизировать звук и видео?

    var uri = Uri.parse(url);
    var df = DefaultHttpDataSourceFactory(url);
    var ms = ExtractorMediaSource(uri, df, DefaultExtractorsFactory(), null, null);
    exoPlayer.playWhenReady=true;
    exoPlayer.prepare(ms);

person Damn Vegetables    schedule 16.10.2019    source источник


Ответы (1)


Ты сможешь! Это делается в ExoPlayer путем создания MergingMediaSource. В примере по ссылке источник видео объединяется с источником субтитров, но для аудио и видео это еще проще:

MediaSource videoSource = new ProgressiveMediaSource.Factory(...)
    .createMediaSource(videoUri);
MediaSource audioSource = new ProgressiveMediaSource.Factory(...)
    .createMediaSource(audioUri);

MergingMediaSource mergedSource = new MergingMediaSource(videoSource, audioSource);
person Sandi    schedule 16.10.2019
comment
Если я использую этот метод для одновременного воспроизведения video.mp4 и audio.mp3, могу ли я на лету заменить audio.mp3 на audio2.mp3? - person Damn Vegetables; 17.10.2019