디버그 로깅

기본적으로 ExoPlayer는 오류만 로깅합니다. 플레이어 이벤트를 기록하려면 EventLogger 클래스를 사용할 수 있습니다. 제공하는 추가 로깅은 플레이어가 무엇을 하고 있는지 이해하고 재생을 디버깅하기 위해 있습니다 EventLoggerAnalyticsListener를 구현하므로 인스턴스를 등록하는 중 ExoPlayer를 사용하면 간단합니다.

Kotlin

player.addAnalyticsListener(EventLogger())

자바

player.addAnalyticsListener(new EventLogger());

로그를 관찰하는 가장 쉬운 방법은 Android 스튜디오의 logcat 탭을 사용하는 것입니다. 나 패키지 이름 ( androidx.media3.demo.main)하고 logcat에 알립니다. 탭에서 선택한 애플리케이션만 표시를 선택하여 해당 앱에 대해서만 로깅합니다. 그것은 표현식의 일부로 로깅을 추가로 필터링할 수 있음 EventLogger|ExoPlayerImpl: EventLogger 및 있습니다.

Android 스튜디오의 logcat 탭을 사용하는 대신 콘솔을 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

adb logcat EventLogger:* ExoPlayerImpl:* *:s

플레이어 정보

ExoPlayerImpl 클래스는 플레이어 버전에 관한 두 가지 중요한 줄을 제공합니다. 앱이 실행되는 기기와 OS, 앱이 실행 중인 ExoPlayer의 모듈 로드된 경우:

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]

재생 상태

플레이어 상태 변경사항은 다음과 같은 행에 기록됩니다.

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]

이 예에서는 플레이어가 준비되고 0.93초 후에 재생이 시작됩니다. 이 사용자가 9.4초 후에 재생을 일시중지하고 1초 후 10.4초 재생이 10초 후 20.4초에서 종료됩니다. 일반적인 대괄호 안의 요소는 다음과 같습니다.

  • [eventTime=float]: 플레이어 생성 이후 경과된 실제 시간입니다.
  • [mediaPos=float]: 현재 재생 위치입니다.
  • [window=int]: 현재 창 색인
  • [period=int]: 해당 기간의 현재 기간입니다.

각 행의 마지막 요소는 보고되는 상태의 값을 나타냅니다.

미디어 트랙

이용 가능하거나 선택한 트랙이 변경되면 트랙 정보가 기록됩니다. 이 최소 한 번 발생하는 경우 발생합니다 아래 예는 적응형 스트림에 관한 로깅:

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: ]

이 예에서 플레이어는 사용 가능한 동영상 5개 중 4개를 있습니다. 다섯 번째 동영상 트랙은 기기의 성능(supported=NO_EXCEEDS_CAPABILITIES로 표시)을 지정합니다. 재생 중에 선택한 동영상 트랙 간에 플레이어가 조정됩니다. 날짜 플레이어는 한 트랙에서 다른 트랙으로 각색되는 경우 트랙과 같이 아래:

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]

이 로그 행은 플레이어가 640x360 해상도 동영상으로 전환되었음을 나타냅니다. 미디어에 3초 동안 삽입했습니다.

디코더 선택

대부분의 경우 ExoPlayer는 MediaCodec 기본 플랫폼에서 사용할 수 있습니다 디코더가 초기화되면 다음과 같습니다.

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]