27

Пробовал ли кто-нибудь использовать ExoPlayer для этого? Я пробовал искать онлайн без успеха.Android ExoPlayer: Решает ли это проблему без разрыва/беспрепятственного воспроизведения, которая нарушена для Android Media Player

Когда я говорю безразмерное воспроизведение, я имею в виду проблему использования медиаплеера для воспроизведения локальных видеороликов. После первого воспроизведения видео происходит заметная задержка в 1 секунду до начала второго видео.

Надеясь, что этот вопрос поможет в дальнейшем понимании этой проблемы. Для справки, пожалуйста, посмотрите на следующий вопрос:

Android: MediaPlayer gapless or seamless Video Playing

ответ

1

ExoPlayer 2, который официально официально выпущен, как представляется, поддерживает бесщелевое воспроизведение с использованием класса ConcatenatingMediaSource. От its developer guide:

Переходы между источниками являются бесшовными. Нет требования, чтобы источники, которые были объединены, были одного формата (например, вполне нормально конкатенация видеофайла, содержащего 480p H264, с файлом, содержащим 720p VP9). Источники могут быть даже разных типов (например, для конкатенации видео с потоком только аудио).

И пример кода:

MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...); 
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...); 
// Plays the first video, then the second video. 
ConcatenatingMediaSource concatenatedSource = 
    new ConcatenatingMediaSource(firstSource, secondSource); 
+0

Это потрясающе. Попробуем это в ближайшее время. – LostPuppy

+0

Это не удивительно, как насчет обычных сценариев, например, я пишу потоковый музыкальный плеер (например), и когда я начинаю первую песню, я не знаю, какие песни будут дальше (пользователь добавляет в очередь во время воспроизведения) –

0

Я знаю, что это не ответ вы искали, но это единственный разумный ответ. Единственный способ гарантировать отсутствие пробелов в воспроизведении - сначала загрузить весь файл и начать воспроизведение, когда это будет сделано. В противном случае, если вы потеряете связь до того, как файл завершит загрузку, приостановка неизбежна.

+0

Я думаю, что мой вопрос очень vauge и вводит в заблуждение. Я обновил его. мои извинения. – LostPuppy

0

Я просто попытался переключиться на ExoPlayer из стандартной реализации MediaPlayer, и разрыв будет таким же, если не хуже. Однако я использовал очень простой способ перезапуска игрока, когда статус изменился до конца. Я не знаю, есть ли лучший способ сделать это, возможно, с двумя разными ExoPlayers.

+0

Интересно. Опубликуйте здесь, если вы столкнетесь с лучшими. Спасибо – LostPuppy

+1

Вот кто-то пытается работать над решением для ExoPlayer: https://github.com/google/ExoPlayer/pull/1070 – Flyview

+0

Теперь я могу подтвердить, что вы можете воспроизводить видео без разрыва (по крайней мере одного и того же видео) с помощью новый режим цикла в ExoPlayer2. – Flyview

3

EDIT:ExoPlayer 2 поддерживает бесщелевое воспроизведение, но на момент написания еще не выпущен в качестве стабильной версии.

Вы, скорее всего, никогда не сможете добиться безупречного воспроизведения нескольких треков с помощью ExoPlayer или Android Media Player. Ни один из них не был написан для поддержки запуска нескольких треков, и я полагаю, что они останутся вне сферы действия для обоих из них.

Вы можете добиться бесщелевого воспроизведения, используя 2 разных экземпляра проигрывателя, как только вы запустили и сыграли в первый раз, вы можете загрузить второй и начать воспроизведение после первого окончания. Используя этот метод, вы можете иметь беспроблемное решение, пока вы готовите второе видео во время воспроизведения первого.

Чтобы сделать это дальше, вы также можете использовать 2 разных текстуры поверхности для рендеринга нескольких видеороликов, как только первое видео достигнет конца, вы сможете вытереть текстуру и исчезнуть в новом. Результатом является приятный бесшовный видеоэффект.

Из-за природы одновременного воспроизведения нескольких видеороликов вы, скорее всего, захотите создать свой собственный таймер для увеличения времени и принятия решения о переключении на следующее видео, вместо того, чтобы пытаться использовать обратные вызовы от ExoPlayer или Android Media , Это позволит вам отслеживать время более точно, без необходимости разговаривать с несколькими видеокодеками.