Domyślnie ExoPlayer rejestruje tylko błędy. Aby rejestrować zdarzenia z odtwarzacza, EventLogger
. Dodatkowe logowanie, które zapewnia, może być pomocne
zrozumienie działania odtwarzacza, a także debugowanie odtwarzania
problemów. EventLogger
implementuje AnalyticsListener
, więc rejestracja instancji
z ExoPlayer
jest łatwe:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
Najłatwiejszym sposobem sprawdzenia dziennika jest użycie karty logcat w Android Studio. Ty
można wybrać aplikację jako proces możliwy do debugowania przy użyciu nazwy pakietu (
androidx.media3.demo.main
, jeśli używasz aplikacji w wersji demonstracyjnej) i poinformuj kota
aby zalogować tylko dla tej aplikacji, wybierając pokaż tylko wybraną aplikację. Jest
dalej można filtrować logowanie przy użyciu wyrażenia
EventLogger|ExoPlayerImpl
, aby uzyskać dostęp tylko do dzienników z EventLogger
i
odtwarzacza.
Zamiast karty logcat w Android Studio można też używać konsoli. Dla: przykład:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
Informacje o odtwarzaczu
Klasa ExoPlayerImpl
zawiera 2 ważne wiersze dotyczące wersji odtwarzacza:
urządzenie i system operacyjny, na których działa aplikacja, oraz moduły ExoPlayer z
wczytano:
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]
Stan odtwarzania
Zmiany stanu odtwarzacza są rejestrowane w wierszach podobnych do tych:
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]
W tym przykładzie odtwarzanie rozpocznie się 0,93 sekundy po przygotowaniu odtwarzacza. użytkownik wstrzymuje odtwarzanie po 9, 4 sekundy i wznawia odtwarzanie o sekundę później 10,4 sekundy. Odtwarzanie kończy się po 10 sekundach po 20,4 sekundzie. Wspólny elementy w nawiasach kwadratowych to:
[eventTime=float]
: zegar ścienny od momentu utworzenia gracza.[mediaPos=float]
: bieżąca pozycja odtwarzania.[window=int]
: indeks bieżącego okna.[period=int]
: bieżący okres w danym oknie.
Ostatnie elementy w każdym wierszu wskazują wartość zgłaszanego stanu.
Ścieżki multimedialne
Informacje o utworze są rejestrowane po zmianie dostępnych lub wybranych ścieżek. Ten co najmniej raz na początku odtwarzania. Przykład poniżej pokazuje utwór logowanie dla strumienia adaptacyjnego:
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: ]
W tym przykładzie odtwarzacz wybrał cztery z pięciu dostępnych filmów.
ścieżek audio. Piąta ścieżka wideo nie została wybrana, ponieważ przekracza ona
możliwości urządzenia, co wskazuje supported=NO_EXCEEDS_CAPABILITIES
.
Podczas odtwarzania odtwarzacz dostosuje się do wybranej ścieżki wideo. Kiedy
odtwarzacz zmienia ścieżkę od jednego utworu do drugiej, zapisuje się w wierszu,
poniżej:
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]
Ten wiersz dziennika wskazuje, że odtwarzacz przełączył się na film w rozdzielczości 640 x 360. śledzić trzy sekundy w multimediach.
Wybór dekodera
W większości przypadków ExoPlayer renderuje multimedia, używając MediaCodec
pobranego z
bazowej platformy. Przy inicjowaniu dekodera dane te są rejestrowane w wierszach takich jak
te:
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]