Mediji i striming su jedna od ključnih kompetencija modernog mobilnog razvoja. Prema Statista (2025), globalno tržište video striminga premašiće 100 milijardi dolara do 2027. godine. Mobilni uređaji čine više od 60% celokupnog saobraćaja platformi za striming. Programer mora da razume protokole, plejere, mehanizme zaštite sadržaja i funkcije poput Picture-in-Picture. Kvalitetan striming u mobilnim aplikacijama zahteva poznavanje svih ovih tehnologija.
Glavne tačke
HTTP Live Streaming (HLS) je protokol za striming u mobilnim aplikacijama koji je razvio Apple. Deli video na male segmente (obično 6–10 sekundi) i prenosi ih putem običnog HTTP-a. Plejer preuzima plejlistu (.m3u8) i sekvencijalno učitava segmente, prilagođavajući kvalitet brzini veze. HLS pruža pouzdan striming u mobilnim aplikacijama na svim Apple uređajima i de facto je standard za iOS.
DASH (Dynamic Adaptive Streaming over HTTP) je otvoreni MPEG standard za isporuku medija mobilnim aplikacijama. Za razliku od HLS-a, DASH koristi MP4 format za segmente i XML manifest (MPD) umesto .m3u8. DASH pruža više kontrole nad kodecima i podržava više formata. Izbor između HLS i DASH je ključna odluka prilikom razvoja striminga za mobilne uređaje. Poređenje protokola prikazano je u tabeli ispod.
| Parametar | HLS | DASH |
|---|---|---|
| Developer | Apple | MPEG (otvoreni standard) |
| Format plejliste | .m3u8 | .mpd (XML) |
| Segmenti | .ts ili fMP4 | fMP4 (bilo koji kodek) |
| Izvorna podrška | iOS, macOS, tvOS | Android, web |
| Adaptivni bitrate | Da (avc1, mp4a) | Da (bilo koji kodek) |
| Niska latencija | LL-HLS (2–5 s) | LL-DASH (2–5 s) |
U praksi, iOS aplikacije biraju HLS — AVPlayer radi sa njim izvorno. Za Android, DASH je poželjniji zahvaljujući ExoPlayer-u. Oba protokola su pogodna za striming medija na mobilnim uređajima. U IT Sectr-u koristimo obe tehnologije i preporučujemo da protokol birate na osnovu ciljne platforme.
Adaptive Bitrate (ABR) je mehanizam u kojem plejer automatski bira kvalitet videa na osnovu brzine veze. Tok je kodiran u više bitrate-ova (360p, 720p, 1080p, 4K). Plejer prelazi između njih bez pauza. Kodeci: H.264 (AVC) — osnovni, H.265 (HEVC) — 50% efikasniji, VP9 i AV1 — otvorene alternative za Android.
Za hardversko dekodiranje u mobilnim aplikacijama važno je odabrati pravi kodek. Hardware Decoding koristi GPU/video procesor uređaja i troši manje baterije. Software Decoding radi na CPU — koristi se kada hardversko dekodiranje nije dostupno. IT Sectr preporučuje da uvek proveravate podršku za kodeke putem MediaCodec (Android) ili AVAssetTrack (iOS) za optimalnu reprodukciju medija na mobilnim uređajima.
ExoPlayer je media plejer kompanije Google za Android, optimizovan za reprodukciju medija u mobilnim aplikacijama. Za razliku od MediaPlayer-a, ExoPlayer nije vezan za hardversko dekodiranje i podržava prilagođene šeme putem ekstenzionih modula. Radi sa HLS, DASH, SmoothStreaming i RTSP. ExoPlayer je glavni plejer za YouTube, Google TV i Android TV.
AVPlayer i AVPlayerViewController su Apple plejeri za iOS, macOS, tvOS. AVPlayer je niskorazmenski API, AVPlayerViewController je gotovi UI omotač sa PiP i AirPlay. Glavne razlike: ExoPlayer daje potpunu kontrolu nad baferovanjem i renderovanjem, AVPlayerViewController nudi brzu integraciju sa minimalnim kodom. Izbor plejera direktno utiče na kvalitet striminga u mobilnim aplikacijama.
// ExoPlayer — podešavanje osnovnog plejera na Android-u
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
Kod prikazuje minimalnu inicijalizaciju ExoPlayer-a: kreiranje instance, postavljanje medijskog elementa i pokretanje reprodukcije. ExoPlayer automatski upravlja životnim ciklusom Activity putem player.release() u onStop. Za Android TV ili PiP potrebno je dodatno upravljanje životnim ciklusom putem PlayerView — ovo je posebno važno prilikom podešavanja striminga za mobilne aplikacije.
Transcoding je konverzija videa iz jednog formata u drugi. Koristi se za optimizaciju medijskih tokova za različite mobilne uređaje (npr. H.264 → H.265). Na mobilnim uređajima transkodovanje je moguće putem MediaCodec (Android) ili AVAssetExportSession (iOS). Transkodovanje je zahtevno za resurse i prazni bateriju — radite ga u pozadini putem WorkManager ili BGTaskScheduler.
Digital Rights Management (DRM) su sistemi za zaštitu medijskog sadržaja od neovlašćenog kopiranja. Za striming premium medija u mobilnim aplikacijama koriste se tri glavne tehnologije: Widevine (Google), FairPlay (Apple) i PlayReady (Microsoft). Bez DRM-a, premium usluge (Netflix, Spotify, Disney+) ne mogu distribuirati sadržaj.
Widevine je DRM standard zaštite za Android, dostupan u tri nivoa: L3 (softversko šifrovanje), L2, L1 (hardversko šifrovanje, samo Trusted Execution Environment). FairPlay je Apple-ov ekskluzivni sistem, koristi SVP (Secure Video Pipeline) na nivou čipa. PlayReady je Microsoft-ov sistem, rasprostranjen na Xbox i Windows uređajima.
Multi-DRM je pristup u kojem koristite jednu platformu za upravljanje svim DRM ključevima. Primer: EZDRM ili Verimatrix. Oni izdaju licence za Widevine, FairPlay i PlayReady putem objedinjenog API-ja. Multi-DRM je posebno relevantan za premium medije na mobilnim uređajima. U IT Sectr-u implementiramo multi-DRM putem agregatora — ovo štedi vreme i novac u poređenju sa integracijom svakog DRM-a posebno.
Audio Focus (Android) je sistem za upravljanje audio tokovima za reprodukciju medija u mobilnim aplikacijama. Kada vaša aplikacija zatraži Audio Focus, druge aplikacije (muzika, podcastovi) se pauziraju ili smanjuju jačinu zvuka (ducking). Bez Audio Focus-a, dve aplikacije bi svirale istovremeno, stvarajući buku.
Android deli audio tokove na tipove: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Za media plejer, morate zatražiti AudioManager.AUDIOFOCUS_GAIN. Prilikom gubitka fokusa (dolazni poziv), morate pauzirati reprodukciju medija i nastaviti nakon povratka fokusa. Implementacija putem AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) je ekvivalent Audio Focus-a za medijske aplikacije na Apple mobilnim uređajima. Konfiguriše se putem AVAudioSession.sharedInstance(). Kategorije: .playback (obavezno za video), .soloAmbient (podrazumevano, tišina pri zaključavanju), .playAndRecord (za snimanje). Za striming koristite .playback sa opcijom .allowAirPlay.
Picture-in-Picture (PiP) je način rada u kojem medijski sadržaj nastavlja da se reprodukuje u malom plutajućem prozoru prilikom minimiziranja aplikacije ili prelaska na drugi ekran. PiP je postao standard za medijske aplikacije na mobilnim uređajima — iOS (od iPadOS 13) i Android (od Android 8.0).
Na Android-u, PiP se uključuje putem Activity.isInPictureInPictureMode() i PictureInPictureParams.Builder. Aplikacija mora biti u režimu više prozora. MediaSession je potreban za kontrolu reprodukcije medija iz PiP prozora. U manifestu navedite android:supportsPictureInPicture="true".
AirPlay je Apple-ov protokol za striming medija na Apple TV, HomePod i kompatibilne Smart TV-ove. Na iOS-u se implementira putem AVRoutePickerView ili MPNowPlayingInfoCenter. Na Android-u, ekvivalent je Google Cast SDK (Chromecast). Obe tehnologije zahtevaju konfiguraciju u binarnom fajlu i podršku u plejeru. Kvalitetan striming u mobilnim aplikacijama je nemoguć bez jedne od njih.
Često postavljana pitanja
Za iOS je bolji HLS — izvorno ga podržava AVPlayer. Za Android i višeplatformske aplikacije, DASH je poželjniji jer ExoPlayer pruža bolju podršku za DASH i fleksibilniju kontrolu baferovanja. Izbor protokola direktno utiče na striming u mobilnim aplikacijama.
DRM je obavezan samo ako distribuirate premium medijski sadržaj (filmove, muziku, kurseve). Za korisnički generisan sadržaj ili besplatne prenose, DRM nije potreban. IT Sectr preporučuje da počnete bez DRM-a i dodajete ga samo po zahtevu.
ExoPlayer je prilagodljivi media plejer za Android sa podrškom za DASH, HLS i SmoothStreaming. AVPlayerViewController je izvorni iOS plejer za HLS sa PiP i AirPlay. ExoPlayer pruža više kontrole, AVPlayerViewController zahteva manje koda. Oba pružaju kvalitetnu reprodukciju medija u mobilnim aplikacijama.
PiP je način rada u kojem medijski sadržaj nastavlja da se reprodukuje u malom prozoru prilikom minimiziranja aplikacije. Na iOS-u se uključuje putem delegata AVPlayerViewController, na Android-u putem PictureInPictureParams. Zahteva konfiguraciju manifesta i upravljanje životnim ciklusom.
Audio Focus (Android) i Audio Session (iOS) upravljaju istovremenom reprodukcijom zvuka iz različitih izvora. Oni osiguravaju da vaša medijska aplikacija ispravno reaguje na pozive, obaveštenja i pokretanje drugih audio aplikacija.
Sažetak
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.