Standardmäßig protokolliert ExoPlayer nur Fehler. Um Spielerereignisse zu protokollieren, muss der EventLogger
-Klasse verwendet werden. Die zusätzliche Protokollierung, die es bietet, kann für
Verstehen der Aktionen des Players und zur Fehlerbehebung bei der Wiedergabe
Probleme. EventLogger
implementiert AnalyticsListener
, sodass beim Registrieren einer Instanz
mit ExoPlayer
ist ganz einfach:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
Am einfachsten können Sie sich das Protokoll mit dem Logcat-Tab in Android Studio ansehen. Ich
können Sie Ihre App anhand des Paketnamens als Debug-fähiger Prozess auswählen (
androidx.media3.demo.main
bei Verwendung der Demo-App) und teile den Logcat mit.
Tab, um nur für diese App zu protokollieren. Wähle dazu Nur ausgewählte App anzeigen aus. Es ist
möglich, das Logging mit dem Ausdruck
EventLogger|ExoPlayerImpl
, um nur Logging von EventLogger
und dem
Player selbst.
Eine Alternative zur Verwendung des logcat-Tabs von Android Studio ist die Verwendung der Konsole. Für Beispiel:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Spielerinformationen
Die Klasse ExoPlayerImpl
liefert zwei wichtige Zeilen zur Player-Version:
das Gerät und das Betriebssystem, auf dem die App läuft, sowie die Module von ExoPlayer, die
geladen:
ExoPlayerImpl: Init 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33]
ExoPlayerImpl: Release 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33] [media3.common, media3.datasource, media3.ui, media3.exoplayer, media3.decoder, media3.exoplayer.dash, media3.extractor]
Wiedergabestatus
Änderungen des Player-Status werden in Zeilen wie den folgenden protokolliert:
EventLogger: playWhenReady [eventTime=0.00, mediaPos=0.00, window=0, true, USER_REQUEST]
EventLogger: state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
EventLogger: state [eventTime=0.93, mediaPos=0.00, window=0, period=0, READY]
EventLogger: isPlaying [eventTime=0.93, mediaPos=0.00, window=0, period=0, true]
EventLogger: playWhenReady [eventTime=9.40, mediaPos=8.40, window=0, period=0, false, USER_REQUEST]
EventLogger: isPlaying [eventTime=9.40, mediaPos=8.40, window=0, period=0, false]
EventLogger: playWhenReady [eventTime=10.40, mediaPos=8.40, window=0, period=0, true, USER_REQUEST]
EventLogger: isPlaying [eventTime=10.40, mediaPos=8.40, window=0, period=0, true]
EventLogger: state [eventTime=20.40, mediaPos=18.40, window=0, period=0, ENDED]
EventLogger: isPlaying [eventTime=20.40, mediaPos=18.40, window=0, period=0, false]
In diesem Beispiel beginnt die Wiedergabe 0,93 Sekunden, nachdem der Player vorbereitet wurde. Die Nutzer pausiert die Wiedergabe nach 9, 4 Sekunden und setzt sie eine Sekunde später fort 10,4 Sekunden Die Wiedergabe endet zehn Sekunden später nach 20,4 Sekunden. Der allgemeine innerhalb der eckigen Klammern stehen folgende Elemente zur Verfügung:
[eventTime=float]
: die tatsächlich verstrichene Zeit seit der Erstellung des Spielers.[mediaPos=float]
: Die aktuelle Wiedergabeposition.[window=int]
: Der aktuelle Fensterindex.[period=int]
: Der aktuelle Zeitraum in diesem Fenster.
Die letzten Elemente in jeder Zeile geben den Wert des gemeldeten Bundesstaates an.
Medien-Tracks
Titelinformationen werden protokolliert, wenn sich die verfügbaren oder ausgewählten Titel ändern. Dieses passiert mindestens einmal zu Beginn der Wiedergabe. Das Beispiel unten zeigt den Track Logging für einen adaptiven Stream:
EventLogger: tracks [eventTime=0.30, mediaPos=0.00, window=0, period=0,
EventLogger: group [
EventLogger: [X] Track:0, id=133, mimeType=video/avc, bitrate=261112, codecs=avc1.4d4015, res=426x240, fps=30.0, supported=YES
EventLogger: [X] Track:1, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0, supported=YES
EventLogger: [X] Track:2, id=135, mimeType=video/avc, bitrate=1204535, codecs=avc1.4d401f, res=854x480, fps=30.0, supported=YES
EventLogger: [X] Track:3, id=160, mimeType=video/avc, bitrate=112329, codecs=avc1.4d400c, res=256x144, fps=30.0, supported=YES
EventLogger: [ ] Track:4, id=136, mimeType=video/avc, bitrate=2400538, codecs=avc1.4d401f, res=1280x720, fps=30.0, supported=NO_EXCEEDS_CAPABILITIES
EventLogger: ]
EventLogger: group [
EventLogger: [ ] Track:0, id=139, mimeType=audio/mp4a-latm, bitrate=48582, codecs=mp4a.40.5, channels=2, sample_rate=22050, supported=YES
EventLogger: [X] Track:1, id=140, mimeType=audio/mp4a-latm, bitrate=127868, codecs=mp4a.40.2, channels=2, sample_rate=44100, supported=YES
EventLogger: ]
EventLogger: ]
In diesem Beispiel hat der Player vier der fünf verfügbaren Videos
Titel. Der fünfte Videotrack wurde nicht ausgewählt, da er die
Funktionen des Geräts, wie von supported=NO_EXCEEDS_CAPABILITIES
angegeben.
Der Player passt sich während der Wiedergabe zwischen den ausgewählten Videotracks an. Wann?
passt sich der Player von einer Spur zum anderen an, wird dies in einer Zeile wie dieser protokolliert.
unten:
EventLogger: downstreamFormat [eventTime=3.64, mediaPos=3.00, window=0, period=0, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0]
Diese Protokollzeile zeigt an, dass der Player zur Videoauflösung von 640 x 360 gewechselt ist. drei Sekunden lang abgespielt wurde.
Decoderauswahl
In den meisten Fällen rendert ExoPlayer Medien mit einer MediaCodec
, die vom
zugrunde liegende Plattform. Wenn ein Decoder initialisiert wird, wird dies in Zeilen wie
diese:
EventLogger: videoDecoderInitialized [0.77, 0.00, window=0, period=0, video, OMX.qcom.video.decoder.avc]
EventLogger: audioDecoderInitialized [0.79, 0.00, window=0, period=0, audio, OMX.google.aac.decoder]