Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Audio stutters on Samsung Galaxy A31 with audioTrackUnderrun error #300

Open
1 task done
riteshram opened this issue Apr 6, 2023 · 9 comments
Open
1 task done

Comments

@riteshram
Copy link

riteshram commented Apr 6, 2023

Media3 Version

ExoPlayer 2.18.2

Devices that reproduce the issue

Samsung Galaxy A31 running on version 12

Build Number : A315FXXU2DWB3
Android version : S(Android 12)
Release Date : 2023-03-14
Security patch level : 2023-02-01

Devices that do not reproduce the issue

Not seen this issue on other devices also on same device running android version 10 & 11.

Reproducible in the demo app?

Yes

Reproduction steps

  • Play our stream the details of which will be sent through email
  • Checked on ExoPlayer versions 2.18.0, 2.18.2 & even 2.18.5

Expected result

Media playback should happen without audio stuttering

Actual result

Media playback audio stutters with audioTrackUnderrun events being reported.

audioTrackUnderrun [eventTime=10.41, mediaPos=7.94, window=0, period=0, 120832, 684, 64]

2023-04-06 16:34:44.596 exoplayer2.dem           W  Accessing hidden method Landroid/media/AudioTrack;->getLatency()I (unsupported, reflection, allowed)
2023-04-06 16:34:44.653 EventLogger              D  playWhenReady [eventTime=0.00, mediaPos=0.00, window=0, true, USER_REQUEST]
2023-04-06 16:34:44.656 EventLogger              D  surfaceSize [eventTime=0.00, mediaPos=0.00, window=0, 0, 0]
2023-04-06 16:34:44.672 EventLogger              D  timeline [eventTime=0.02, mediaPos=0.00, window=0, periodCount=1, windowCount=1, reason=PLAYLIST_CHANGED
2023-04-06 16:34:44.672 EventLogger              D    period [?]
2023-04-06 16:34:44.672 EventLogger              D    window [?, seekable=false, dynamic=true]
2023-04-06 16:34:44.672 EventLogger              D  ]
2023-04-06 16:34:44.673 EventLogger              D  mediaItem [eventTime=0.02, mediaPos=0.00, window=0, reason=PLAYLIST_CHANGED]
2023-04-06 16:34:44.678 EventLogger              D  state [eventTime=0.03, mediaPos=0.00, window=0, BUFFERING]
2023-04-06 16:34:44.691 DecorView                I  notifyKeepScreenOnChanged: keepScreenOn=true
2023-04-06 16:34:44.696 ViewRootIm...rActivity]  I  setView = com.android.internal.policy.DecorView@3c741b TM=true
2023-04-06 16:34:44.702 SurfaceView@4012db0      I  onWindowVisibilityChanged(0) true android.view.SurfaceView{4012db0 V.E...... ......I. 0,0-0,0} of ViewRootImpl@c32be00[PlayerActivity]
2023-04-06 16:34:44.710 BufferQueueDebug         E  [com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity$_28253#0](this:0xb400007ed064e948,id:-1,api:0,p:-1,c:-1) id info cannot be read from 'com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity$_28253#0'
2023-04-06 16:34:44.721 BufferQueueConsumer      I  [](id:6e5d00000001,api:0,p:-1,c:28253) connect: controlledByApp=false
2023-04-06 16:34:44.722 BLASTBufferQueue         I  [ViewRootImpl@c32be00[PlayerActivity]#1] constructor()
2023-04-06 16:34:44.723 ViewRootIm...rActivity]  I  Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)0 dur=12 res=0x7 s={true 506830372864} ch=true fn=-1
2023-04-06 16:34:44.723 BufferQueueProducer      I  [ViewRootImpl@c32be00[PlayerActivity]#1(BLAST Consumer)1](id:6e5d00000001,api:1,p:28253,c:28253) connect: api=1 producerControlledByApp=true
2023-04-06 16:34:44.724 OpenGLRenderer           D  eglCreateWindowSurface
2023-04-06 16:34:44.725 SurfaceView@4012db0      I  windowStopped(false) true android.view.SurfaceView{4012db0 V.E...... ......ID 0,0-1080,2195} of ViewRootImpl@c32be00[PlayerActivity]
2023-04-06 16:34:44.726 ViewRootIm...rActivity]  I  [DP] dp(1) 1 android.view.ViewRootImpl.reportNextDraw:11420 android.view.ViewRootImpl.performTraversals:4193 android.view.ViewRootImpl.doTraversal:2919 
2023-04-06 16:34:44.728 BufferQueueDebug         E  [SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0(BLAST)#0](this:0xb400007ed058a948,id:-1,api:0,p:-1,c:-1) id info cannot be read from 'SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0(BLAST)#0'
2023-04-06 16:34:44.730 BufferQueueConsumer      I  [](id:6e5d00000002,api:0,p:-1,c:28253) connect: controlledByApp=false
2023-04-06 16:34:44.730 BLASTBufferQueue         I  [SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0#2] constructor()
2023-04-06 16:34:44.731 SurfaceView@4012db0      I  pST: sr = Rect(0, 79 - 1080, 2274) sw = 1080 sh = 2195
2023-04-06 16:34:44.731 SurfaceView@4012db0      I  onSSPAndSRT: pl = 0 pt = 79 sx = 1.0 sy = 1.0
2023-04-06 16:34:44.731 SurfaceView@4012db0      I  pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@931dcf5
2023-04-06 16:34:44.732 SurfaceView@4012db0      I  updateSurface: mVisible = true mSurface.isValid() = true
2023-04-06 16:34:44.732 SurfaceView@4012db0      I  updateSurface: mSurfaceCreated = false surfaceChanged = true visibleChanged = true
2023-04-06 16:34:44.732 SurfaceView@4012db0      I  surfaceCreated 1 #8 android.view.SurfaceView{4012db0 V.E...... ......ID 0,0-1080,2195}
2023-04-06 16:34:44.732 SurfaceView@4012db0      I  surfaceChanged (1080,2195) 1 #8 android.view.SurfaceView{4012db0 V.E...... ......ID 0,0-1080,2195}
2023-04-06 16:34:44.733 EventLogger              D  surfaceSize [eventTime=0.08, mediaPos=0.00, window=0, 1080, 2195]
2023-04-06 16:34:44.733 ViewRootIm...rActivity]  I  [DP] dp(2) 1 android.view.SurfaceView.updateSurface:1375 android.view.SurfaceView.lambda$new$1$SurfaceView:254 android.view.SurfaceView$$ExternalSyntheticLambda2.onPreDraw:2 
2023-04-06 16:34:44.733 ViewRootIm...rActivity]  I  [DP] pdf(1) 1 android.view.SurfaceView.notifyDrawFinished:599 android.view.SurfaceView.performDrawFinished:586 android.view.SurfaceView.$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY:0 
2023-04-06 16:34:44.733 ViewRootIm...rActivity]  D  pendingDrawFinished. Waiting on draw reported mDrawsNeededToReport=1
2023-04-06 16:34:44.733 ViewRootIm...rActivity]  D  Creating frameDrawingCallback nextDrawUseBlastSync=false reportNextDraw=true hasBlurUpdates=false
2023-04-06 16:34:44.733 ViewRootIm...rActivity]  D  Creating frameCompleteCallback
2023-04-06 16:34:44.736 SurfaceView@4012db0      I  uSP: rtp = Rect(0, 79 - 1080, 2274) rtsw = 1080 rtsh = 2195
2023-04-06 16:34:44.736 SurfaceView@4012db0      I  onSSPAndSRT: pl = 0 pt = 79 sx = 1.0 sy = 1.0
2023-04-06 16:34:44.737 SurfaceView@4012db0      I  aOrMT: uB = true t = android.view.SurfaceControl$Transaction@60bea8a fN = 1 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:319 
2023-04-06 16:34:44.737 SurfaceView@4012db0      I  aOrMT: vR.mWNT, vR = ViewRootImpl@c32be00[PlayerActivity]
2023-04-06 16:34:44.737 ViewRootIm...rActivity]  I  mWNT: t = android.view.SurfaceControl$Transaction@60bea8a fN = 1 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 
2023-04-06 16:34:44.737 ViewRootIm...rActivity]  I  mWNT: merge t to BBQ
2023-04-06 16:34:44.737 ViewRootIm...rActivity]  D  Received frameDrawingCallback frameNum=1. Creating transactionCompleteCallback=false
2023-04-06 16:34:44.744 ViewRootIm...rActivity]  D  Received frameCompleteCallback  lastAcquiredFrameNum=1 lastAttemptedDrawFrameNum=1
2023-04-06 16:34:44.745 ViewRootIm...rActivity]  I  [DP] pdf(0) 1 android.view.ViewRootImpl.lambda$addFrameCompleteCallbackIfNeeded$3$ViewRootImpl:4995 android.view.ViewRootImpl$$ExternalSyntheticLambda16.run:6 android.os.Handler.handleCallback:938 
2023-04-06 16:34:44.745 ViewRootIm...rActivity]  I  [DP] rdf()
2023-04-06 16:34:44.745 ViewRootIm...rActivity]  D  reportDrawFinished (fn: -1) 
2023-04-06 16:34:44.750 EventLogger              D  loading [eventTime=0.10, mediaPos=0.00, window=0, period=0, true]
2023-04-06 16:34:44.751 ViewRootIm...rActivity]  I  MSG_WINDOW_FOCUS_CHANGED 0 1
2023-04-06 16:34:44.753 InsetsSourceConsumer     D  ensureControlAlpha: for ITYPE_NAVIGATION_BAR on com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity
2023-04-06 16:34:44.754 InsetsSourceConsumer     D  ensureControlAlpha: for ITYPE_STATUS_BAR on com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity
2023-04-06 16:34:44.768 ViewRootIm...rActivity]  I  MSG_WINDOW_FOCUS_CHANGED 1 1
2023-04-06 16:34:44.772 InputMethodManager       D  startInputInner - Id : 0
2023-04-06 16:34:44.772 InputMethodManager       I  startInputInner - mService.startInputOrWindowGainedFocus
2023-04-06 16:34:45.096 EventLogger              D  timeline [eventTime=0.44, mediaPos=0.00, window=0, period=0, periodCount=1, windowCount=1, reason=SOURCE_UPDATE
2023-04-06 16:34:45.096 EventLogger              D    period [1360.92]
2023-04-06 16:34:45.096 EventLogger              D    window [1360.90, seekable=true, dynamic=false]
2023-04-06 16:34:45.096 EventLogger              D  ]
2023-04-06 16:34:45.107 AudioCapabilities        W  Unsupported mime audio/x-ima
2023-04-06 16:34:45.108 AudioCapabilities        W  Unsupported mime audio/mpeg-L1
2023-04-06 16:34:45.108 AudioCapabilities        W  Unsupported mime audio/mpeg-L2
2023-04-06 16:34:45.109 VideoCapabilities        W  Unsupported mime video/mp43
2023-04-06 16:34:45.109 VideoCapabilities        W  Unsupported mime video/wvc1
2023-04-06 16:34:45.110 VideoCapabilities        W  Unsupported mime video/x-ms-wmv
2023-04-06 16:34:45.110 AudioCapabilities        W  Unsupported mime audio/x-ms-wma
2023-04-06 16:34:45.111 VideoCapabilities        W  Unsupported mime video/x-ms-wmv7
2023-04-06 16:34:45.111 VideoCapabilities        W  Unsupported mime video/x-ms-wmv8
2023-04-06 16:34:45.112 AudioCapabilities        W  Unsupported mime audio/x-adpcm-dvi-ima
2023-04-06 16:34:45.113 AudioCapabilities        W  Unsupported mime audio/x-adpcm-dvi-ima
2023-04-06 16:34:45.113 AudioCapabilities        W  Unsupported mime audio/x-adpcm-ms
2023-04-06 16:34:45.113 AudioCapabilities        W  Unsupported mime audio/x-adpcm-ms
2023-04-06 16:34:45.127 VideoCapabilities        W  Unsupported mime video/avc-wfd
2023-04-06 16:34:45.151 ViewRootIm...rActivity]  I  handleAppVisibility mAppVisible=true visible=false
2023-04-06 16:34:45.168 OpenGLRenderer           D  setSurface called with nullptr
2023-04-06 16:34:45.168 OpenGLRenderer           D  setSurface() destroyed EGLSurface
2023-04-06 16:34:45.168 OpenGLRenderer           D  destroyEglSurface
2023-04-06 16:34:45.170 BufferQueueProducer      I  [ViewRootImpl@9fb2609[SampleChooserActivity]#0(BLAST Consumer)0](id:6e5d00000000,api:1,p:28253,c:28253) disconnect: api 1
2023-04-06 16:34:45.178 BLASTBufferQueue         I  [ViewRootImpl@9fb2609[SampleChooserActivity]#0] destructor()
2023-04-06 16:34:45.178 BufferQueueConsumer      I  [ViewRootImpl@9fb2609[SampleChooserActivity]#0(BLAST Consumer)0](id:6e5d00000000,api:0,p:-1,c:28253) disconnect
2023-04-06 16:34:45.179 ViewRootIm...rActivity]  I  Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)8 dur=5 res=0x5 s={false 0} ch=true fn=27
2023-04-06 16:34:45.180 ViewRootIm...rActivity]  I  stopped(true) old=false
2023-04-06 16:34:45.184 EventLogger              D  videoEnabled [eventTime=0.53, mediaPos=0.00, window=0, period=0]
2023-04-06 16:34:45.186 EventLogger              D  audioEnabled [eventTime=0.53, mediaPos=0.00, window=0, period=0]
2023-04-06 16:34:45.188 EventLogger              D  tracks [eventTime=0.54, mediaPos=0.00, window=0, period=0
2023-04-06 16:34:45.188 EventLogger              D    group [
2023-04-06 16:34:45.189 EventLogger              D      [X] Track:0, id=1, mimeType=video/avc, bitrate=2400000, codecs=avc1.4d4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0, supported=YES
2023-04-06 16:34:45.189 EventLogger              D      [X] Track:1, id=2, mimeType=video/avc, bitrate=1800000, codecs=avc1.4d4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0, supported=YES
2023-04-06 16:34:45.189 EventLogger              D      [X] Track:2, id=3, mimeType=video/avc, bitrate=1350000, codecs=avc1.4d4029, drm=[playready,widevine,cenc], res=1024x576, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:3, id=4, mimeType=video/avc, bitrate=1100000, codecs=avc1.4d401f, drm=[playready,widevine,cenc], res=854x480, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:4, id=5, mimeType=video/avc, bitrate=600000, codecs=avc1.4d401f, drm=[playready,widevine,cenc], res=640x360, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:5, id=6, mimeType=video/avc, bitrate=360000, codecs=avc1.4d401f, drm=[playready,widevine,cenc], res=428x240, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:6, id=7, mimeType=video/avc, bitrate=216000, codecs=avc1.4d401f, drm=[playready,widevine,cenc], res=256x144, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:7, id=8, mimeType=video/avc, bitrate=117000, codecs=avc1.4d401f, drm=[playready,widevine,cenc], res=170x96, fps=25.0, supported=YES
2023-04-06 16:34:45.190 EventLogger              D    ]
2023-04-06 16:34:45.190 EventLogger              D    group [
2023-04-06 16:34:45.190 EventLogger              D      [X] Track:0, id=9, mimeType=audio/mp4a-latm, bitrate=128000, codecs=mp4a.40.2, drm=[playready,widevine,cenc], channels=2, sample_rate=44100, language=hi, label=Hindi, supported=YES
2023-04-06 16:34:45.190 EventLogger              D    ]
2023-04-06 16:34:45.190 EventLogger              D  ]
2023-04-06 16:34:45.205 ViewRootIm...rActivity]  I  Relayout returned: old=(0,0,1080,2400) new=(0,0,1080,2400) req=(1080,2400)8 dur=4 res=0x5 s={false 0} ch=false fn=-1
2023-04-06 16:34:45.207 WindowManager            E  win=Window{75f80f u0 com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.SampleChooserActivity} destroySurfaces: appStopped=true win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=8 caller=com.android.server.wm.ActivityRecord.destroySurfaces:5877 com.android.server.wm.ActivityRecord.destroySurfaces:5858 com.android.server.wm.ActivityRecord.notifyAppStopped:5922 com.android.server.wm.ActivityRecord.activityStopped:6564 com.android.server.wm.ActivityClientController.activityStopped:254 android.app.IActivityClientController$Stub.onTransact:596 com.android.server.wm.ActivityClientController.onTransact:130 
2023-04-06 16:34:45.316 EventLogger              D  downstreamFormat [eventTime=0.66, mediaPos=0.00, window=0, period=0, id=2, mimeType=video/avc, bitrate=1800000, codecs=avc1.4d4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0]
2023-04-06 16:34:45.345 EventLogger              D  drmSessionAcquired [eventTime=0.69, mediaPos=0.00, window=0, period=0, state=3]
2023-04-06 16:34:45.447 CryptoHal                D  found drm@1.0 ICryptoFactory clearkey
2023-04-06 16:34:45.449 CryptoHal                D  found drm@1.0 ICryptoFactory widevine
2023-04-06 16:34:45.451 CryptoHal                D  found drm@1.1 ICryptoFactory clearkey
2023-04-06 16:34:45.453 CryptoHal                D  found drm@1.1 ICryptoFactory widevine
2023-04-06 16:34:45.459 DMCodecAdapterFactory    I  Creating an asynchronous MediaCodec adapter for track type video
2023-04-06 16:34:45.463 CCodec                   I  state->set(ALLOCATING)
2023-04-06 16:34:45.463 CCodec                   I  allocate(c2.mtk.avc.decoder.secure)
2023-04-06 16:34:45.465 Codec2Client             I  Available Codec2 services: "default" "default0" "software"
2023-04-06 16:34:45.468 CCodec                   I  setting up 'default' as default (vendor) store
2023-04-06 16:34:45.483 CCodec                   I  Created component [c2.mtk.avc.decoder.secure]
2023-04-06 16:34:45.483 CCodec                   I  state->set(ALLOCATED)
2023-04-06 16:34:45.483 CCodecConfig             D  read media type: video/avc
2023-04-06 16:34:45.487 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.max-count.values
2023-04-06 16:34:45.487 ReflectedParamUpdater    D  extent() != 1 for single value type: output.subscribed-indices.values
2023-04-06 16:34:45.487 ReflectedParamUpdater    D  extent() != 1 for single value type: input.buffers.allocator-ids.values
2023-04-06 16:34:45.488 ReflectedParamUpdater    D  extent() != 1 for single value type: output.buffers.allocator-ids.values
2023-04-06 16:34:45.488 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.allocator-ids.values
2023-04-06 16:34:45.488 ReflectedParamUpdater    D  extent() != 1 for single value type: output.buffers.pool-ids.values
2023-04-06 16:34:45.488 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.pool-ids.values
2023-04-06 16:34:45.491 ReflectedParamUpdater    D  ignored struct field coded.color-format.locations
2023-04-06 16:34:45.495 CCodecConfig             D  ignoring local param raw.size (0xd2001800) as it is already supported
2023-04-06 16:34:45.495 CCodecConfig             D  ignoring local param raw.crop (0xd2001801) as it is already supported
2023-04-06 16:34:45.495 CCodecConfig             D  ignoring local param default.color (0x5200180b) as it is already supported
2023-04-06 16:34:45.495 CCodecConfig             D  ignoring local param raw.hdr-static-info (0xd200180a) as it is already supported
2023-04-06 16:34:45.496 CCodecConfig             I  query failed after returning 18 values (BAD_INDEX)
2023-04-06 16:34:45.497 CCodecConfig             D  c2 config diff is Dict {
                                                      c2::i32 algo.priority.value = 1
                                                      c2::float algo.rate.value = 0
                                                      c2::u32 algo.secure-mode.value = 1
                                                      c2::float coded.frame-rate.value = 30
                                                      c2::u32 coded.pl.level = 20495
                                                      c2::u32 coded.pl.profile = 20481
                                                      c2::u32 coded.vui.color.matrix = 0
                                                      c2::u32 coded.vui.color.primaries = 0
                                                      c2::u32 coded.vui.color.range = 2
                                                      c2::u32 coded.vui.color.transfer = 0
                                                      c2::u32 default.color.matrix = 0
                                                      c2::u32 default.color.primaries = 0
                                                      c2::u32 default.color.range = 0
                                                      c2::u32 default.color.transfer = 0
                                                      c2::u32 input.buffers.max-size.value = 2097152
                                                      c2::u32 input.delay.value = 4
                                                      string input.media-type.value = "video/avc"
                                                      c2::u32 output.delay.value = 12
                                                      string output.media-type.value = "video/raw"
                                                      c2::u32 raw.color.matrix = 0
                                                      c2::u32 raw.color.primaries = 0
                                                      c2::u32 raw.color.range = 2
                                                      c2::u32 raw.color.transfer = 0
                                                      c2::u32 raw.crop.height = 239
                                                      c2::u32 raw.crop.left = 0
                                                      c2::u32 raw.crop.top = 0
                                                      c2::u32 raw.crop.width = 319
                                                      c2::float raw.hdr-static-info.maste
2023-04-06 16:34:45.497 ColorUtils               W  expected specified color aspects (2:0:0:0)
2023-04-06 16:34:45.505 MediaCodec               I  MediaCodec will operate in async mode
2023-04-06 16:34:45.506 MediaCodec               D  flushMediametrics
2023-04-06 16:34:45.507 SurfaceUtils             D  connecting to surface 0x75f5175010, reason connectToSurface
2023-04-06 16:34:45.507 BufferQueueProducer      I  [SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0#2(BLAST Consumer)2](id:6e5d00000002,api:3,p:28253,c:28253) connect: api=3 producerControlledByApp=true
2023-04-06 16:34:45.507 MediaCodec               I  [c2.mtk.avc.decoder.secure] setting surface generation to 28931073
2023-04-06 16:34:45.507 SurfaceUtils             D  disconnecting from surface 0x75f5175010, reason connectToSurface(reconnect)
2023-04-06 16:34:45.507 BufferQueueProducer      I  [SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0#2(BLAST Consumer)2](id:6e5d00000002,api:3,p:28253,c:28253) disconnect: api 3
2023-04-06 16:34:45.507 SurfaceUtils             D  connecting to surface 0x75f5175010, reason connectToSurface(reconnect)
2023-04-06 16:34:45.507 BufferQueueProducer      I  [SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0#2(BLAST Consumer)2](id:6e5d00000002,api:3,p:28253,c:28253) connect: api=3 producerControlledByApp=true
2023-04-06 16:34:45.507 CCodec                   D  [c2.mtk.avc.decoder.secure] buffers are bound to CCodec for this session
2023-04-06 16:34:45.508 CCodec                   I  appPid(28253) width(1280) height(720)
2023-04-06 16:34:45.509 CCodec                   I  VideoController::setValues() isSet [0]
2023-04-06 16:34:45.509 CCodec                   I  set values for [MT6768]
2023-04-06 16:34:45.509 CCodecConfig             D  no c2 equivalents for csd-1
2023-04-06 16:34:45.509 CCodecConfig             D  no c2 equivalents for log-session-id
2023-04-06 16:34:45.510 CCodecConfig             D  no c2 equivalents for native-window
2023-04-06 16:34:45.510 CCodecConfig             D  no c2 equivalents for flags
2023-04-06 16:34:45.511 CCodecConfig             D  c2 config diff is   c2::i32 algo.priority.value = 0
                                                      c2::float coded.frame-rate.value = 25
                                                      c2::u32 raw.max-size.height = 720
                                                      c2::u32 raw.max-size.width = 1280
                                                      c2::u32 raw.pixel-format.value = 34
                                                      c2::u32 raw.size.height = 720
                                                      c2::u32 raw.size.width = 1280
2023-04-06 16:34:45.512 Codec2Client             W  query -- param skipped: index = 1107298332.
2023-04-06 16:34:45.512 CCodec                   D  client requested max input size 691200, which is smaller than what component recommended (2097152); overriding with component recommendation.
2023-04-06 16:34:45.512 CCodec                   W  This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
2023-04-06 16:34:45.512 CCodec                   D  setup formats input: AMessage(what = 0x00000000) = {
                                                      string mime = "video/avc"
                                                      int32_t width = 1280
                                                      int32_t profile = 65536
                                                      int32_t priority = 0
                                                      int32_t feature-secure-playback = 1
                                                      int32_t frame-rate = 25
                                                      int32_t height = 720
                                                      int32_t level = 32768
                                                      int32_t max-input-size = 2097152
                                                      Rect crop(0, 0, 318, 238)
                                                    }
2023-04-06 16:34:45.512 CCodec                   D  setup formats output: AMessage(what = 0x00000000) = {
                                                      int32_t android._color-format = 2130708361
                                                      int32_t android._video-scaling = 1
                                                      int32_t sar-width = 1
                                                      int32_t color-standard = 4
                                                      int32_t color-range = 2
                                                      int32_t color-transfer = 3
                                                      int32_t android._dataspace = 259
                                                      int32_t width = 1280
                                                      int32_t rotation-degrees = 0
                                                      int32_t sar-height = 1
                                                      int32_t max-width = 1280
                                                      int32_t max-height = 720
                                                      int32_t priority = 0
                                                      string mime = "video/raw"
                                                      Rect crop(0, 0, 318, 238)
                                                      Buffer hdr-static-info = {
                                                        00000000:  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
                                                        00000010:  00 00 00 00 00 00 00 00  00                       .........
                                                      }
                                                      int32_t feature-secure-playback = 1
                                                      int32_t frame-rate = 25
                                                      int32_t height = 720
                                                      int32_t color-format = 2130708361
                                                    }
2023-04-06 16:34:45.513 CCodecConfig             I  query failed after returning 18 values (BAD_INDEX)
2023-04-06 16:34:45.514 MediaCodec               D  keep callback message for reclaim
2023-04-06 16:34:45.515 CCodec                   I  state->set(STARTING)
2023-04-06 16:34:45.517 Codec2Client             W  query -- param skipped: index = 1342179345.
2023-04-06 16:34:45.517 Codec2Client             W  query -- param skipped: index = 2415921170.
2023-04-06 16:34:45.517 Codec2Client             W  query -- param skipped: index = 1610614798.
2023-04-06 16:34:45.518 C2Store                  D  Using ION
2023-04-06 16:34:45.519 CCodecBufferChannel      D  [c2.mtk.avc.decoder.secure#555] Created input block pool with allocatorID 16 => poolID 17 - OK (0)
2023-04-06 16:34:45.520 ion                      E  ioctl c0044901 failed with code -1: Invalid argument
2023-04-06 16:34:45.549 CCodecBufferChannel      I  [c2.mtk.avc.decoder.secure#555] start: max output delay 19
2023-04-06 16:34:45.549 CCodecBufferChannel      D  [c2.mtk.avc.decoder.secure#555] Query output surface allocator returned 0 params => BAD_INDEX (6)
2023-04-06 16:34:45.550 CCodecBufferChannel      I  [c2.mtk.avc.decoder.secure#555] Created output block pool with allocatorID 18 => poolID 176 - OK
2023-04-06 16:34:45.550 CCodecBufferChannel      D  [c2.mtk.avc.decoder.secure#555] Configured output block pool ids 176 => OK
2023-04-06 16:34:45.550 Codec2-Out...ufferQueue  D  C2SurfaceSyncMemory created 20(20)
2023-04-06 16:34:45.550 Codec2-Out...ufferQueue  D  remote graphic buffer migration 0/0
2023-04-06 16:34:45.550 Codec2Client             D  setOutputSurface -- generation=28931073 consumer usage=0x900 sync
2023-04-06 16:34:45.551 Codec2Client             D  Surface configure completed
2023-04-06 16:34:45.551 CCodec                   I  state->set(RUNNING)
2023-04-06 16:34:45.551 CCodecBufferChannel      I  [c2.mtk.avc.decoder.secure#555] 8 initial input buffers available
2023-04-06 16:34:45.564 MediaCodec               I  setCodecState state(0), called in 6
2023-04-06 16:34:45.567 EventLogger              D  videoDecoderInitialized [eventTime=0.92, mediaPos=0.00, window=0, period=0, c2.mtk.avc.decoder.secure]
2023-04-06 16:34:45.568 CryptoHal                D  found drm@1.0 ICryptoFactory clearkey
2023-04-06 16:34:45.569 EventLogger              D  videoInputFormat [eventTime=0.92, mediaPos=0.00, window=0, period=0, id=2, mimeType=video/avc, bitrate=1800000, codecs=avc1.4D4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0]
2023-04-06 16:34:45.570 CryptoHal                D  found drm@1.0 ICryptoFactory widevine
2023-04-06 16:34:45.571 EventLogger              D  downstreamFormat [eventTime=0.92, mediaPos=0.00, window=0, period=0, id=9, mimeType=audio/mp4a-latm, bitrate=128000, codecs=mp4a.40.2, drm=[playready,widevine,cenc], channels=2, sample_rate=44100, language=hi, label=Hindi]
2023-04-06 16:34:45.571 CryptoHal                D  found drm@1.1 ICryptoFactory clearkey
2023-04-06 16:34:45.572 CryptoHal                D  found drm@1.1 ICryptoFactory widevine
2023-04-06 16:34:45.575 DMCodecAdapterFactory    I  Creating an asynchronous MediaCodec adapter for track type audio
2023-04-06 16:34:45.577 CCodec                   I  state->set(ALLOCATING)
2023-04-06 16:34:45.577 CCodec                   I  allocate(c2.android.aac.decoder)
2023-04-06 16:34:45.579 CCodec                   I  setting up 'default' as default (vendor) store
2023-04-06 16:34:45.586 CCodecBufferChannel      D  [c2.mtk.avc.decoder.secure#555] flushed work; ignored.
2023-04-06 16:34:45.586 CCodecBufferChannel      D  [c2.mtk.avc.decoder.secure#555] Discard frames from previous generation.
2023-04-06 16:34:45.586 PipelineWatcher          D  onWorkDone: frameIndex not found (18446744073709551615); ignored
2023-04-06 16:34:45.587 CCodec                   I  Created component [c2.android.aac.decoder]
2023-04-06 16:34:45.587 CCodec                   I  state->set(ALLOCATED)
2023-04-06 16:34:45.588 CCodecConfig             D  read media type: audio/mp4a-latm
2023-04-06 16:34:45.589 CCodecConfig             D  c2 config diff is   c2::u32 output.delay.value = 13
2023-04-06 16:34:45.589 CCodecBufferChannel      I  [c2.mtk.avc.decoder.secure#555] updating max output delay 20
2023-04-06 16:34:45.590 Codec2-Out...ufferQueue  D  set max dequeue count 20 from update
2023-04-06 16:34:45.592 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.max-count.values
2023-04-06 16:34:45.593 ReflectedParamUpdater    D  extent() != 1 for single value type: output.subscribed-indices.values
2023-04-06 16:34:45.593 ReflectedParamUpdater    D  extent() != 1 for single value type: input.buffers.allocator-ids.values
2023-04-06 16:34:45.594 ReflectedParamUpdater    D  extent() != 1 for single value type: output.buffers.allocator-ids.values
2023-04-06 16:34:45.594 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.allocator-ids.values
2023-04-06 16:34:45.594 ReflectedParamUpdater    D  extent() != 1 for single value type: output.buffers.pool-ids.values
2023-04-06 16:34:45.594 ReflectedParamUpdater    D  extent() != 1 for single value type: algo.buffers.pool-ids.values
2023-04-06 16:34:45.600 CCodecConfig             I  query failed after returning 19 values (BAD_INDEX)
2023-04-06 16:34:45.600 CCodecConfig             D  c2 config diff is Dict {
                                                      c2::u32 coded.aac-packaging.value = 0
                                                      c2::u32 coded.bitrate.value = 64000
                                                      c2::u32 coded.pl.level = 0
                                                      c2::u32 coded.pl.profile = 8192
                                                      c2::i32 coding.drc.album-mode.value = 0
                                                      c2::float coding.drc.attenuation-factor.value = 1
                                                      c2::float coding.drc.boost-factor.value = 1
                                                      c2::i32 coding.drc.compression-mode.value = 3
                                                      c2::i32 coding.drc.effect-type.value = 3
                                                      c2::float coding.drc.encoded-level.value = 0.25
                                                      c2::float coding.drc.reference-level.value = -16
                                                      c2::u32 input.buffers.max-size.value = 8192
                                                      c2::u32 input.delay.value = 0
                                                      string input.media-type.value = "audio/mp4a-latm"
                                                      c2::u32 output.delay.value = 2
                                                      c2::float output.drc.output-loudness.value = 0.25
                                                      string output.media-type.value = "audio/raw"
                                                      c2::u32 raw.channel-count.value = 1
                                                      c2::u32 raw.max-channel-count.value = 8
                                                      c2::u32 raw.sample-rate.value = 44100
                                                    }
2023-04-06 16:34:45.602 MediaCodec               I  MediaCodec will operate in async mode
2023-04-06 16:34:45.602 MediaCodec               D  flushMediametrics
2023-04-06 16:34:45.603 CCodec                   D  [c2.android.aac.decoder] buffers are bound to CCodec for this session
2023-04-06 16:34:45.603 CCodec                   I  appPid(28253) width(0) height(0)
2023-04-06 16:34:45.603 CCodecConfig             D  no c2 equivalents for log-session-id
2023-04-06 16:34:45.603 CCodecConfig             D  no c2 equivalents for flags
2023-04-06 16:34:45.603 CCodecConfig             D  c2 config diff is   c2::u32 raw.channel-count.value = 2
2023-04-06 16:34:45.604 Codec2Client             W  query -- param skipped: index = 1107298332.
2023-04-06 16:34:45.604 CCodec                   D  setup formats input: AMessage(what = 0x00000000) = {
                                                      int32_t aac-drc-album-mode = 0
                                                      int32_t aac-drc-boost-level = 127
                                                      int32_t aac-drc-cut-level = 127
                                                      int32_t aac-drc-effect-type = 3
                                                      int32_t aac-encoded-target-level = -1
                                                      int32_t aac-max-output-channel_count = 8
                                                      int32_t aac-target-ref-level = 64
                                                      int32_t bitrate = 64000
                                                      int32_t channel-count = 2
                                                      int32_t level = 0
                                                      int32_t max-input-size = 8192
                                                      string mime = "audio/mp4a-latm"
                                                      int32_t profile = 2
                                                      int32_t sample-rate = 44100
                                                      int64_t durationUs = 0
                                                    }
2023-04-06 16:34:45.605 CCodec                   D  setup formats output: AMessage(what = 0x00000000) = {
                                                      int32_t aac-drc-album-mode = 0
                                                      int32_t aac-drc-boost-level = 127
                                                      int32_t aac-drc-cut-level = 127
                                                      int32_t aac-drc-effect-type = 3
                                                      int32_t aac-drc-output-loudness = -1
                                                      int32_t aac-encoded-target-level = -1
                                                      int32_t aac-max-output-channel_count = 8
                                                      int32_t aac-target-ref-level = 64
                                                      int32_t channel-count = 2
                                                      string mime = "audio/raw"
                                                      int32_t sample-rate = 44100
                                                    }
2023-04-06 16:34:45.605 CCodecConfig             I  query failed after returning 19 values (BAD_INDEX)
2023-04-06 16:34:45.606 MediaCodec               D  keep callback message for reclaim
2023-04-06 16:34:45.607 CCodec                   I  state->set(STARTING)
2023-04-06 16:34:45.607 Codec2Client             W  query -- param skipped: index = 1342179345.
2023-04-06 16:34:45.608 Codec2Client             W  query -- param skipped: index = 2415921170.
2023-04-06 16:34:45.608 Codec2Client             W  query -- param skipped: index = 1610614798.
2023-04-06 16:34:45.608 CCodecBufferChannel      D  [c2.android.aac.decoder#826] Created input block pool with allocatorID 16 => poolID 18 - OK (0)
2023-04-06 16:34:45.611 CCodecBufferChannel      I  [c2.android.aac.decoder#826] Created output block pool with allocatorID 16 => poolID 76 - OK
2023-04-06 16:34:45.611 CCodecBufferChannel      D  [c2.android.aac.decoder#826] Configured output block pool ids 76 => OK
2023-04-06 16:34:45.611 CCodec                   I  state->set(RUNNING)
2023-04-06 16:34:45.612 CCodecBufferChannel      I  [c2.android.aac.decoder#826] 4 initial input buffers available
2023-04-06 16:34:45.616 EventLogger              D  audioDecoderInitialized [eventTime=0.96, mediaPos=0.00, window=0, period=0, c2.android.aac.decoder]
2023-04-06 16:34:45.617 EventLogger              D  audioInputFormat [eventTime=0.96, mediaPos=0.00, window=0, period=0, id=9, mimeType=audio/mp4a-latm, bitrate=128000, codecs=mp4a.40.2, drm=[playready,widevine,cenc], channels=2, sample_rate=44100, language=hi, label=Hindi]
2023-04-06 16:34:45.984 EventLogger              D  drmKeysLoaded [eventTime=1.33, mediaPos=0.00, window=0, period=0]
2023-04-06 16:34:46.072 CCodecConfig             D  c2 config diff is   c2::u32 raw.channel-mask.value = 12
2023-04-06 16:34:46.092 AudioTrack               D  setVolume(1.000000, 1.000000) pid : 28253
2023-04-06 16:34:46.154 CCodecConfig             D  c2 config diff is   c2::u32 raw.crop.height = 720
                                                      c2::u32 raw.crop.width = 1280
                                                      c2::u32 raw.pixel-format.value = 2130706433
2023-04-06 16:34:46.155 CCodecBuffers            D  [c2.mtk.avc.decoder.secure#555:2D-Output] popFromStashAndRegister: at 1000000080000us, output format changed to AMessage(what = 0x00000000) = {
                                                      int32_t android._color-format = 2130706433
                                                      int32_t android._video-scaling = 1
                                                      int32_t sar-width = 1
                                                      int32_t color-standard = 1
                                                      int32_t color-range = 2
                                                      int32_t color-transfer = 3
                                                      int32_t android._dataspace = 260
                                                      int32_t width = 1280
                                                      int32_t rotation-degrees = 0
                                                      int32_t sar-height = 1
                                                      int32_t max-width = 1280
                                                      int32_t max-height = 720
                                                      int32_t priority = 0
                                                      string mime = "video/raw"
                                                      Rect crop(0, 0, 1279, 719)
                                                      Buffer hdr-static-info = {
                                                        00000000:  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  ................
                                                        00000010:  00 00 00 00 00 00 00 00  00                       .........
                                                      }
                                                      int32_t feature-secure-playback = 1
                                                      int32_t frame-rate = 25
                                                      int32_t height = 720
                                                      int32_t color-format = 2130708361
                                                    }
2023-04-06 16:34:46.178 MediaCodec               W  mapFormat: no mediaType information
2023-04-06 16:34:46.181 EventLogger              D  videoSize [eventTime=1.53, mediaPos=0.00, window=0, period=0, 1280, 720]
2023-04-06 16:34:46.181 MediaCodec               I  setCodecState state(1), called in 6
2023-04-06 16:34:46.191 SurfaceView@4012db0      I  pST: sr = Rect(0, 873 - 1080, 1480) sw = 1080 sh = 607
2023-04-06 16:34:46.191 SurfaceView@4012db0      I  onSSPAndSRT: pl = 0 pt = 873 sx = 1.0 sy = 1.0
2023-04-06 16:34:46.191 SurfaceView@4012db0      I  pST: mTmpTransaction.apply, mTmpTransaction = android.view.SurfaceControl$Transaction@931dcf5
2023-04-06 16:34:46.192 SurfaceView@4012db0      I  updateSurface: mVisible = true mSurface.isValid() = true
2023-04-06 16:34:46.193 SurfaceView@4012db0      I  updateSurface: mSurfaceCreated = true surfaceChanged = false visibleChanged = false
2023-04-06 16:34:46.193 SurfaceView@4012db0      I  surfaceChanged (1080,607) 1 #5 android.view.SurfaceView{4012db0 V.E...... ......ID 0,0-1080,607}
2023-04-06 16:34:46.195 EventLogger              D  surfaceSize [eventTime=1.54, mediaPos=0.00, window=0, period=0, 1080, 607]
2023-04-06 16:34:46.195 ViewRootIm...rActivity]  I  [DP] dp(1) 1 android.view.SurfaceView.updateSurface:1375 android.view.SurfaceView.setFrame:675 android.view.View.layout:24458 
2023-04-06 16:34:46.197 ViewRootIm...rActivity]  I  [DP] pdf(0) 1 android.view.SurfaceView.notifyDrawFinished:599 android.view.SurfaceView.performDrawFinished:586 android.view.SurfaceView.$r8$lambda$st27mCkd9jfJkTrN_P3qIGKX6NY:0 
2023-04-06 16:34:46.197 ViewRootIm...rActivity]  I  [DP] rdf()
2023-04-06 16:34:46.197 ViewRootIm...rActivity]  D  reportDrawFinished (fn: -1) 
2023-04-06 16:34:46.201 SurfaceView@4012db0      I  uSP: rtp = Rect(0, 873 - 1080, 1480) rtsw = 1080 rtsh = 607
2023-04-06 16:34:46.202 SurfaceView@4012db0      I  onSSPAndSRT: pl = 0 pt = 873 sx = 1.0 sy = 1.0
2023-04-06 16:34:46.202 SurfaceView@4012db0      I  aOrMT: uB = true t = android.view.SurfaceControl$Transaction@92ab737 fN = 3 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:319 
2023-04-06 16:34:46.202 SurfaceView@4012db0      I  aOrMT: vR.mWNT, vR = ViewRootImpl@c32be00[PlayerActivity]
2023-04-06 16:34:46.203 ViewRootIm...rActivity]  I  mWNT: t = android.view.SurfaceControl$Transaction@92ab737 fN = 3 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 
2023-04-06 16:34:46.204 EventLogger              D  renderedFirstFrame [eventTime=1.55, mediaPos=0.00, window=0, period=0, Surface(name=null)/@0x68cf4a4]
2023-04-06 16:34:46.204 ViewRootIm...rActivity]  I  mWNT: merge t to BBQ
2023-04-06 16:34:46.280 EventLogger              D  state [eventTime=1.63, mediaPos=0.00, window=0, period=0, READY]
2023-04-06 16:34:46.285 EventLogger              D  isPlaying [eventTime=1.63, mediaPos=0.00, window=0, period=0, true]
2023-04-06 16:34:46.741 AudioTrack               W  restartIfDisabled(233): releaseBuffer() track 0x75f51f0000 disabled due to previous underrun, restarting
2023-04-06 16:34:46.930 AudioTrack               D  getTimestamp_l(233): device stall time corrected using current time 38745879331154
2023-04-06 16:34:47.046 InputTransport           D  Input channel destroyed: 'ClientS', fd=183
2023-04-06 16:34:47.048 System                   W  A resource failed to call close. 
2023-04-06 16:34:47.736 CCodecBuffers            D  [c2.android.aac.decoder#826:EncryptedInput.Impl[N]] codec released a buffer owned by client (index 0)
2023-04-06 16:34:50.520 BufferPoolAccessor2.0    D  bufferpool2 0x757beaaa28 : 8(16777216 size) total buffers - 8(16777216 size) used buffers - 0/8 (recycle/alloc) - 8/112 (fetch/transfer)
2023-04-06 16:34:50.520 BufferPoolAccessor2.0    D  evictor expired: 1, evicted: 1
2023-04-06 16:34:50.865 BufferPoolAccessor2.0    D  bufferpool2 0x75f5173c28 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/4 (recycle/alloc) - 4/200 (fetch/transfer)
2023-04-06 16:34:50.903 EventLogger              D  loading [eventTime=6.25, mediaPos=3.80, window=0, period=0, false]
2023-04-06 16:34:51.160 EventLogger              D  loading [eventTime=6.51, mediaPos=4.06, window=0, period=0, true]
2023-04-06 16:34:51.520 BufferPoolAccessor2.0    D  evictor expired: 1, evicted: 1
2023-04-06 16:34:51.834 EventLogger              D  loading [eventTime=7.18, mediaPos=4.73, window=0, period=0, false]
2023-04-06 16:34:54.997 EventLogger              E  audioTrackUnderrun [eventTime=10.34, mediaPos=7.90, window=0, period=0, 120832, 684, 27]
2023-04-06 16:34:55.063 EventLogger              E  audioTrackUnderrun [eventTime=10.41, mediaPos=7.94, window=0, period=0, 120832, 684, 64]
2023-04-06 16:34:55.171 EventLogger              E  audioTrackUnderrun [eventTime=10.52, mediaPos=8.07, window=0, period=0, 120832, 684, 18]
2023-04-06 16:34:55.352 EventLogger              E  audioTrackUnderrun [eventTime=10.70, mediaPos=8.22, window=0, period=0, 120832, 684, 71]
2023-04-06 16:34:55.468 EventLogger              E  audioTrackUnderrun [eventTime=10.82, mediaPos=8.34, window=0, period=0, 120832, 684, 69]
2023-04-06 16:34:55.592 EventLogger              E  audioTrackUnderrun [eventTime=10.94, mediaPos=8.48, window=0, period=0, 120832, 684, 43]
2023-04-06 16:34:55.687 EventLogger              E  audioTrackUnderrun [eventTime=11.03, mediaPos=8.52, window=0, period=0, 120832, 684, 60]
2023-04-06 16:34:55.697 BufferPoolAccessor2.0    D  bufferpool2 0x757beaaa28 : 8(16777216 size) total buffers - 8(16777216 size) used buffers - 0/8 (recycle/alloc) - 8/242 (fetch/transfer)
2023-04-06 16:34:55.906 EventLogger              E  audioTrackUnderrun [eventTime=11.26, mediaPos=8.71, window=0, period=0, 120832, 684, 49]
2023-04-06 16:34:56.182 BufferPoolAccessor2.0    D  bufferpool2 0x75f5173c28 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/4 (recycle/alloc) - 4/394 (fetch/transfer)
2023-04-06 16:34:56.342 EventLogger              E  audioTrackUnderrun [eventTime=11.69, mediaPos=9.12, window=0, period=0, 120832, 684, 49]
2023-04-06 16:34:57.157 EventLogger              E  audioTrackUnderrun [eventTime=12.51, mediaPos=9.87, window=0, period=0, 120832, 684, 43]
2023-04-06 16:34:57.438 EventLogger              D  loading [eventTime=12.79, mediaPos=10.02, window=0, period=0, true]
2023-04-06 16:34:57.632 CCodecBuffers            D  [c2.android.aac.decoder#826:EncryptedInput.Impl[N]] codec released a buffer owned by client (index 3)
2023-04-06 16:34:58.023 EventLogger              D  loading [eventTime=13.37, mediaPos=10.59, window=0, period=0, false]
2023-04-06 16:34:58.457 EventLogger              D  downstreamFormat [eventTime=13.80, mediaPos=11.03, window=0, period=0, id=1, mimeType=video/avc, bitrate=2400000, codecs=avc1.4d4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0]
2023-04-06 16:34:58.460 EventLogger              D  videoInputFormat [eventTime=13.81, mediaPos=11.03, window=0, period=0, id=1, mimeType=video/avc, bitrate=2400000, codecs=avc1.4D4029, drm=[playready,widevine,cenc], res=1280x720, fps=25.0]
2023-04-06 16:34:58.810 TimeStats                E  [8173]-[SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0(BLAST)#0]-timeRecords is at its maximum size[64]. Ignore this when unittesting.
2023-04-06 16:34:59.417 MediaCodec               W  mapFormat: no mediaType information
2023-04-06 16:35:00.957 BufferPoolAccessor2.0    D  bufferpool2 0x757beaaa28 : 8(16777216 size) total buffers - 8(16777216 size) used buffers - 0/8 (recycle/alloc) - 8/366 (fetch/transfer)
2023-04-06 16:35:01.345 BufferPoolAccessor2.0    D  bufferpool2 0x75f5173c28 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/4 (recycle/alloc) - 4/617 (fetch/transfer)
2023-04-06 16:35:01.625 EventLogger              E  audioTrackUnderrun [eventTime=16.97, mediaPos=14.15, window=0, period=0, 120832, 684, 134]
2023-04-06 16:35:01.924 EventLogger              E  audioTrackUnderrun [eventTime=17.27, mediaPos=14.40, window=0, period=0, 120832, 684, 80]
2023-04-06 16:35:02.407 EventLogger              E  audioTrackUnderrun [eventTime=17.75, mediaPos=14.58, window=0, period=0, 120832, 684, 71]
2023-04-06 16:35:03.280 EventLogger              E  audioTrackUnderrun [eventTime=18.63, mediaPos=14.88, window=0, period=0, 120832, 684, 104]
2023-04-06 16:35:03.496 EventLogger              E  audioTrackUnderrun [eventTime=18.84, mediaPos=15.02, window=0, period=0, 120832, 684, 84]
2023-04-06 16:35:03.639 EventLogger              E  audioTrackUnderrun [eventTime=18.99, mediaPos=15.09, window=0, period=0, 120832, 684, 80]
2023-04-06 16:35:03.744 EventLogger              E  audioTrackUnderrun [eventTime=19.09, mediaPos=15.14, window=0, period=0, 120832, 684, 104]
2023-04-06 16:35:03.891 EventLogger              E  audioTrackUnderrun [eventTime=19.24, mediaPos=15.26, window=0, period=0, 120832, 684, 67]
2023-04-06 16:35:04.187 EventLogger              E  audioTrackUnderrun [eventTime=19.53, mediaPos=15.39, window=0, period=0, 120832, 684, 72]
2023-04-06 16:35:04.373 EventLogger              E  audioTrackUnderrun [eventTime=19.72, mediaPos=15.58, window=0, period=0, 120832, 684, 29]
2023-04-06 16:35:04.789 EventLogger              D  loading [eventTime=20.14, mediaPos=16.02, window=0, period=0, true]
2023-04-06 16:35:04.901 EventLogger              E  audioTrackUnderrun [eventTime=20.25, mediaPos=16.09, window=0, period=0, 120832, 684, 41]
2023-04-06 16:35:04.966 EventLogger              E  audioTrackUnderrun [eventTime=20.31, mediaPos=16.14, window=0, period=0, 120832, 684, 24]
2023-04-06 16:35:05.061 CCodecBuffers            D  [c2.android.aac.decoder#826:EncryptedInput.Impl[N]] codec released a buffer owned by client (index 3)
2023-04-06 16:35:05.195 EventLogger              D  loading [eventTime=20.54, mediaPos=16.39, window=0, period=0, false]
2023-04-06 16:35:05.854 EventLogger              E  audioTrackUnderrun [eventTime=21.20, mediaPos=17.00, window=0, period=0, 120832, 684, 61]
2023-04-06 16:35:06.194 EventLogger              E  audioTrackUnderrun [eventTime=21.54, mediaPos=17.32, window=0, period=0, 120832, 684, 50]
2023-04-06 16:35:06.279 BufferPoolAccessor2.0    D  bufferpool2 0x757beaaa28 : 8(16777216 size) total buffers - 8(16777216 size) used buffers - 0/8 (recycle/alloc) - 8/463 (fetch/transfer)
2023-04-06 16:35:06.449 EventLogger              E  audioTrackUnderrun [eventTime=21.80, mediaPos=17.58, window=0, period=0, 120832, 684, 39]
2023-04-06 16:35:06.672 BufferPoolAccessor2.0    D  bufferpool2 0x75f5173c28 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/4 (recycle/alloc) - 4/773 (fetch/transfer)
2023-04-06 16:35:07.068 EventLogger              E  audioTrackUnderrun [eventTime=22.42, mediaPos=18.11, window=0, period=0, 120832, 684, 50]
2023-04-06 16:35:07.566 TimeStats                E  [8173]-[SurfaceView - com.google.android.exoplayer2.demo/com.google.android.exoplayer2.demo.PlayerActivity@4012db0@0(BLAST)#0]-timeRecords is at its maximum size[64]. Ignore this when unittesting.
2023-04-06 16:35:10.629 EventLogger              E  audioTrackUnderrun [eventTime=25.98, mediaPos=21.50, window=0, period=0, 120832, 684, 58]
2023-04-06 16:35:10.778 EventLogger              E  audioTrackUnderrun [eventTime=26.13, mediaPos=21.65, window=0, period=0, 120832, 684, 63]
2023-04-06 16:35:10.976 EventLogger              E  audioTrackUnderrun [eventTime=26.32, mediaPos=21.85, window=0, period=0, 120832, 684, 63]
2023-04-06 16:35:11.112 EventLogger              D  loading [eventTime=26.46, mediaPos=22.01, window=0, period=0, true]
2023-04-06 16:35:11.222 EventLogger              E  audioTrackUnderrun [eventTime=26.57, mediaPos=22.10, window=0, period=0, 120832, 684, 49]
2023-04-06 16:35:11.496 EventLogger              E  audioTrackUnderrun [eventTime=26.84, mediaPos=22.40, window=0, period=0, 120832, 684, 60]
2023-04-06 16:35:11.565 BufferPoolAccessor2.0    D  bufferpool2 0x757beaaa28 : 8(16777216 size) total buffers - 8(16777216 size) used buffers - 0/8 (recycle/alloc) - 8/588 (fetch/transfer)
2023-04-06 16:35:11.602 EventLogger              D  loading [eventTime=26.95, mediaPos=22.50, window=0, period=0, false]
2023-04-06 16:35:11.694 EventLogger              E  audioTrackUnderrun [eventTime=27.04, mediaPos=22.58, window=0, period=0, 120832, 684, 57]
2023-04-06 16:35:11.865 BufferPoolAccessor2.0    D  bufferpool2 0x75f5173c28 : 4(32768 size) total buffers - 4(32768 size) used buffers - 0/4 (recycle/alloc) - 4/988 (fetch/transfer)

Media

Will email the required details

Bug Report

@brabebhin
Copy link

brabebhin commented Apr 28, 2023

I can reproduce this with fairely good accuracy on an S23 ultra.
This seems to be related to media3 and/or exoplayer. LibVLC is capable of playing the files just fine.
It also seems to be related to gapless playback or some sort of state being left over between tracks. If I refresh the media player object, the same file works fine again, so it is 100% not related to the files. The same track may play fine, depending on what the previous track is.
It also seems to have an afinity towards m4a files.

@riteshram
Copy link
Author

Observed that this happens if audio is encrypted as well & reproducible on multiple OTT apps. Also issue is only on OS 12 did not occur on OS 10 or 11.

@microkatz
Copy link
Contributor

@riteshram

I have not been able to reproduce this issue with a Galaxy S22 device on Android 12 with your provided content. Could you elaborate on the reproduction steps? Do you just play the provided content from the demo app and it should stutter? Does it repro 100% of the time? Is some previous track supposed to be played beforehand like how @brabebhin was reproducing it?

Perhaps we can try narrowing down the problem. What happens if we try a software decoder (if its available)?

protected List<MediaCodecInfo> getDecoderInfos(
      MediaCodecSelector mediaCodecSelector, Format format, boolean requiresSecureDecoder)
      throws DecoderQueryException {
    List<MediaCodecInfo> decoderInfos = super.getDecoderInfos(mediaCodecSelector, format, requiresSecureDecoder);
    if (format.sampleMimeType.equals(MimeTypes.VIDEO_H264) 
        && want_to_disable_c2mtkDecoder) {
        // check if decoderInfos contains an AVC decoder with
        // decoderInfo.codecMimeType.equals(MimeTypes.VIDEO_H264) and 
        // decoderInfo.hardwareAccelerated is false
        // if yes, return a copy of the decoderInfos list excluding the c2.mtk.avc.decoder.secure decoder
  }
  • The app can inject the custom renderer by overriding DefaultRenderersFactory.buildVideoRenderers()
  • The player should be created with the custom DefaultRenderersFactory. which can be passed either on the ExoPlayer.Builder constructor, or with ExoPlayer.Builder.setRenderersFactory.

@brabebhin.
Would you be able to provide specific media content to reproduce the issue? If you're unable to share bug reports or
test content publicly, please send them to dev.exoplayer@gmail.com using a subject in the format
"Issue #300". Please also update this issue to
indicate you've done this.

@riteshram
Copy link
Author

@riteshram

I have not been able to reproduce this issue with a Galaxy S22 device on Android 12 with your provided content. Could you elaborate on the reproduction steps? Do you just play the provided content from the demo app and it should stutter? Does it repro 100% of the time? Is some previous track supposed to be played beforehand like how @brabebhin was reproducing it?

Perhaps we can try narrowing down the problem. What happens if we try a software decoder (if its available)?

protected List<MediaCodecInfo> getDecoderInfos(
      MediaCodecSelector mediaCodecSelector, Format format, boolean requiresSecureDecoder)
      throws DecoderQueryException {
    List<MediaCodecInfo> decoderInfos = super.getDecoderInfos(mediaCodecSelector, format, requiresSecureDecoder);
    if (format.sampleMimeType.equals(MimeTypes.VIDEO_H264) 
        && want_to_disable_c2mtkDecoder) {
        // check if decoderInfos contains an AVC decoder with
        // decoderInfo.codecMimeType.equals(MimeTypes.VIDEO_H264) and 
        // decoderInfo.hardwareAccelerated is false
        // if yes, return a copy of the decoderInfos list excluding the c2.mtk.avc.decoder.secure decoder
  }
  • The app can inject the custom renderer by overriding DefaultRenderersFactory.buildVideoRenderers()
  • The player should be created with the custom DefaultRenderersFactory. which can be passed either on the ExoPlayer.Builder constructor, or with ExoPlayer.Builder.setRenderersFactory.

@brabebhin. Would you be able to provide specific media content to reproduce the issue? If you're unable to share bug reports or test content publicly, please send them to dev.exoplayer@gmail.com using a subject in the format "Issue #300". Please also update this issue to indicate you've done this.

@microkatz Not sure about Galaxy S22 but it is always reproducible with a Samsung Galaxy A31 device running on OS v12 & yes it is reproducible 100% of the time. There are no special steps just play the provided content for sometime like 5mins or so we tried with all the available decoders still same the issue.

@brabebhin
Copy link

brabebhin commented May 2, 2023

Hi @microkatz thanks for the response.

I can defenetly keep an eye out for some extra details. Here's some food for thought:

  1. The bug seems to have affinity for m4a files. I don't remember encountering it on mp3, but that may be just me not paying attention
  2. I am using a media browser session service - if I kill the player completely (dismiss the music player notification and kill the app in task switcher) and then restart (open app launcher which in turns triggers a new media browser service), the bug always disappears. So it seems to be related to the lifespan of the exoplayer object and/or media items list (I guess it is a concatinating media source)
  3. Because of the above, it may be difficult to reproduce it if the player does not live long enough. How long is a mistery as of yet. Sometimes it takes less than a few minutes to do it. However, once the bug reproduces, there is no stopping it: some files may never work fine again until the player is recreated, while others will be completely fine. I am going to guess the gapless media source keeps some degree of state between tracks? For example, suppose the media list has 4 files, A, B, C, D. At some point, C bugs out and displays the problem. I instantly skip to A which plays fine and i don't like choppy music, but when I skip back to C, it continues to have the bug. It's as if skipping to A left C open or something, despite not having a direct continuity from A.
  4. Seems to be easy to reproduce if I skip between tracks in the gapless media sources (periods I think you call them) without letting playback go all the way through to the end of the current file/track/period. This leads me to belive the gapless media source is not handling this correctly (Imo skipping mid track shouldn't even consider attempting preserving appearance of gapless playback and should wipe all state and heuristics clean - akin to starting playback from scratch)
  5. I am not sure if playing this over bluetooth headsets has anything to do with it. Switching between wired and bluetooth seems to have fixed the problem once, but this needs more research.
  6. Other apps, like poweramp (which uses ffmpeg decoders) and libVLC do not have this problem. The files also play fine on windows and apple devices. I think the default samsung music app also reproduces the issue (not sure if that also uses exoplayer/media3).
  7. I will take a look at your code sample and try to integrate it to see if it has any effect. Is there a way i can disable gapless playback on the media library session service?

This is a very annoying and rather difficult bug to reproduce. It only really shows up if you have a media app that is somewhat capable of being a full daily driver of media playback (should be able to at least provice basic functions like play/add to now playing/skipping to specific index in the list). I do not belive the demo app is capable of doing that.

@brabebhin
Copy link

@microkatz
I emailed both the bug report and 2 files to play in sequence in 2 different emails.

@brabebhin
Copy link

@microkatz
I succeeded in implementing that software decoder workaround, but the decoders I get are always software already.
The classes I implemented are slightly different, I used MediaCodecSelector, which gets injected into DefaultRenderersFactory.buildAudioRenderers. I can;t find any way of using MediaCodecAudioRenderer in DefaultRenderersFactory.buildAudioRenderers

the mime type is audio/mp4a-latm (audio_aac)

@brabebhin
Copy link

Anyways, I think the exo player should not control its own playlist or source. The source should be a property of the ExoPlayer and exoplayer should be just what it claims to be: a player.. Then the default Player implementation of media3 could be a wrapper over an exoplayer and a MediaList/ConcatinatingMediaSource. This should give developers more freedom in using various media sources with exoplayer.

Disabling gapless playback seems to involve too much effort - it is easier to implement the Player interface with a more mature framework such as libVLC than sticking with exoplayer.

@riteshram
Copy link
Author

riteshram commented Jul 17, 2023

@microkatz We were able to workaround this issue by forcing this device model to use Widevine L3 drm.

Stream config which has this issue was Video + Audio (Both Encrypted) & Widevine L1 DRM.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants