Медиа и стриминг — одна из ключевых компетенций современной мобильной разработки. По данным Statista (2025), мировой рынок видео-стриминга превысит $100 млрд к 2027 году. Мобильные устройства составляют более 60% всего трафика стриминговых платформ. Разработчику необходимо понимать протоколы, плееры, механизмы защиты контента и функции вроде Picture-in-Picture. Качественный стриминг в мобильных приложениях требует владения всеми этими технологиями.
Главное
HTTP Live Streaming (HLS) — протокол для стриминга в мобильных приложениях, разработанный Apple. Он разбивает видео на небольшие сегменты (обычно 6–10 секунд) и передаёт их через обычный HTTP. Плеер скачивает плейлист (.m3u8) и последовательно загружает сегменты, адаптируя качество под скорость соединения. HLS обеспечивает надежный стриминг в мобильных приложениях на всех устройствах Apple и является стандартом де-факто для iOS.
DASH (Dynamic Adaptive Streaming over HTTP) — открытый стандарт MPEG для доставки медиа в мобильные приложения. В отличие от HLS, DASH использует формат MP4 для сегментов и XML-манифест (MPD) вместо .m3u8. DASH даёт больше контроля над кодеками и поддерживает больше форматов. Выбор между HLS и DASH — ключевое решение при разработке стриминга для мобильных устройств. Сравнение протоколов представлено в таблице ниже.
| Параметр | HLS | DASH |
|---|---|---|
| Разработчик | Apple | MPEG (открытый стандарт) |
| Формат плейлиста | .m3u8 | .mpd (XML) |
| Сегменты | .ts или fMP4 | fMP4 (любые кодеки) |
| Нативная поддержка | iOS, macOS, tvOS | Android, веб |
| Адаптивный битрейт | Да (avc1, mp4a) | Да (любые кодеки) |
| Low-latency | LL-HLS (2–5 сек) | LL-DASH (2–5 сек) |
На практике для iOS-приложений выбирают HLS — AVPlayer работает с ним нативно. Для Android предпочтительнее DASH благодаря ExoPlayer. Оба протокола подходят для медиа-стриминга на мобильных устройствах. В IT Sectr мы используем обе технологии и рекомендуем выбирать протокол исходя из целевой платформы.
Adaptive Bitrate (ABR) — механизм, при котором плеер автоматически выбирает качество видео в зависимости от скорости соединения. Поток кодируется в нескольких битрейтах (360p, 720p, 1080p, 4K). Плеер переключается между ними без пауз. Кодеки: H.264 (AVC) — базовый, H.265 (HEVC) — эффективнее на 50%, VP9 и AV1 — открытые альтернативы для Android.
Для hardware decoding в мобильных приложениях важно выбрать правильный кодек. Hardware Decoding использует GPU/видеопроцессор устройства и потребляет меньше батареи. Software Decoding работает на CPU — используется, когда аппаратное декодирование недоступно. IT Sectr рекомендует всегда проверять поддержку кодеков через MediaCodec (Android) или AVAssetTrack (iOS) для оптимального воспроизведения медиа на мобильных устройствах.
ExoPlayer — медиа-плеер от Google для Android, оптимизированный для воспроизведения медиа в мобильных приложениях. В отличие от MediaPlayer, ExoPlayer не привязан к аппаратному декодированию и поддерживает кастомные схемы через модули расширений. Он работает с HLS, DASH, SmoothStreaming и RTSP. ExoPlayer — основной плеер для YouTube, Google TV и Android TV.
AVPlayer и AVPlayerViewController — плееры Apple для iOS, macOS, tvOS. AVPlayer — низкоуровневый API, AVPlayerViewController — готовая UI-обёртка с PiP и AirPlay. Основные отличия: ExoPlayer даёт полный контроль над буферизацией и рендерингом, AVPlayerViewController — быстрая интеграция с минимальным кодом. Выбор плеера напрямую влияет на качество стриминга в мобильных приложениях.
// ExoPlayer — настройка базового плеера на Android
val player = ExoPlayer.Builder(this)
.setMediaSource(ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory()))
.build()
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
player.playWhenReady = true
В коде показана минимальная инициализация ExoPlayer: создание экземпляра, установка медиа-элемента и старт воспроизведения. ExoPlayer автоматически обрабатывает жизненный цикл Activity через player.release() в onStop. Для Android TV или PiP требуется дополнительная обработка lifecycle через PlayerView — это особенно важно при настройке стриминга для мобильных приложений.
Transcoding — перекодирование видео из одного формата в другой. Используется для оптимизации медиа-потоков под разные мобильные устройства (например, H.264 → H.265). На мобильных устройствах транскодинг возможен через MediaCodec (Android) или AVAssetExportSession (iOS). Transcoding ресурсоёмкий и разряжает батарею — делайте его в фоне, через WorkManager или BGTaskScheduler.
Digital Rights Management (DRM) — системы защиты медиа-контента от несанкционированного копирования. Для стриминга премиального медиа в мобильных приложениях используются три основные технологии: Widevine (Google), FairPlay (Apple) и PlayReady (Microsoft). Без DRM премиальные сервисы (Netflix, Spotify, Disney+) не могут распространять контент.
Widevine — стандарт DRM-защиты медиа для Android, бывает трёх уровней: L3 (программное шифрование), L2, L1 (аппаратное шифрование, только для Trusted Execution Environment). FairPlay — эксклюзивная система Apple, использует SVP (Secure Video Pipeline) на уровне чипа. PlayReady — система Microsoft, распространена на Xbox и Windows-устройствах.
Multi-DRM — подход, при котором вы используете одну платформу для управления всеми DRM-ключами. Пример: EZDRM или Verimatrix. Они отдают лицензии Widevine, FairPlay и PlayReady через единый API. Multi-DRM особенно актуален для премиального медиа на мобильных устройствах. В IT Sectr мы реализуем multi-DRM через аггрегаторов — это экономит время и деньги по сравнению с интеграцией каждой DRM отдельно.
Audio Focus (Android) — система управления аудио-потоками для воспроизведения медиа в мобильных приложениях. Когда ваше приложение запрашивает Audio Focus, другие приложения (музыка, подкасты) приостанавливаются или снижают громкость (duck). Без Audio Focus два приложения будут играть одновременно, создавая шум.
Android делит аудио-потоки на типы: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Для медиа-плеера нужно запрашивать AudioManager.AUDIOFOCUS_GAIN. При потере фокуса (звонок) необходимо приостановить воспроизведение медиа и возобновить после возврата фокуса. Реализация через AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) — аналог Audio Focus для медиа-приложений на мобильных устройствах Apple. Настраивается через AVAudioSession.sharedInstance(). Категории: .playback (обязательная для видео), .soloAmbient (по умолчанию, тишина при блокировке), .playAndRecord (для записи). Для стриминга используйте .playback с опцией .allowAirPlay.
Picture-in-Picture (PiP) — режим, при котором медиа-контент продолжает воспроизводиться в маленьком плавающем окне при сворачивании приложения или переходе на другой экран. PiP стал стандартом для медиа-приложений на мобильных устройствах iOS (с iPadOS 13) и Android (с Android 8.0).
На Android PiP включается через Activity.isInPictureInPictureMode() и PictureInPictureParams.Builder. Приложение должно быть в многооконном режиме. MediaSession требуется для управления воспроизведением медиа из PiP-окна. В манифесте укажите android:supportsPictureInPicture="true".
AirPlay — протокол Apple для стриминга медиа на Apple TV, HomePod и совместимые Smart TV. На iOS реализуется через AVRoutePickerView или MPNowPlayingInfoCenter. На Android аналог — Google Cast SDK (Chromecast). Обе технологии требуют настройки в бинарном файле и поддержки в плеере. Качественный стриминг в мобильных приложениях невозможен без одной из них.
Часто задаваемые вопросы
Для iOS лучше HLS — он нативно поддерживается AVPlayer. Для Android и кроссплатформенных приложений предпочтительнее DASH, так как ExoPlayer обеспечивает лучшую поддержку DASH и более гибкий контроль над буферизацией. Выбор протокола напрямую влияет на стриминг в мобильных приложениях.
DRM обязателен только если вы распространяете премиальный медиа-контент (фильмы, музыку, курсы). Для пользовательского контента или free-to-air трансляций DRM не нужен. IT Sectr рекомендует начинать без DRM и добавлять его только по требованию.
ExoPlayer — кастомизируемый медиа-плеер для Android с поддержкой DASH, HLS и SmoothStreaming. AVPlayerViewController — нативный плеер iOS для HLS с PiP и AirPlay. ExoPlayer даёт больше контроля, AVPlayerViewController — меньше кода. Оба обеспечивают качественное воспроизведение медиа в мобильных приложениях.
PiP — режим, при котором медиа-контент продолжает воспроизводиться в маленьком окне при сворачивании приложения. На iOS включается через делегат AVPlayerViewController, на Android через PictureInPictureParams. Требует настройки в манифесте и обработки lifecycle.
Audio Focus (Android) и Audio Session (iOS) управляют одновременным воспроизведением звука из разных источников. Они гарантируют, что ваше медиа-приложение корректно реагирует на звонки, уведомления и запуск других аудио-приложений.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.