ExoPlayer supporta smoothStreaming con il formato container FMP4. Gli stream multimediali devono essere demuxati, il che significa che video, audio e testo devono essere definiti in elementi StreamIndex distinti nel manifest smoothStreaming. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione Formati di esempio).
Funzionalità | Prove di supporto | Commenti |
---|---|---|
Container | ||
FMP4 | SÌ | Solo stream demuxati |
Sottotitoli codificati | ||
TCF | SÌ | Incorporato in FMP4 |
Protezione dei contenuti | ||
PlayReady SL2000 | SÌ | Solo Android TV |
Riproduzione in diretta | ||
Riproduzione regolare dal vivo | SÌ | |
Dati Common Media Client Client (CMCD) | SÌ | Guida all'integrazione |
Utilizzo di MediaItem
Per riprodurre uno stream Streaming fluido, devi dipendere dal modulo Streaming fluido.
Kotlin
implementation("androidx.media3:media3-exoplayer-smoothstreaming:1.3.1")
Alla moda
implementation "androidx.media3:media3-exoplayer-smoothstreaming:1.3.1"
Puoi quindi creare un MediaItem
per l'URI del manifest smoothStreaming e passarlo
al player.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(ssUri)); // Prepare the player. player.prepare();
Se l'URI non termina con .ism/Manifest
, puoi passare MimeTypes.APPLICATION_SS
a setMimeType
di MediaItem.Builder
per indicare esplicitamente il tipo di contenuti.
ExoPlayer si adatta automaticamente tra le rappresentazioni definite nel manifest, tenendo conto della larghezza di banda disponibile e delle funzionalità del dispositivo.
Utilizzo di SsMediaSource
Per ulteriori opzioni di personalizzazione, puoi creare un SsMediaSource
e passarlo
direttamente al player anziché un MediaItem
.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a SmoothStreaming media source pointing to a manifest uri. val mediaSource: MediaSource = SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a SmoothStreaming media source pointing to a manifest uri. MediaSource mediaSource = new SsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(ssUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Accedere al file manifest
Puoi recuperare il manifest attuale chiamando Player.getCurrentManifest
.
Per smoothStreaming, devi trasmettere l'oggetto restituito a SsManifest
. Il
callback onTimelineChanged
di Player.Listener
viene chiamato anche
ogni volta che viene caricato il manifest. Ciò accadrà una volta per i contenuti on demand
e talvolta più volte per i contenuti live. Il seguente snippet di codice mostra come un'app
può eseguire un'azione ogni volta che viene caricato il file manifest.
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is SsManifest) { // Do something with the manifest. } } } )
Java
player.addListener( new Player.Listener() { @Override public void onTimelineChanged( Timeline timeline, @Player.TimelineChangeReason int reason) { Object manifest = player.getCurrentManifest(); if (manifest != null) { SsManifest ssManifest = (SsManifest) manifest; // Do something with the manifest. } } });
Personalizzazione della riproduzione
ExoPlayer fornisce diversi modi per personalizzare l'esperienza di riproduzione in base alle esigenze della tua app. Consulta la pagina Personalizzazione per alcuni esempi.