Die Demo-App von ExoPlayer dient hauptsächlich zwei Zwecken:
- Um ein relativ einfaches Beispiel mit vollem Funktionsumfang für die ExoPlayer-Nutzung bereitzustellen. Die Demo-App kann als praktischer Ausgangspunkt für die Entwicklung für Ihre eigene App.
- Um den Test von ExoPlayer zu erleichtern. Mit der Demo-App kannst du die Wiedergabe testen eigenen Content zusätzlich zu den enthaltenen Beispielen.
Auf dieser Seite wird beschrieben, wie Sie die Demo-App abrufen, kompilieren und ausführen. Außerdem wird beschrieben, wie Sie damit Ihre eigenen Medien wiedergeben.
Code abrufen
Den Quellcode für die Haupt-Demo-App findest du im Ordner demos/main
unter
in unserem GitHub-Projekt. Falls noch nicht geschehen, klonen Sie das Projekt in einem
lokales Verzeichnis:
git clone https://github.com/androidx/media.git
Öffnen Sie als Nächstes das Projekt in Android Studio. In der Datei Android-Projektansicht (die relevanten Ordner der Demo-App wurden maximiert):
Kompilieren und ausführen
Wählen Sie zum Kompilieren und Ausführen der Demo-App die Konfiguration demo
aus und führen Sie sie aus in
Android Studio Die Demo-App wird auf einem verbundenen Android-Gerät installiert und ausgeführt.
Wir empfehlen, wenn möglich ein physisches Gerät zu verwenden. Wenn Sie einen Emulator verwenden möchten
lies dir stattdessen den Abschnitt zu Emulatoren unter Unterstützte Geräte durch und achte darauf,
Dein virtuelles Gerät verwendet ein System-Image mit einem API-Level von mindestens 23.
Die Demo-App enthält eine Liste von Beispielen (SampleChooserActivity
). Wird ausgewählt
Bei einem Sample wird eine zweite Aktivität (PlayerActivity
) zur Wiedergabe geöffnet. Die Demo
verfügt über Steuerelemente für die Wiedergabe und eine Funktion zur Titelauswahl. Außerdem werden
Die Dienstprogrammklasse EventLogger
von ExoPlayer, mit der nützliche Informationen zur Fehlerbehebung an
das Systemprotokoll. Diese Protokollierung kann aufgerufen werden (zusammen mit der Protokollierung auf Fehlerebene für
anderen Tags) mit dem Befehl:
adb logcat EventLogger:V *:E
Gebündelte Decoder aktivieren
ExoPlayer bietet eine Reihe von Erweiterungen, die die Verwendung von Software-Bundles ermöglichen Decoder, einschließlich AV1, VP9, Opus, FLAC und FFmpeg (nur Audio). Die Demo-App können so konzipiert werden, dass sie diese Erweiterungen einschließen und verwenden:
- Erstellen Sie alle Erweiterungen, die Sie einbinden möchten. Dies ist ein
manueller Prozess. In der
README.md
-Datei in jeder Erweiterung finden Sie weitere Informationen. Anleitung. In der Ansicht „Build-Varianten“ von Android Studio die Build-Variante für die Demo festlegen Modul in
withDecoderExtensionsDebug
oderwithDecoderExtensionsRelease
als wie in der folgenden Abbildung dargestellt.Kompilieren, installieren und führen Sie die
demo
-Konfiguration wie gewohnt aus.
Standardmäßig wird nur dann ein Erweiterungsdecoder verwendet, wenn ein geeigneter Plattformdecoder verwendet wird. existiert nicht. Es kann festgelegt werden, dass Erweiterungsdecodierer zu bevorzugen, wie in den folgenden Abschnitten beschrieben.
Eigene Inhalte wiedergeben
Du hast mehrere Möglichkeiten, deine eigenen Inhalte in der Demo-App abzuspielen.
1. Assets/media.exolist.json bearbeiten
Die in der Demo-App aufgeführten Beispiele werden von assets/media.exolist.json
geladen.
Durch Bearbeiten dieser JSON-Datei ist es möglich, Beispiele zur Demo hinzuzufügen oder daraus zu entfernen
Das Schema lautet wie folgt, wobei [O] ein optionales Attribut angibt.
[
{
"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
]
Playlists mit Beispielen können mithilfe des Schemas angegeben werden:
[
{
"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
]
Bei Bedarf werden Schlüsselanfrageheader als Objekt angegeben, das einen String enthält. -Attribut für jede Überschrift ein:
"drm_key_request_properties": {
"name1": "value1",
"name2": "value2",
...etc
}
In der Aktivität zur Beispielauswahl enthält das Dreipunkt-Menü Optionen für gibt an, ob Erweiterungsdecoder bevorzugt werden sollen.
Lokale Datei-URIs und beschränkte Speichereinschränkungen
Beim Angeben lokaler Datei-URIs fordert die Demo-App den erforderlichen Speicher an
Zugriffsberechtigungen zum Lesen dieser Dateien. Ab Android 13
Es können beliebige Dateien geladen werden, die nicht zu einer typischen Mediendatei gehören.
Erweiterung (z. B. .mp4
). Wenn Sie eine solche Datei laden müssen,
das spezifische Speicherverzeichnis der Demo-App, für das keine Zugriffsbeschränkungen gelten. Dieses
befindet sich in der Regel hier: /sdcard/Android/data/androidx.media3.demo.main/files
.
2. Externe exolist.json-Datei laden
Die Demo-App kann externe JSON-Dateien mit dem obigen Schema laden
gemäß der *.exolist.json
-Konvention. Wenn Sie zum Beispiel ein
unter https://yourdomain.com/samples.exolist.json
öffnen, können Sie sie im
Demo-App mit:
adb shell am start -a android.intent.action.VIEW \ -d https://yourdomain.com/samples.exolist.json
Klicken auf einen *.exolist.json
-Link (z. B. im Browser oder in einer E-Mail)
-Client) auf einem Gerät, auf dem die Demo-App installiert ist, wird auch in der Demo geöffnet.
Daher bietet das Hosten einer *.exolist.json
-JSON-Datei eine einfache Möglichkeit,
Inhalte in der Demo-App zu verteilen, damit andere diese testen können.
3. Intent auslösen
Intents können verwendet werden, um die Liste der Beispiele zu umgehen und direkt in
Wiedergabe starten. Wenn Sie ein einzelnes Sample wiedergeben möchten, setzen Sie die Aktion des Intents auf
androidx.media3.demo.main.action.VIEW
und der zugehörige Daten-URI in
Hörprobe zu starten. Ein solcher Intent kann mit folgendem Befehl vom Terminal ausgelöst werden:
adb shell am start -a androidx.media3.demo.main.action.VIEW \ -d https://yourdomain.com/sample.mp4
Unterstützte optionale Extras für einen einzelnen Beispiel-Intent:
- Beispiele für Konfigurationsextras:
<ph type="x-smartling-placeholder">
- </ph>
mime_type
[String] Beispiel für einen MIME-Typ-Hinweis. Beispiel:application/dash+xml
für DASH-Inhalte.clip_start_position_ms
[Long] Ein Startpunkt, bis zu dem die Stichprobe erreicht werden soll in Millisekunden.clip_end_position_ms
[Long] Ein Endpunkt, von dem aus die Stichprobe entfernt werden soll in Millisekunden.drm_scheme
[String] DRM-Schema, sofern geschützt. Gültige Werte sindwidevine
,playready
undclearkey
. UUIDs für DRM-Schemas werden ebenfalls akzeptiert.drm_license_uri
[String] URI des Lizenzservers, falls geschützt.drm_force_default_license_uri
[Boolesch] Gibt an, ob die Verwendung von erzwungen werden solldrm_license_uri
für Schlüsselanfragen, die einen eigenen Lizenz-URI enthalten.drm_key_request_properties
[Stringarray] Schlüsselanfrageheader gepackt als Name1, Wert1, Name2, Wert2 usw., wenn geschützt.drm_session_for_clear_content
[Boolesch] Gibt an, ob eine DRM-Sitzung angehängt werden soll Video- und Audiotracks löschen.drm_multi_session
[Boolesch] Aktiviert die Schlüsselrotation, wenn sie geschützt ist.subtitle_uri
[String] Der URI einer Untertitel-Sidecar-Datei.subtitle_mime_type
[String] Der MIME-Typ von subtitle_uri (erforderlich bei subtitle_uri festgelegt ist).subtitle_language
[String] Der BCP47-Sprachcode der Untertiteldatei (wird ignoriert, wenn subtitle_uri nicht festgelegt ist).ad_tag_uri
[String] Der URI eines Anzeigen-Tags, das mit der [IMA-Erweiterung][] an.prefer_extension_decoders
[Boolesch] Gibt an, ob Erweiterungsdecodierer sind bevorzugt werden.
Wenn Sie adb shell am start
zum Auslösen eines Intents verwenden, kann ein optionaler String zusätzlich zu
mit --es
festgelegt werden (z.B. --es extension mpd
. Ein optionales boolesches Extra
mit --ez
festgelegt werden (z.B. --ez prefer_extension_decoders TRUE
. Eine optionale
Long Extra kann mit --el
festgelegt werden (z.B. --el clip_start_position_ms 5000
. Eine
Ein optionales String-Array kann mit --esa
festgelegt werden (z.B.
--esa drm_key_request_properties name1,value1
.
Um eine Playlist mit Samples abzuspielen, setze die Intent-Aktion auf
androidx.media3.demo.main.action.VIEW_LIST
Die Beispielkonfiguration
Extras bleiben dieselben wie für androidx.media3.demo.main.action.VIEW
,
mit Ausnahme von zwei Unterschieden:
- Die Extras Schlüssel sollten einen Unterstrich und den 0-basierten Index der Stichprobe haben.
als Suffix angeben. Beispiel:
extension_0
gibt einen Hinweis auf den Stichprobentyp für den ersten Stichprobe.drm_scheme_1
legt das DRM-Schema für das zweite Beispiel fest. - Der URI des Beispiels wird als Extra mit dem Schlüssel
uri_<sample-index>
übergeben.
Andere Extras, die nicht von Stichproben abhängig sind, ändern sich nicht. Zum Beispiel haben Sie können Sie den folgenden Befehl im Terminal ausführen, um eine Playlist mit zwei Elementen abzuspielen: Überschreiben der Erweiterung des zweiten Elements:
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