Медіа та стрімінг — одна з ключових компетенцій сучасної мобільної розробки. За даними 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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.