Media och streaming är en av de viktigaste kompetenserna inom modern mobilutveckling. Enligt Statista (2025) kommer den globala videostreamingmarknaden att överstiga 100 miljarder dollar år 2027. Mobila enheter står för över 60 % av all trafik på streamingplattformar. En utvecklare måste förstå protokoll, spelare, mekanismer för innehållsskydd och funktioner som Picture-in-Picture. Kvalitativ streaming i mobilappar kräver behärskning av alla dessa teknologier.
Huvudpunkter
HTTP Live Streaming (HLS) är ett protokoll för streaming i mobilappar utvecklat av Apple. Det delar upp video i små segment (vanligtvis 6–10 sekunder) och överför dem via vanlig HTTP. Spelaren laddar ner en spellista (.m3u8) och laddar sekventiellt segmenten och anpassar kvaliteten efter anslutningshastigheten. HLS ger tillförlitlig streaming i mobilappar på alla Apple-enheter och är de facto-standarden för iOS.
DASH (Dynamic Adaptive Streaming over HTTP) är en öppen MPEG-standard för leverans av media till mobilappar. Till skillnad från HLS använder DASH MP4-format för segment och en XML-manifest (MPD) istället för .m3u8. DASH ger mer kontroll över codecs och stöder fler format. Valet mellan HLS och DASH är ett viktigt beslut vid utveckling av streaming för mobila enheter. Jämförelsen av protokollen visas i tabellen nedan.
| Parameter | HLS | DASH |
|---|---|---|
| Utvecklare | Apple | MPEG (öppen standard) |
| Spellista-format | .m3u8 | .mpd (XML) |
| Segment | .ts eller fMP4 | fMP4 (valfri codec) |
| Native support | iOS, macOS, tvOS | Android, webb |
| Adaptiv bitrate | Ja (avc1, mp4a) | Ja (valfri codec) |
| Låg latens | LL-HLS (2–5 s) | LL-DASH (2–5 s) |
I praktiken väljer iOS-appar HLS — AVPlayer fungerar native med det. För Android föredras DASH tack vare ExoPlayer. Båda protokollen är lämpliga för mediastreaming på mobila enheter. Hos IT Sectr använder vi båda teknologierna och rekommenderar att du väljer protokoll baserat på målplattformen.
Adaptive Bitrate (ABR) är en mekanism där spelaren automatiskt väljer videokvalitet baserat på anslutningshastigheten. Strömmen kodas i flera bitrates (360p, 720p, 1080p, 4K). Spelaren växlar mellan dem utan pauser. Codecs: H.264 (AVC) — grundläggande, H.265 (HEVC) — 50 % effektivare, VP9 och AV1 — öppna alternativ för Android.
För hårdvaruavkodning i mobilappar är det viktigt att välja rätt codec. Hardware Decoding använder enhetens GPU/videoprocessor och förbrukar mindre batteri. Software Decoding körs på CPU — används när hårdvaruavkodning inte är tillgänglig. IT Sectr rekommenderar att du alltid kontrollerar codec-stöd via MediaCodec (Android) eller AVAssetTrack (iOS) för optimal mediauppspelning på mobila enheter.
ExoPlayer är en mediaspelare från Google för Android, optimerad för mediauppspelning i mobilappar. Till skillnad från MediaPlayer är ExoPlayer inte bunden till hårdvaruavkodning och stöder anpassade scheman via expansionsmoduler. Den fungerar med HLS, DASH, SmoothStreaming och RTSP. ExoPlayer är huvudspelaren för YouTube, Google TV och Android TV.
AVPlayer och AVPlayerViewController är Apples spelare för iOS, macOS, tvOS. AVPlayer är ett lågnivå-API, AVPlayerViewController är ett färdigt UI-omslag med PiP och AirPlay. Huvudskillnader: ExoPlayer ger full kontroll över buffring och rendering, AVPlayerViewController ger snabb integration med minimal kod. Valet av spelare påverkar direkt kvaliteten på streaming i mobilappar.
// ExoPlayer — grundinställning av spelare på 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
Koden visar minimal initialisering av ExoPlayer: skapa en instans, ställa in mediaobjektet och starta uppspelning. ExoPlayer hanterar automatiskt Activitys livscykel via player.release() i onStop. För Android TV eller PiP krävs ytterligare livscykelhantering via PlayerView — detta är särskilt viktigt när du ställer in streaming för mobilappar.
Transcoding är konvertering av video från ett format till ett annat. Det används för att optimera mediaströmmar för olika mobila enheter (t.ex. H.264 → H.265). På mobila enheter är transkodning möjlig via MediaCodec (Android) eller AVAssetExportSession (iOS). Transkodning är resurskrävande och tömmer batteriet — gör det i bakgrunden via WorkManager eller BGTaskScheduler.
Digital Rights Management (DRM) är system för att skydda medieinnehåll från obehörig kopiering. För streaming av premiummedia i mobilappar används tre huvudteknologier: Widevine (Google), FairPlay (Apple) och PlayReady (Microsoft). Utan DRM kan premiumtjänster (Netflix, Spotify, Disney+) inte distribuera innehåll.
Widevine är DRM-skyddsstandarden för Android, tillgänglig i tre nivåer: L3 (mjukvarukryptering), L2, L1 (hårdvarukryptering, endast Trusted Execution Environment). FairPlay är Apples exklusiva system, använder SVP (Secure Video Pipeline) på chippnivå. PlayReady är Microsofts system, utbrett på Xbox- och Windows-enheter.
Multi-DRM är ett tillvägagångssätt där du använder en enda plattform för att hantera alla DRM-nycklar. Exempel: EZDRM eller Verimatrix. De utfärdar Widevine-, FairPlay- och PlayReady-licenser via ett enhetligt API. Multi-DRM är särskilt relevant för premiummedia på mobila enheter. Hos IT Sectr implementerar vi multi-DRM via aggregatorer — detta sparar tid och pengar jämfört med att integrera varje DRM separat.
Audio Focus (Android) är ett system för hantering av ljudströmmar för mediauppspelning i mobilappar. När din app begär Audio Focus pausar andra appar (musik, poddar) eller sänker volymen (ducking). Utan Audio Focus skulle två appar spelas upp samtidigt och skapa buller.
Android delar in ljudströmmar i typer: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. För en mediaspelare måste du begära AudioManager.AUDIOFOCUS_GAIN. Vid förlust av fokus (inkommande samtal) måste du pausa mediauppspelningen och återuppta när fokus återkommer. Implementering via AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) är motsvarigheten till Audio Focus för mediaappar på Apple-mobila enheter. Det konfigureras via AVAudioSession.sharedInstance(). Kategorier: .playback (obligatorisk för video), .soloAmbient (standard, tyst vid låsning), .playAndRecord (för inspelning). För streaming, använd .playback med alternativet .allowAirPlay.
Picture-in-Picture (PiP) är ett läge där medieinnehåll fortsätter att spelas upp i ett litet flytande fönster när appen minimeras eller navigerar till en annan skärm. PiP har blivit standard för mediaappar på mobila enheter — iOS (sedan iPadOS 13) och Android (sedan Android 8.0).
På Android aktiveras PiP via Activity.isInPictureInPictureMode() och PictureInPictureParams.Builder. Appen måste vara i flerfönsterläge. MediaSession krävs för att styra mediauppspelning från PiP-fönstret. I manifestet anger du android:supportsPictureInPicture="true".
AirPlay är Apples protokoll för att strömma media till Apple TV, HomePod och kompatibla Smart TV-apparater. På iOS implementeras det via AVRoutePickerView eller MPNowPlayingInfoCenter. På Android är motsvarigheten Google Cast SDK (Chromecast). Båda teknologierna kräver konfiguration i den binära filen och stöd i spelaren. Kvalitativ streaming i mobilappar är omöjlig utan en av dem.
Vanliga frågor
För iOS är HLS bättre — det stöds native av AVPlayer. För Android och plattformsoberoende appar är DASH att föredra eftersom ExoPlayer ger bättre DASH-stöd och mer flexibel buffringskontroll. Valet av protokoll påverkar direkt streaming i mobilappar.
DRM är obligatoriskt endast om du distribuerar premiummediainnehåll (filmer, musik, kurser). För användargenererat innehåll eller gratis sändningar behövs inte DRM. IT Sectr rekommenderar att börja utan DRM och lägga till det endast vid behov.
ExoPlayer är en anpassningsbar mediaspelare för Android med stöd för DASH, HLS och SmoothStreaming. AVPlayerViewController är en native iOS-spelare för HLS med PiP och AirPlay. ExoPlayer ger mer kontroll, AVPlayerViewController kräver mindre kod. Båda ger högkvalitativ mediauppspelning i mobilappar.
PiP är ett läge där medieinnehåll fortsätter att spelas upp i ett litet fönster när appen minimeras. På iOS aktiveras det via AVPlayerViewController-delegaten, på Android via PictureInPictureParams. Kräver manifestkonfiguration och livscykelhantering.
Audio Focus (Android) och Audio Session (iOS) hanterar samtidig ljuduppspelning från olika källor. De säkerställer att din mediaapp svarar korrekt på samtal, aviseringar och start av andra ljudappar.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.