Média a streamování jsou jednou z klíčových kompetencí moderního mobilního vývoje. Podle Statista (2025) globální trh streamování videa překročí do roku 2027 100 miliard dolarů. Mobilní zařízení tvoří více než 60 % veškeré návštěvnosti streamovacích platforem. Vývojář musí rozumět protokolům, přehrávačům, mechanismům ochrany obsahu a funkcím jako Picture-in-Picture. Kvalitní streamování v mobilních aplikacích vyžaduje zvládnutí všech těchto technologií.
Hlavní body
HTTP Live Streaming (HLS) je protokol pro streamování v mobilních aplikacích vyvinutý společností Apple. Rozděluje video na malé segmenty (obvykle 6–10 sekund) a přenáší je přes běžné HTTP. Přehrávač stahuje seznam stop (.m3u8) a postupně načítá segmenty, přičemž přizpůsobuje kvalitu rychlosti připojení. HLS poskytuje spolehlivé streamování v mobilních aplikacích na všech zařízeních Apple a je de facto standardem pro iOS.
DASH (Dynamic Adaptive Streaming over HTTP) je otevřený standard MPEG pro doručování médií do mobilních aplikací. Na rozdíl od HLS používá DASH pro segmenty formát MP4 a místo .m3u8 používá XML manifest (MPD). DASH poskytuje větší kontrolu nad kodeky a podporuje více formátů. Volba mezi HLS a DASH je klíčovým rozhodnutím při vývoji streamování pro mobilní zařízení. Srovnání protokolů je uvedeno v tabulce níže.
| Parametr | HLS | DASH |
|---|---|---|
| Vývojář | Apple | MPEG (otevřený standard) |
| Formát seznamu stop | .m3u8 | .mpd (XML) |
| Segmenty | .ts nebo fMP4 | fMP4 (libovolný kodek) |
| Nativní podpora | iOS, macOS, tvOS | Android, web |
| Adaptivní přenosová rychlost | Ano (avc1, mp4a) | Ano (libovolný kodek) |
| Nízká latence | LL-HLS (2–5 s) | LL-DASH (2–5 s) |
V praxi si iOS aplikace vybírají HLS — AVPlayer s ním pracuje nativně. Pro Android je díky ExoPlayer preferován DASH. Oba protokoly jsou vhodné pro streamování médií na mobilních zařízeních. V IT Sectr používáme obě technologie a doporučujeme vybrat protokol na základě cílové platformy.
Adaptive Bitrate (ABR) je mechanismus, při kterém přehrávač automaticky vybírá kvalitu videa na základě rychlosti připojení. Stream je kódován ve více přenosových rychlostech (360p, 720p, 1080p, 4K). Přehrávač mezi nimi přepíná bez pauz. Kodeky: H.264 (AVC) — základní, H.265 (HEVC) — o 50 % účinnější, VP9 a AV1 — otevřené alternativy pro Android.
Pro hardwarové dekódování v mobilních aplikacích je důležité vybrat správný kodek. Hardware Decoding využívá GPU/video procesor zařízení a spotřebovává méně baterie. Software Decoding běží na CPU — používá se, když hardwarové dekódování není k dispozici. IT Sectr doporučuje vždy kontrolovat podporu kodeků přes MediaCodec (Android) nebo AVAssetTrack (iOS) pro optimální přehrávání médií na mobilních zařízeních.
ExoPlayer je multimediální přehrávač od Google pro Android, optimalizovaný pro přehrávání médií v mobilních aplikacích. Na rozdíl od MediaPlayer není ExoPlayer vázán na hardwarové dekódování a podporuje vlastní schémata prostřednictvím rozšiřujících modulů. Pracuje s HLS, DASH, SmoothStreaming a RTSP. ExoPlayer je hlavním přehrávačem pro YouTube, Google TV a Android TV.
AVPlayer a AVPlayerViewController jsou přehrávače Apple pro iOS, macOS, tvOS. AVPlayer je nízkoúrovňové API, AVPlayerViewController je hotový UI obal s PiP a AirPlay. Hlavní rozdíly: ExoPlayer poskytuje plnou kontrolu nad vyrovnávací pamětí a vykreslováním, AVPlayerViewController nabízí rychlou integraci s minimálním kódem. Volba přehrávače přímo ovlivňuje kvalitu streamování v mobilních aplikacích.
// ExoPlayer — nastavení základního přehrávače na Androidu
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
Kód ukazuje minimální inicializaci ExoPlayer: vytvoření instance, nastavení mediální položky a spuštění přehrávání. ExoPlayer automaticky zpracovává životní cyklus Activity prostřednictvím player.release() v onStop. Pro Android TV nebo PiP je vyžadováno další zpracování životního cyklu přes PlayerView — to je obzvláště důležité při nastavování streamování pro mobilní aplikace.
Transcoding je převod videa z jednoho formátu do druhého. Používá se k optimalizaci mediálních toků pro různá mobilní zařízení (např. H.264 → H.265). Na mobilních zařízeních je transkódování možné přes MediaCodec (Android) nebo AVAssetExportSession (iOS). Transkódování je náročné na zdroje a vybíjí baterii — provádějte ho na pozadí přes WorkManager nebo BGTaskScheduler.
Digital Rights Management (DRM) jsou systémy ochrany multimediálního obsahu před neoprávněným kopírováním. Pro streamování prémiových médií v mobilních aplikacích se používají tři hlavní technologie: Widevine (Google), FairPlay (Apple) a PlayReady (Microsoft). Bez DRM nemohou prémiové služby (Netflix, Spotify, Disney+) distribuovat obsah.
Widevine je standard ochrany DRM pro Android, dostupný ve třech úrovních: L3 (softwarové šifrování), L2, L1 (hardwarové šifrování, pouze Trusted Execution Environment). FairPlay je exkluzivní systém Apple, používá SVP (Secure Video Pipeline) na úrovni čipu. PlayReady je systém Microsoft, rozšířený na zařízeních Xbox a Windows.
Multi-DRM je přístup, kdy používáte jednu platformu pro správu všech DRM klíčů. Příklad: EZDRM nebo Verimatrix. Ty vydávají licence Widevine, FairPlay a PlayReady prostřednictvím jednotného API. Multi-DRM je obzvláště důležitý pro prémiová média na mobilních zařízeních. V IT Sectr implementujeme multi-DRM prostřednictvím agregátorů — to šetří čas a peníze ve srovnání s integrací každého DRM zvlášť.
Audio Focus (Android) je systém správy zvukových toků pro přehrávání médií v mobilních aplikacích. Když vaše aplikace požádá o Audio Focus, ostatní aplikace (hudba, podcasty) se pozastaví nebo sníží hlasitost (ducking). Bez Audio Focus by dvě aplikace přehrávaly současně a vytvářely hluk.
Android rozděluje zvukové toky na typy: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Pro multimediální přehrávač musíte požádat o AudioManager.AUDIOFOCUS_GAIN. Při ztrátě fokusu (příchozí hovor) musíte pozastavit přehrávání médií a po návratu fokusu obnovit. Implementace přes AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) je ekvivalent Audio Focus pro mediální aplikace na mobilních zařízeních Apple. Konfiguruje se přes AVAudioSession.sharedInstance(). Kategorie: .playback (povinné pro video), .soloAmbient (výchozí, ticho při uzamčení), .playAndRecord (pro nahrávání). Pro streamování použijte .playback s volbou .allowAirPlay.
Picture-in-Picture (PiP) je režim, ve kterém multimediální obsah pokračuje v přehrávání v malém plovoucím okně při minimalizaci aplikace nebo přechodu na jinou obrazovku. PiP se stal standardem pro mediální aplikace na mobilních zařízeních — iOS (od iPadOS 13) a Android (od Android 8.0).
Na Androidu se PiP aktivuje přes Activity.isInPictureInPictureMode() a PictureInPictureParams.Builder. Aplikace musí být v režimu více oken. MediaSession je vyžadován pro ovládání přehrávání médií z okna PiP. V manifestu uveďte android:supportsPictureInPicture="true".
AirPlay je protokol Apple pro streamování médií na Apple TV, HomePod a kompatibilní Smart TV. Na iOS se implementuje přes AVRoutePickerView nebo MPNowPlayingInfoCenter. Na Androidu je ekvivalentem Google Cast SDK (Chromecast). Obě technologie vyžadují konfiguraci v binárním souboru a podporu v přehrávači. Kvalitní streamování v mobilních aplikacích je bez jedné z nich nemožné.
Často kladené otázky
Pro iOS je lepší HLS — je nativně podporován AVPlayerem. Pro Android a multiplatformní aplikace je preferován DASH, protože ExoPlayer poskytuje lepší podporu DASH a flexibilnější kontrolu bufferování. Volba protokolu přímo ovlivňuje streamování v mobilních aplikacích.
DRM je povinné pouze pokud distribuujete prémiový multimediální obsah (filmy, hudbu, kurzy). Pro obsah vytvářený uživateli nebo bezplatné vysílání není DRM nutné. IT Sectr doporučuje začít bez DRM a přidat ho pouze v případě potřeby.
ExoPlayer je přizpůsobitelný multimediální přehrávač pro Android s podporou DASH, HLS a SmoothStreaming. AVPlayerViewController je nativní iOS přehrávač pro HLS s PiP a AirPlay. ExoPlayer poskytuje větší kontrolu, AVPlayerViewController vyžaduje méně kódu. Oba poskytují kvalitní přehrávání médií v mobilních aplikacích.
PiP je režim, ve kterém multimediální obsah pokračuje v přehrávání v malém okně při minimalizaci aplikace. Na iOS se aktivuje přes delegáta AVPlayerViewController, na Androidu přes PictureInPictureParams. Vyžaduje konfiguraci manifestu a zpracování životního cyklu.
Audio Focus (Android) a Audio Session (iOS) spravují současné přehrávání zvuku z různých zdrojů. Zajišťují, že vaše multimediální aplikace správně reaguje na hovory, oznámení a spouštění jiných zvukových aplikací.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.