L'application de démonstration principale d'ExoPlayer a deux objectifs principaux:
- Pour fournir un exemple relativement simple, mais complet, d'utilisation d'ExoPlayer. L'application de démonstration peut être un bon point de départ pour développer votre propre application.
- Pour essayer ExoPlayer facilement. L'application de démonstration peut être utilisée pour tester la lecture. de votre propre contenu en plus des exemples inclus.
Cette page explique comment obtenir, compiler et exécuter l'application de démonstration. Elle décrit également comment l'utiliser pour lire vos propres contenus multimédias.
Obtenir le code
Le code source de l'application de démonstration principale se trouve dans le dossier demos/main
de
notre projet GitHub. Si vous ne l'avez pas déjà fait, clonez le projet dans un
répertoire local:
git clone https://github.com/androidx/media.git
Ensuite, ouvrez le projet dans Android Studio. Vous devriez obtenir le résultat suivant Vue Projet Android (les dossiers appropriés de l'application de démonstration ont été développés):
Compiler et exécuter
Pour compiler et exécuter l'application de démonstration, sélectionnez et exécutez la configuration demo
dans
Android Studio L'application de démonstration sera installée et exécutée sur un appareil Android connecté.
Nous vous recommandons d'utiliser un appareil physique si possible. Si vous souhaitez utiliser un émulateur
consultez plutôt la section sur les émulateurs de la page Appareils compatibles et assurez-vous
que votre appareil virtuel utilise une image système avec un niveau d'API d'au moins 23.
L'application de démonstration présente une liste d'exemples (SampleChooserActivity
). Sélection...
un Sample ouvre une deuxième activité (PlayerActivity
) pour la lecture. La version de démonstration
propose des commandes de lecture et une fonctionnalité de sélection de pistes. Elle utilise également
La classe utilitaire EventLogger
d'ExoPlayer pour générer des informations de débogage utiles
le journal système. Vous pouvez consulter cette journalisation (ainsi que la journalisation des niveaux d'erreur pour
autres balises) à l'aide de la commande suivante:
adb logcat EventLogger:V *:E
Activer les décodeurs groupés
ExoPlayer dispose d'un certain nombre d'extensions qui permettent d'utiliser des logiciels groupés y compris les décodeurs AV1, VP9, Opus, FLAC et FFmpeg (audio uniquement). Application de démonstration vous pouvez inclure et utiliser ces extensions, comme suit:
- Créez chacune des extensions que vous souhaitez inclure. Notez qu'il s'agit d'un
un processus manuel. Reportez-vous au fichier
README.md
de chaque extension pour obtenir instructions. Dans la vue "Build Variants" (Variantes de compilation) d'Android Studio, définissez la variante de compilation pour la démonstration. module vers
withDecoderExtensionsDebug
ouwithDecoderExtensionsRelease
en tant que comme illustré dans l'image suivante.Compilez, installez et exécutez la configuration
demo
normalement.
Par défaut, un décodeur d'extension ne sera utilisé que si un décodeur de plate-forme adapté n'existe pas. Il est possible de spécifier que les décodeurs d'extension doivent être de préférence, comme décrit dans les sections suivantes.
Lire votre propre contenu
Il existe plusieurs façons de lire votre propre contenu dans l'application de démonstration.
1. Modifier assets/media.exolist.json
Les exemples listés dans l'application de démonstration sont chargés depuis assets/media.exolist.json
.
En modifiant ce fichier JSON, vous pouvez ajouter et supprimer des échantillons dans la démonstration
l'application. Le schéma est le suivant, où [O] indique un attribut facultatif.
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of sample",
"uri": "The URI of the sample",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8",
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks"
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)",
"ad_tag_uri": "[O] The URI of an ad tag to load via the IMA extension"
},
...etc
]
},
...etc
]
Les playlists d'exemples peuvent être spécifiées à l'aide du schéma:
[
{
"name": "Name of heading",
"samples": [
{
"name": "Name of playlist sample",
"playlist": [
{
"uri": "The URI of the first sample in the playlist",
"extension": "[O] Sample type hint. Values: mpd, ism, m3u8"
"clip_start_position_ms": "[O] A start point to which the sample should be clipped, in milliseconds"
"clip_end_position_ms": "[O] An end point from which the sample should be clipped, in milliseconds"
"drm_scheme": "[O] Drm scheme if protected. Values: widevine, playready, clearkey",
"drm_license_uri": "[O] URI of the license server if protected",
"drm_force_default_license_uri": "[O] Whether to force use of "drm_license_uri" for key requests that include their own license URI",
"drm_key_request_properties": "[O] Key request headers if protected",
"drm_session_for_clear_content": "[O] Whether to attach a DRM session to clear video and audio tracks",
"drm_multi_session": "[O] Enables key rotation if protected",
"subtitle_uri": "[O] The URI of a subtitle sidecar file",
"subtitle_mime_type": "[O] The MIME type of subtitle_uri (required if subtitle_uri is set)",
"subtitle_language": "[O] The BCP47 language code of the subtitle file (ignored if subtitle_uri is not set)"
},
{
"uri": "The URI of the second sample in the playlist",
...etc
},
...etc
]
},
...etc
]
},
...etc
]
Si nécessaire, les en-têtes de requête de clé sont spécifiés en tant qu'objet contenant une chaîne pour chaque en-tête:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
Dans l'exemple d'activité du sélecteur, le menu à développer contient des options pour spécifiant si les décodeurs d'extension doivent être privilégiés.
URI de fichiers locaux et restrictions d'espace de stockage cloisonné
Lorsque vous spécifiez des URI de fichiers locaux, l'application de démonstration demande l'espace de stockage nécessaire
des autorisations d’accès pour
lire ces fichiers. Cependant, Android 13 n'est pas
Possibilité de charger des fichiers arbitraires qui ne se terminent pas par un fichier multimédia classique
(.mp4
, par exemple). Si vous devez charger un tel fichier, vous pouvez le placer dans
le répertoire de stockage spécifique de l'application de démonstration qui ne présente aucune restriction d'accès. Ce
se trouve généralement ici : /sdcard/Android/data/androidx.media3.demo.main/files
.
2. Charger un fichier exolist.json externe
L'application de démonstration peut charger des fichiers JSON externes à l'aide du schéma ci-dessus et nommé
conformément à la convention *.exolist.json
. Par exemple, si vous hébergez un tel
à l'emplacement https://yourdomain.com/samples.exolist.json
, vous pouvez l'ouvrir dans le
application de démonstration à l'aide de:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
cliquer sur un lien *.exolist.json
(par exemple, dans le navigateur ou dans un e-mail) ;
client) sur un appareil sur lequel l'application de démonstration est installée, celle-ci s'ouvre également dans la démo.
l'application. L'hébergement d'un fichier JSON *.exolist.json
offre donc un moyen simple
en distribuant du contenu pour que d'autres personnes l'essaient dans l'application de démonstration.
3. Déclencher un intent
Les intents peuvent être utilisés pour contourner la liste des échantillons et lancer directement
lecture. Pour lire un seul Sample, définissez l'action de l'intent sur
androidx.media3.demo.main.action.VIEW
et son URI de données à celui de la
d'un extrait à écouter. Un tel intent peut être déclenché depuis le terminal à l'aide de la commande suivante:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
Les extras facultatifs compatibles avec un seul exemple d'intent sont les suivants:
- Exemples d'extras de configuration:
<ph type="x-smartling-placeholder">
- </ph>
mime_type
[Chaîne] Exemple d'indication concernant le type MIME. Exemple :application/dash+xml
pour le contenu DASH.clip_start_position_ms
[Long] Point de départ de l'échantillon sont tronquées, en quelques millisecondes.clip_end_position_ms
[Long] Point final à partir duquel l'échantillon doit être sont tronquées, en quelques millisecondes.drm_scheme
[Chaîne] Schéma DRM s'il est protégé. Les valeurs valides sontwidevine
,playready
etclearkey
. Les UUID du schéma DRM sont également acceptés.drm_license_uri
[Chaîne] URI du serveur de licences s'il est protégé.drm_force_default_license_uri
[Booléen] Indique s'il faut forcer l'utilisation dedrm_license_uri
pour les demandes de clés incluant leur propre URI de licencedrm_key_request_properties
[Tableau de chaînes] En-têtes de requêtes de clé empaquetés sous la forme nom1, valeur1, nom2, valeur2, etc. s'ils sont protégés.drm_session_for_clear_content
[Booléen] Indique s'il faut associer une session DRM pour effacer les pistes audio et vidéo.drm_multi_session
[Booléen] Active la rotation des clés si elle est protégée.subtitle_uri
[String] URI d'un fichier side-car de sous-titres.subtitle_mime_type
[Chaîne] Type MIME de subtitle_uri (obligatoire si subtitle_uri est défini).subtitle_language
[String] Code de langue BCP47 du fichier de sous-titres (ignoré si subtitle_uri n'est pas défini).ad_tag_uri
[String] URI d'un tag d'emplacement publicitaire à charger à l'aide de la classe [Extension IMA][].prefer_extension_decoders
[Booléen] Indique si les décodeurs d'extension sont à ceux de la plate-forme.
Lorsque vous utilisez adb shell am start
pour déclencher un intent, une chaîne supplémentaire facultative peut
doit être défini sur --es
(par exemple, --es extension mpd
). Un extra booléen facultatif peut
doit être défini sur --ez
(par exemple, --ez prefer_extension_decoders TRUE
). Une option
Le complément long peut être défini avec --el
(par exemple, --el clip_start_position_ms 5000
). Une
L'extra facultatif du tableau de chaînes peut être défini avec --esa
(par exemple,
--esa drm_key_request_properties name1,value1
).
Pour lire une playlist de samples, définissez l'action de l'intent sur
androidx.media3.demo.main.action.VIEW_LIST
Exemple de configuration
les extras restent les mêmes que pour androidx.media3.demo.main.action.VIEW
,
à l'exception de deux différences:
- Les extras les clés doivent comporter un trait de soulignement et l'index en base 0 de l'échantillon
en tant que suffixe. Par exemple,
extension_0
indique le type d'échantillon pour la première échantillon.drm_scheme_1
définit le schéma DRM pour le deuxième échantillon. - L'URI de l'échantillon est transmis en tant qu'élément supplémentaire avec la clé
uri_<sample-index>
.
Les autres extras, qui ne dépendent pas de l'échantillon, ne sont pas modifiés. Par exemple : Vous pouvez exécuter la commande suivante dans le terminal pour lire une playlist avec deux éléments, en remplaçant l'extension du deuxième élément:
adb shell am start -a androidx.media3.demo.main.action.VIEW_LIST \ --es uri_0 https://a.com/sample1.mp4 \ --es uri_1 https://b.com/sample2.fake_mpd \ --es extension_1 mpd