I media e lo streaming sono una delle competenze chiave dello sviluppo mobile moderno. Secondo Statista (2025), il mercato mondiale dello streaming video supererà i 100 miliardi di dollari entro il 2027. I dispositivi mobili costituiscono oltre il 60% di tutto il traffico delle piattaforme di streaming. Lo sviluppatore deve comprendere protocolli, lettori, meccanismi di protezione dei contenuti e funzionalità come Picture-in-Picture. Lo streaming di qualità nelle applicazioni mobili richiede la padronanza di tutte queste tecnologie.
Punti chiave
HTTP Live Streaming (HLS) è un protocollo per lo streaming in applicazioni mobili sviluppato da Apple. Suddivide il video in piccoli segmenti (solitamente 6–10 secondi) e li trasmette tramite HTTP normale. Il lettore scarica una playlist (.m3u8) e carica sequenzialmente i segmenti, adattando la qualità alla velocità della connessione. HLS fornisce uno streaming affidabile nelle applicazioni mobili su tutti i dispositivi Apple ed è lo standard de facto per iOS.
DASH (Dynamic Adaptive Streaming over HTTP) è uno standard aperto MPEG per la distribuzione di media alle applicazioni mobili. A differenza di HLS, DASH utilizza il formato MP4 per i segmenti e un manifesto XML (MPD) invece di .m3u8. DASH offre più controllo sui codec e supporta più formati. La scelta tra HLS e DASH è una decisione chiave nello sviluppo dello streaming per dispositivi mobili. Il confronto dei protocolli è mostrato nella tabella seguente.
| Parametro | HLS | DASH |
|---|---|---|
| Sviluppatore | Apple | MPEG (standard aperto) |
| Formato playlist | .m3u8 | .mpd (XML) |
| Segmenti | .ts o fMP4 | fMP4 (qualsiasi codec) |
| Supporto nativo | iOS, macOS, tvOS | Android, web |
| Bitrate adattivo | Sì (avc1, mp4a) | Sì (qualsiasi codec) |
| Bassa latenza | LL-HLS (2–5 s) | LL-DASH (2–5 s) |
In pratica, le app iOS scelgono HLS — AVPlayer funziona nativamente con esso. Per Android, DASH è preferito grazie a ExoPlayer. Entrambi i protocolli sono adatti per lo streaming di media su dispositivi mobili. In IT Sectr, utilizziamo entrambe le tecnologie e raccomandiamo di scegliere il protocollo in base alla piattaforma target.
Adaptive Bitrate (ABR) è un meccanismo in cui il lettore seleziona automaticamente la qualità video in base alla velocità della connessione. Il flusso è codificato a più bitrate (360p, 720p, 1080p, 4K). Il lettore passa dall'uno all'altro senza pause. Codec: H.264 (AVC) — base, H.265 (HEVC) — 50% più efficiente, VP9 e AV1 — alternative aperte per Android.
Per la decodifica hardware nelle applicazioni mobili, è importante scegliere il codec giusto. Hardware Decoding utilizza la GPU/processore video del dispositivo e consuma meno batteria. Software Decoding funziona sulla CPU — utilizzato quando la decodifica hardware non è disponibile. IT Sectr raccomanda di verificare sempre il supporto dei codec tramite MediaCodec (Android) o AVAssetTrack (iOS) per una riproduzione ottimale dei media sui dispositivi mobili.
ExoPlayer è un lettore multimediale di Google per Android, ottimizzato per la riproduzione di media nelle applicazioni mobili. A differenza di MediaPlayer, ExoPlayer non è legato alla decodifica hardware e supporta schemi personalizzati tramite moduli di estensione. Funziona con HLS, DASH, SmoothStreaming e RTSP. ExoPlayer è il lettore principale per YouTube, Google TV e Android TV.
AVPlayer e AVPlayerViewController sono i lettori Apple per iOS, macOS, tvOS. AVPlayer è un'API di basso livello, AVPlayerViewController è un wrapper UI già pronto con PiP e AirPlay. Differenze principali: ExoPlayer offre il controllo completo su buffering e rendering, AVPlayerViewController offre un'integrazione rapida con codice minimo. La scelta del lettore influisce direttamente sulla qualità dello streaming nelle applicazioni mobili.
// ExoPlayer — configurazione base del lettore su 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
Il codice mostra l'inizializzazione minima di ExoPlayer: creazione di un'istanza, impostazione dell'elemento multimediale e avvio della riproduzione. ExoPlayer gestisce automaticamente il ciclo di vita dell'Activity tramite player.release() in onStop. Per Android TV o PiP, è necessaria una gestione aggiuntiva del ciclo di vita tramite PlayerView — questo è particolarmente importante quando si configura lo streaming per applicazioni mobili.
Transcoding è la conversione di video da un formato all'altro. Viene utilizzato per ottimizzare i flussi multimediali per diversi dispositivi mobili (ad esempio, H.264 → H.265). Sui dispositivi mobili, la transcodifica è possibile tramite MediaCodec (Android) o AVAssetExportSession (iOS). La transcodifica è dispendiosa in termini di risorse e scarica la batteria — eseguila in background tramite WorkManager o BGTaskScheduler.
Digital Rights Management (DRM) sono sistemi di protezione dei contenuti multimediali dalla copia non autorizzata. Tre tecnologie principali vengono utilizzate per lo streaming di media premium nelle applicazioni mobili: Widevine (Google), FairPlay (Apple) e PlayReady (Microsoft). Senza DRM, i servizi premium (Netflix, Spotify, Disney+) non possono distribuire contenuti.
Widevine è lo standard di protezione DRM per Android, disponibile in tre livelli: L3 (crittografia software), L2, L1 (crittografia hardware, solo Trusted Execution Environment). FairPlay è il sistema esclusivo di Apple, utilizza SVP (Secure Video Pipeline) a livello di chip. PlayReady è il sistema di Microsoft, diffuso su dispositivi Xbox e Windows.
Multi-DRM è un approccio in cui si utilizza un'unica piattaforma per gestire tutte le chiavi DRM. Esempio: EZDRM o Verimatrix. Emettono licenze Widevine, FairPlay e PlayReady tramite un'API unificata. Il Multi-DRM è particolarmente rilevante per i media premium sui dispositivi mobili. In IT Sectr, implementiamo multi-DRM tramite aggregatori — questo fa risparmiare tempo e denaro rispetto all'integrazione di ciascun DRM separatamente.
Audio Focus (Android) è un sistema di gestione dei flussi audio per la riproduzione di media nelle applicazioni mobili. Quando la tua app richiede Audio Focus, altre app (musica, podcast) si mettono in pausa o riducono il volume (ducking). Senza Audio Focus, due app riprodurrebbero contemporaneamente, creando rumore.
Android divide i flussi audio in tipi: MUSIC, VOICE_CALL, ALARM, NOTIFICATION. Per un lettore multimediale, è necessario richiedere AudioManager.AUDIOFOCUS_GAIN. Quando si perde il focus (chiamata in arrivo), è necessario mettere in pausa la riproduzione multimediale e riprendere dopo il ritorno del focus. Implementazione tramite AudioManager.OnAudioFocusChangeListener.
Audio Session (iOS) è l'equivalente di Audio Focus per le app multimediali sui dispositivi mobili Apple. Si configura tramite AVAudioSession.sharedInstance(). Categorie: .playback (obbligatoria per video), .soloAmbient (predefinita, silenziosa quando bloccata), .playAndRecord (per registrazione). Per lo streaming, utilizzare .playback con l'opzione .allowAirPlay.
Picture-in-Picture (PiP) è una modalità in cui il contenuto multimediale continua a essere riprodotto in una piccola finestra mobile quando si minimizza l'app o si passa a un'altra schermata. PiP è diventato uno standard per le app multimediali sui dispositivi mobili — iOS (da iPadOS 13) e Android (da Android 8.0).
Su Android, PiP viene attivato tramite Activity.isInPictureInPictureMode() e PictureInPictureParams.Builder. L'app deve essere in modalità multi-finestra. MediaSession è necessario per controllare la riproduzione multimediale dalla finestra PiP. Nel manifest, specificare android:supportsPictureInPicture="true".
AirPlay è il protocollo Apple per lo streaming di media su Apple TV, HomePod e Smart TV compatibili. Su iOS, viene implementato tramite AVRoutePickerView o MPNowPlayingInfoCenter. Su Android, l'equivalente è Google Cast SDK (Chromecast). Entrambe le tecnologie richiedono configurazione nel file binario e supporto nel lettore. Lo streaming di qualità nelle applicazioni mobili è impossibile senza una di esse.
Domande frequenti
Per iOS è meglio HLS — è supportato nativamente da AVPlayer. Per Android e app multipiattaforma, DASH è preferibile poiché ExoPlayer offre un supporto migliore per DASH e un controllo più flessibile del buffering. La scelta del protocollo influisce direttamente sullo streaming nelle applicazioni mobili.
DRM è obbligatorio solo se distribuisci contenuti multimediali premium (film, musica, corsi). Per contenuti generati dagli utenti o trasmissioni free-to-air, DRM non è necessario. IT Sectr raccomanda di iniziare senza DRM e aggiungerlo solo quando richiesto.
ExoPlayer è un lettore multimediale personalizzabile per Android con supporto per DASH, HLS e SmoothStreaming. AVPlayerViewController è un lettore nativo iOS per HLS con PiP e AirPlay. ExoPlayer offre più controllo, AVPlayerViewController richiede meno codice. Entrambi forniscono una riproduzione multimediale di qualità nelle applicazioni mobili.
PiP è una modalità in cui il contenuto multimediale continua a essere riprodotto in una piccola finestra quando si minimizza l'app. Su iOS viene attivato tramite il delegato AVPlayerViewController, su Android tramite PictureInPictureParams. Richiede configurazione del manifest e gestione del ciclo di vita.
Audio Focus (Android) e Audio Session (iOS) gestiscono la riproduzione audio simultanea da fonti diverse. Garantiscono che la tua app multimediale risponda correttamente a chiamate, notifiche e all'avvio di altre app audio.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.