Media i streaming to jedna z kluczowych kompetencji nowoczesnego rozwoju mobilnego. Według Statista (2025), globalny rynek streamingu wideo przekroczy 100 miliardów dolarów do 2027 roku. Urządzenia mobilne stanowią ponad 60% całego ruchu platform streamingowych. Deweloper musi rozumieć protokoły, odtwarzacze, mechanizmy ochrony treści i funkcje takie jak Picture-in-Picture. Wysokiej jakości streaming w aplikacjach mobilnych wymaga opanowania wszystkich tych technologii.
Najważniejsze
HTTP Live Streaming (HLS) to protokół do streamingu w aplikacjach mobilnych opracowany przez Apple. Dzieli wideo na małe segmenty (zwykle 6–10 sekund) i przesyła je przez zwykły HTTP. Odtwarzacz pobiera listę odtwarzania (.m3u8) i sekwencyjnie ładuje segmenty, dostosowując jakość do prędkości połączenia. HLS zapewnia niezawodny streaming w aplikacjach mobilnych na wszystkich urządzeniach Apple i jest de facto standardem dla iOS.
DASH (Dynamic Adaptive Streaming over HTTP) to otwarty standard MPEG do dostarczania mediów do aplikacji mobilnych. W przeciwieństwie do HLS, DASH używa formatu MP4 dla segmentów i manifestu XML (MPD) zamiast .m3u8. DASH daje większą kontrolę nad kodekami i obsługuje więcej formatów. Wybór między HLS a DASH to kluczowa decyzja przy opracowywaniu streamingu dla urządzeń mobilnych. Porównanie protokołów przedstawiono w poniższej tabeli.
| Parametr | HLS | DASH |
|---|---|---|
| Deweloper | Apple | MPEG (otwarty standard) |
| Format listy odtwarzania | .m3u8 | .mpd (XML) |
| Segmenty | .ts lub fMP4 | fMP4 (dowolny kodek) |
| Natywne wsparcie | iOS, macOS, tvOS | Android, sieć web |
| Adaptacyjna przepływność | Tak (avc1, mp4a) | Tak (dowolny kodek) |
| Niskie opóźnienie | LL-HLS (2–5 s) | LL-DASH (2–5 s) |
W praktyce aplikacje iOS wybierają HLS — AVPlayer działa z nim natywnie. Dla Android preferowany jest DASH dzięki ExoPlayer. Oba protokoły nadają się do streamingu mediów na urządzeniach mobilnych. W IT Sectr używamy obu technologii i zalecamy wybór protokołu na podstawie docelowej platformy.
Adaptive Bitrate (ABR) to mechanizm, w którym odtwarzacz automatycznie wybiera jakość wideo na podstawie prędkości połączenia. Strumień jest kodowany w wielu przepływnościach (360p, 720p, 1080p, 4K). Odtwarzacz przełącza się między nimi bez przerw. Kodeki: H.264 (AVC) — podstawowy, H.265 (HEVC) — 50% wydajniejszy, VP9 i AV1 — otwarte alternatywy dla Android.
Do dekodowania sprzętowego w aplikacjach mobilnych ważny jest wybór odpowiedniego kodeka. Hardware Decoding wykorzystuje GPU/procesor wideo urządzenia i zużywa mniej baterii. Software Decoding działa na CPU — używany, gdy dekodowanie sprzętowe jest niedostępne. IT Sectr zaleca zawsze sprawdzać obsługę kodeków przez MediaCodec (Android) lub AVAssetTrack (iOS) w celu optymalnego odtwarzania mediów na urządzeniach mobilnych.
ExoPlayer to odtwarzacz multimedialny Google dla Android, zoptymalizowany do odtwarzania mediów w aplikacjach mobilnych. W przeciwieństwie do MediaPlayer, ExoPlayer nie jest związany z dekodowaniem sprzętowym i obsługuje niestandardowe schematy przez moduły rozszerzeń. Działa z HLS, DASH, SmoothStreaming i RTSP. ExoPlayer to główny odtwarzacz YouTube, Google TV i Android TV.
AVPlayer i AVPlayerViewController to odtwarzacze Apple dla iOS, macOS, tvOS. AVPlayer to niskopoziomowe API, AVPlayerViewController to gotowy interfejs UI z PiP i AirPlay. Główne różnice: ExoPlayer daje pełną kontrolę nad buforowaniem i renderowaniem, AVPlayerViewController oferuje szybką integrację z minimalnym kodem. Wybór odtwarzacza bezpośrednio wpływa na jakość streamingu w aplikacjach mobilnych.
// ExoPlayer — podstawowa konfiguracja odtwarzacza na 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
Kod pokazuje minimalną inicjalizację ExoPlayer: utworzenie instancji, ustawienie elementu multimedialnego i rozpoczęcie odtwarzania. ExoPlayer automatycznie obsługuje cykl życia Activity przez player.release() w onStop. Dla Android TV lub PiP wymagana jest dodatkowa obsługa cyklu życia przez PlayerView — jest to szczególnie ważne przy konfiguracji streamingu dla aplikacji mobilnych.
Transcoding to konwersja wideo z jednego formatu na inny. Służy do optymalizacji strumieni mediów dla różnych urządzeń mobilnych (np. H.264 → H.265). Na urządzeniach mobilnych transkodowanie jest możliwe przez MediaCodec (Android) lub AVAssetExportSession (iOS). Transkodowanie jest zasobożerne i rozładowuje baterię — wykonuj je w tle przez WorkManager lub BGTaskScheduler.
Digital Rights Management (DRM) to systemy ochrony treści multimedialnych przed nieautoryzowanym kopiowaniem. Do streamingu mediów premium w aplikacjach mobilnych używane są trzy główne technologie: Widevine (Google), FairPlay (Apple) i PlayReady (Microsoft). Bez DRM usługi premium (Netflix, Spotify, Disney+) nie mogą dystrybuować treści.
Widevine to standard ochrony DRM dla Android, dostępny w trzech poziomach: L3 (szyfrowanie programowe), L2, L1 (szyfrowanie sprzętowe, tylko Trusted Execution Environment). FairPlay to ekskluzywny system Apple, wykorzystuje SVP (Secure Video Pipeline) na poziomie chipa. PlayReady to system Microsoft, rozpowszechniony na urządzeniach Xbox i Windows.
Multi-DRM to podejście, w którym używasz jednej platformy do zarządzania wszystkimi kluczami DRM. Przykład: EZDRM lub Verimatrix. Wydają one licencje Widevine, FairPlay i PlayReady przez ujednolicone API. Multi-DRM jest szczególnie istotny dla mediów premium na urządzeniach mobilnych. W IT Sectr wdrażamy multi-DRM przez agregatorów — oszczędza to czas i pieniądze w porównaniu z integracją każdego DRM osobno.
Audio Focus (Android) to system zarządzania strumieniami audio do odtwarzania mediów w aplikacjach mobilnych. Gdy Twoja aplikacja żąda Audio Focus, inne aplikacje (muzyka, podcasty) wstrzymują się lub zmniejszają głośność (ducking). Bez Audio Focus dwie aplikacje grałyby jednocześnie, powodując hałas.
Android dzieli strumienie audio na typy: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Dla odtwarzacza multimedialnego musisz zażądać AudioManager.AUDIOFOCUS_GAIN. Po utracie fokusu (połączenie przychodzące) należy wstrzymać odtwarzanie multimediów i wznowić po powrocie fokusu. Implementacja przez AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) to odpowiednik Audio Focus dla aplikacji multimedialnych na urządzeniach mobilnych Apple. Jest konfigurowany przez AVAudioSession.sharedInstance(). Kategorie: .playback (wymagane dla wideo), .soloAmbient (domyślne, cisza przy blokadzie), .playAndRecord (do nagrywania). Do streamingu używaj .playback z opcją .allowAirPlay.
Picture-in-Picture (PiP) to tryb, w którym treści multimedialne są nadal odtwarzane w małym, pływającym oknie po zminimalizowaniu aplikacji lub przejściu do innego ekranu. PiP stał się standardem dla aplikacji multimedialnych na urządzeniach mobilnych — iOS (od iPadOS 13) i Android (od Android 8.0).
Na Android PiP jest włączany przez Activity.isInPictureInPictureMode() i PictureInPictureParams.Builder. Aplikacja musi być w trybie wielu okien. MediaSession jest wymagany do sterowania odtwarzaniem multimediów z okna PiP. W manifeście określ android:supportsPictureInPicture="true".
AirPlay to protokół Apple do strumieniowania multimediów na Apple TV, HomePod i kompatybilne Smart TV. Na iOS jest implementowany przez AVRoutePickerView lub MPNowPlayingInfoCenter. Na Android odpowiednikiem jest Google Cast SDK (Chromecast). Obie technologie wymagają konfiguracji w pliku binarnym i wsparcia w odtwarzaczu. Wysokiej jakości streaming w aplikacjach mobilnych jest niemożliwy bez jednej z nich.
Często zadawane pytania
Dla iOS lepszy jest HLS — jest natywnie obsługiwany przez AVPlayer. Dla Android i aplikacji wieloplatformowych preferowany jest DASH, ponieważ ExoPlayer zapewnia lepszą obsługę DASH i bardziej elastyczną kontrolę buforowania. Wybór protokołu bezpośrednio wpływa na streaming w aplikacjach mobilnych.
DRM jest obowiązkowy tylko jeśli dystrybuujesz treści multimedialne premium (filmy, muzykę, kursy). Dla treści generowanych przez użytkowników lub transmisji free-to-air DRM nie jest potrzebny. IT Sectr zaleca zaczynanie bez DRM i dodawanie go tylko w razie potrzeby.
ExoPlayer to konfigurowalny odtwarzacz multimedialny dla Android z obsługą DASH, HLS i SmoothStreaming. AVPlayerViewController to natywny odtwarzacz iOS dla HLS z PiP i AirPlay. ExoPlayer daje większą kontrolę, AVPlayerViewController wymaga mniej kodu. Oba zapewniają wysokiej jakości odtwarzanie multimediów w aplikacjach mobilnych.
PiP to tryb, w którym treści multimedialne są nadal odtwarzane w małym oknie po zminimalizowaniu aplikacji. Na iOS jest włączany przez delegata AVPlayerViewController, na Android przez PictureInPictureParams. Wymaga konfiguracji manifestu i obsługi cyklu życia.
Audio Focus (Android) i Audio Session (iOS) zarządzają jednoczesnym odtwarzaniem dźwięku z różnych źródeł. Zapewniają, że aplikacja multimedialna poprawnie reaguje na połączenia, powiadomienia i uruchamianie innych aplikacji audio.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.