Как воспроизводить 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.
Пошаговая настройка для пользователя
- Установите плеер (Play Market или проверенный APK).
- Получите MPD‑URL (манифест). Обычно это ссылка с расширением .mpd.
- В плеере выберите «Открыть сеть» и вставьте MPD‑URL. Плеер загрузит манифест и начнёт воспроизведение.
- При проблемах с буферизацией: увеличьте кэш в настройках плеера (128–256 МБ для 4K), либо переключите декодер (HW/Software).
- На 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 даёт контроль и стабильность. Правильная настройка кэша и декодеров решает большинство проблем с буферизацией и энергопотреблением.