ExoPlayer prend en charge DASH avec plusieurs formats de conteneur. Les flux multimédias doivent être
démuxé, ce qui signifie que la vidéo, l'audio et le texte doivent être définis dans des
Les éléments AdaptationSet
dans le fichier manifeste DASH (la norme CEA-608 fait exception à la règle
décrites dans le tableau ci-dessous). Les formats d'échantillons audio et vidéo contenus doivent
également être pris en charge (consultez les
exemples de formats).
Fonctionnalité | Compatible | Commentaires |
---|---|---|
Conteneurs | ||
FMP4 | OUI | Flux démultiplexés uniquement |
WebM | OUI | Flux démultiplexés uniquement |
Matroska | OUI | Flux démultiplexés uniquement |
MPEG-TS | NON | Aucune assistance prévue |
Sous-titres | ||
TTML | OUI | Brut ou intégré dans FMP4 conformément à la norme ISO/IEC 14496-30 |
WebVTT | OUI | Brut ou intégré dans FMP4 conformément à la norme ISO/IEC 14496-30 |
CEA-608 | OUI | Intégré dans FMP4 en cas de signalement via des descripteurs d'accessibilité SCTE |
CEA-708 | OUI | Intégré dans FMP4 en cas de signalement via des descripteurs d'accessibilité SCTE |
Métadonnées | ||
Métadonnées EMSG | OUI | Intégré dans FMP4 |
Protection du contenu | ||
Widevine | OUI | "cenc" schema: API 19+; "cbcs" schéma: API 25 ou version ultérieure |
PlayReady SL2000 | OUI | Android TV, "cenc" schéma uniquement |
ClearKey | OUI | API 21 ou version ultérieure, "cenc" schéma uniquement |
Lecture en direct | ||
Lecture en direct régulière | OUI | |
Lecture en direct CMAF à très faible latence | OUI | |
Common Media Client Data (CMCD) | OUI | Guide d'intégration |
Utilisation de MediaItem
Pour lire un flux DASH, vous devez dépendre du module DASH.
Kotlin
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
Vous pouvez ensuite créer un MediaItem
pour un URI de la description de la présentation du média DASH et le transmettre au lecteur.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(dashUri)) // 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(dashUri)); // Prepare the player. player.prepare();
Si votre URI ne se termine pas par .mpd
, vous pouvez transmettre MimeTypes.APPLICATION_MPD
.
à setMimeType
de MediaItem.Builder
pour indiquer explicitement le type
contenus.
ExoPlayer s'adapte automatiquement entre les représentations définies dans le en tenant compte à la fois de la bande passante disponible et des capacités de l'appareil.
Utiliser DashMediaSource
Pour plus d'options de personnalisation, vous pouvez créer un DashMediaSource
et le transmettre
directement au lecteur au lieu d'une MediaItem
.
Kotlin
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a dash media source pointing to a dash manifest uri. val mediaSource: MediaSource = DashMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(dashUri)) // Create a player instance which gets an adaptive track selector by default. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a dash media source pointing to a dash manifest uri. MediaSource mediaSource = new DashMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(dashUri)); // Create a player instance which gets an adaptive track selector by default. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Accéder au fichier manifeste
Vous pouvez récupérer le fichier manifeste actuel en appelant Player.getCurrentManifest
.
Pour DASH, vous devez caster l'objet renvoyé vers DashManifest
. La
Le rappel onTimelineChanged
de Player.Listener
est également appelé chaque fois
le fichier manifeste est chargé. Cela se produira une fois pour un contenu à la demande, et
peut-être plusieurs fois
pour le contenu en direct. L'extrait de code suivant montre comment une application
peut faire quelque chose
dès que le fichier manifeste est chargé.
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is DashManifest) { // 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) { DashManifest dashManifest = (DashManifest) manifest; // Do something with the manifest. } } });
Personnaliser la lecture
ExoPlayer vous propose plusieurs façons d'adapter l'expérience de lecture à votre besoins de votre application. Consultez la page Personnalisation pour obtenir des exemples.