Разработчик Android-приложения подключает ссылку на видеопоток, а плеер либо показывает чёрный экран, либо падает с ошибкой UnsupportedDrmException — чаще всего причина в том, что для формата HLS или DASH не подключён нужный модуль ExoPlayer2. Оба протокола — это способы адаптивной потоковой передачи видео, и ExoPlayer2 умеет работать с каждым из них, но только при корректной сборке зависимостей и правильно созданном MediaSource.

Ниже разберём, чем отличаются HLS и DASH, как устроена их поддержка в ExoPlayer2, какие зависимости нужны и как диагностировать типичные сбои воспроизведения. Материал ориентирован на разработчиков, которые впервые интегрируют стриминг в приложение или ищут причину конкретной ошибки.

Что такое HLS и DASH простыми словами

HLS (HTTP Live Streaming) — протокол потоковой передачи, разработанный Apple. Видео нарезается на короткие сегменты, а плеер получает плейлист в формате .m3u8, где перечислены эти сегменты и варианты качества. Плеер сам переключается между битрейтами в зависимости от скорости сети — это и называется адаптивным стримингом.

DASH (Dynamic Adaptive Streaming over HTTP) — открытый международный стандарт, решающий ту же задачу. Вместо m3u8-плейлиста используется XML-манифест с расширением .mpd (Media Presentation Description). DASH не привязан к экосистеме одной компании и гибче в настройке, поэтому его часто выбирают крупные видеосервисы.

  • 📺 HLS — плейлист .m3u8, исторически доминирует на устройствах Apple, широко поддерживается везде.
  • 📡 DASH — манифест .mpd, открытый стандарт, популярен у стриминговых платформ.
  • 🔁 Оба протокола режут видео на сегменты и подстраивают качество под канал.
  • 🔐 Оба поддерживают DRM-защиту контента (например, Widevine).

Для приложения разница практическая одна: от формата зависит, какой модуль ExoPlayer2 нужно подключить и какой класс MediaSource использовать.

Что такое ExoPlayer2 и почему его выбирают для стриминга

ExoPlayer2 — открытая медиабиблиотека от Google для Android, которая пришла на смену стандартному MediaPlayer. В отличие от системного плеера, она модульная: базовое ядро умеет мало, а поддержка конкретных форматов подключается отдельными зависимостями. Именно поэтому «голый» ExoPlayer не воспроизводит HLS или DASH, пока вы не добавите соответствующий модуль.

Библиотека активно развивается: актуальная линейка развития ведётся под именем Media3, где ExoPlayer сохранён как основной компонент. Название «ExoPlayer2» по-прежнему широко используется в документации и статьях, поэтому запрос «hls dash через exoplayer2» обычно означает именно эту связку — либо классическую библиотеку com.google.android.exoplayer2, либо её наследника Media3.

💡

ExoPlayer2 — модульный плеер: HLS и DASH работают только после подключения соответствующих модулей, это самая частая причина «не играет поток».