Подтвердить что ты не робот

Android ExoPlayer: решает проблему без разрыва/беспрепятственного воспроизведения, которая нарушена для Android Media Player

Кто-нибудь пытался использовать ExoPlayer для достижения этого? Я пробовал искать онлайн без успеха.

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

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

Android: MediaPlayer безразличный или бесшовный просмотр видео

4b9b3361

Ответ 1

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

Переходы между источниками являются бесшовными. Нет требования, чтобы источники были объединены в один формат (например, его тонкий способ объединить видеофайл, содержащий 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);

Ответ 2

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

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

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

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

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

Ответ 3

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

Ответ 4

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