Fehlerprotokollierung

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]