Медията и стриймингът са една от ключовите компетенции на съвременната мобилна разработка. Според 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) | Да (всякакви кодеци) |
| Ниска латентност | 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 използва 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 се изисква допълнителна обработка на жизнения цикъл чрез PlayerView — това е особено важно при настройване на стрийминг за мобилни приложения.
Transcoding е преобразуване на видео от един формат в друг. Използва се за оптимизиране на медийни потоци за различни мобилни устройства (напр. H.264 → H.265). На мобилни устройства транскодирането е възможно чрез MediaCodec (Android) или AVAssetExportSession (iOS). Транскодирането е ресурсоемко и изтощава батерията — правете го на заден план чрез 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, други приложения (музика, подкасти) се поставят на пауза или намаляват силата на звука (ducking). Без 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 е задължителен само ако разпространявате премиум медийно съдържание (филми, музика, курсове). За потребителско съдържание или безплатни излъчвания DRM не е необходим. IT Sectr препоръчва да започнете без DRM и да го добавите само при необходимост.
ExoPlayer е персонализиран медиен плейър за Android с поддръжка на DASH, HLS и SmoothStreaming. AVPlayerViewController е вграден iOS плейър за HLS с PiP и AirPlay. ExoPlayer дава повече контрол, AVPlayerViewController изисква по-малко код. И двата осигуряват качествено възпроизвеждане на медия в мобилни приложения.
PiP е режим, при който медийното съдържание продължава да се възпроизвежда в малък прозорец при минимизиране на приложението. На iOS се включва чрез делегата на AVPlayerViewController, на Android чрез PictureInPictureParams. Изисква конфигурация на манифеста и обработка на жизнения цикъл.
Audio Focus (Android) и Audio Session (iOS) управляват едновременното възпроизвеждане на звук от различни източници. Те гарантират, че вашето медийно приложение реагира правилно на разговори, известия и стартиране на други аудио приложения.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.