Как воспроизводить MPEG‑DASH на Android

MPEG‑DASH на Android воспроизводится с помощью плееров, которые понимают MPD‑манифест и умеют адаптивно переключать сегменты: популярные варианты — VLC, MX Player, ExoPlayer, Kodi и nPlayer. Для обычного пользователя достаточно установить совместимый плеер и открыть MPD‑URL; для разработчика — использовать ExoPlayer и DashMediaSource.

Поддерживаемые плееры и когда их выбирать

  • VLC — бесплатный, прост в использовании: вставляете MPD‑ссылку в «Открыть сеть». Хорошая стабильность на большинстве устройств.
  • MX Player Pro — лучшее аппаратное ускорение на многих смартфонах; полезен для энергоэффективного 4K.
  • ExoPlayer — библиотека Google для встраивания в приложения; гибкая настройка адаптивности и кэширования.
  • Kodi + InputStream Adaptive — для Android TV / медиаплееров; подходит для IPTV и больших экранов.
  • nPlayer — профессиональные функции, поддержка DRM (Widevine) и детальные логи.

Выбор:

  • Для простого просмотра: VLC.
  • Для экономии батареи и аппаратного декодирования: MX Player (Pro).
  • Для встраивания в приложение или кастомных сценариев: ExoPlayer.
  • Для медиапроигрывания на ТВ: Kodi + плагин.

Если поток защищён DRM (Widevine), проверьте поддержку в плеере заранее — не все решают Widevine L1.

Пошаговая настройка для пользователя

  1. Установите плеер (Play Market или проверенный APK).
  2. Получите MPD‑URL (манифест). Обычно это ссылка с расширением .mpd.
  3. В плеере выберите «Открыть сеть» и вставьте MPD‑URL. Плеер загрузит манифест и начнёт воспроизведение.
  4. При проблемах с буферизацией: увеличьте кэш в настройках плеера (128–256 МБ для 4K), либо переключите декодер (HW/Software).
  5. На Android TV используйте Kodi + InputStream Adaptive для стабильности и поддержки больших разрешений.

Если поток не стартует, проверьте: протокол (лучше HTTPS), корректность MPD и ограничение по DRM или геолокации.

Для разработчиков: ExoPlayer — быстрая интеграция

Добавьте зависимость (пример Gradle):

implementation 'com.google.android.exoplayer:exoplayer-dash:2.19.1'

Простой пример создания источника:

val mediaItem = MediaItem.fromUri(mpdUri)
val dashSource = DashMediaSource.Factory(DefaultDashChunkSource.Factory(DefaultDataSource.Factory(context)))
    .createMediaSource(mediaItem)
player.setMediaSource(dashSource)
player.prepare()
player.playWhenReady = true

Рекомендации:

  • Включите AdaptiveTrackSelection для автоматического переключения качеств.
  • Тестируйте с имитацией сети (Network Link Conditioner) для проверки переходов между битрейтами.
  • Для DRM используйте DefaultDrmSessionManager с Widevine.

Частые ошибки

  • Unsupported protocol / не загружается MPD: проверьте HTTPS и корректность URL.
  • Плеер не переключает качество: уменьшите начальный буфер, проверьте настройки адаптивного выбора треков.
  • Высокая батарея/нагрев: переключитесь на HW декодер или уменьшите разрешение по умолчанию.
  • Корпоративные потоки с аутентификацией: убедитесь, что плеер умеет передавать заголовки (cookies/authorization).

FAQ

  • Нужно ли конвертировать .ts в .m4s? Нет — плеер использует тот формат сегментов, который описан в MPD.
  • Как проверить доступные качества? Откройте MPD в текстовом редакторе или в браузере — там перечислены Representation и bitrate.
  • Можно ли кешировать сегменты для оффлайна? Да — реализуйте кастомный кэш в ExoPlayer или используйте инструмент загрузки сегментов для офлайна.

Заключение: для большинства пользователей достаточно VLC или MX Player; разработчикам — ExoPlayer даёт контроль и стабильность. Правильная настройка кэша и декодеров решает большинство проблем с буферизацией и энергопотреблением.