-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
Have you read the FAQ and checked for duplicate open issues?
Yes
If the problem is related to FairPlay, have you read the tutorial?
Yes
What version of Shaka Player are you using?
4.12.14
Can you reproduce the issue with our latest release version?
Yes
Can you reproduce the issue with the latest code from main
?
Yes
Are you using the demo app or your own custom app?
Both
If custom app, can you reproduce the issue using our demo app?
Yes
What browser and OS are you using?
chrome, safari and edge
For embedded devices (smart TVs, etc.), what model and firmware version are you using?
Samsung, LG, X1
What are the manifest and license server URIs?
Asset Key for IMA DAI live content: PSzZMzAkSXCmlJOWDmRj8Q
What configuration are you using? What is the output of player.getNonDefaultConfiguration()
?
Default configuration
What did you do?
- Add the asset key in ads section and enable
use IMA
- Try playing the content and wait until ads comes.
- Observed either during ads or transition from the ads to actual content player buffers indefinitely and recovers at next ads (takes more 5-10 mins).
What did you expect to happen?
We can expect small buffer and it doesn't seems to affect the playback.
What actually happened?
- All content relying on IMA DAI playback is affected. Playback becomes indefinitely stuck, blocking production use of Shaka versions >= v4.9.18. Note: Shaka versions < v4.9.18 wan't affected. This issue is also reproducible with sample IMA DAI contents in demo app.
- Logs from affected playback sessions show:
14:39:33.049 log.js:145 Still within switch interval...
14:39:33.049 log.js:143 video=1000000 Evicting at 1747040653.2610002
14:39:33.049 log.js:143 Evicting 1747040646.3999999 - 1747040652.8
14:39:33.049 log.js:145 (video:5) checking buffer length
14:39:33.049 log.js:145 (video:5) buffer behind okay: presentationTime=1747040896.167 bufferedBehind=6.566000938415527 bufferBehind=30 evictionGoal=1 underflow=23.433999061584473
14:39:33.050 log.js:145 Parsing MP4 box styp
14:39:33.050 log.js:145 Parsing MP4 box free
14:39:33.050 log.js:145 Parsing MP4 box sidx
14:39:33.050 log.js:145 Parsing MP4 box prft
14:39:33.050 log.js:145 Parsing MP4 box prft
14:39:33.050 log.js:145 Parsing MP4 box prft
14:39:33.050 log.js:145 Parsing MP4 box prft
14:39:33.050 log.js:145 Parsing MP4 box moof
14:39:33.050 log.js:145 Parsing MP4 box mfhd
14:39:33.050 log.js:145 Parsing MP4 box traf
14:39:33.050 log.js:145 Parsing MP4 box tfhd
14:39:33.050 log.js:145 Parsing MP4 box tfdt
14:39:33.050 log.js:145 Parsing MP4 box trun
14:39:33.050 log.js:145 Parsing MP4 box mdat
14:39:33.052 log.js:145 (video:5) appended media segment
14:39:33.052 log.js:145 (video:5) advancing to next segment shaka.media.SegmentReference {startTime: 1747040908.8, endTime: 1747040915.1999998, trueEndTime: 1747040915.1999998, startByte: 0, getUrisInner: ƒ, …}
14:39:33.052 log.js:144 (video:5) finished fetch and append [{"start":1747040889.600999,"end":1747040908.800998}]
14:39:33.052 log.js:145 (video:5) updating in 0 seconds
14:39:33.052 log.js:145 (video:5) timeNeeded=1747040908.8
14:39:33.052 log.js:145 (video:5) update_: presentationTime=1747040898.733327 bufferedAhead=10.067671060562134
14:39:33.052 log.js:145 (video:5) buffering goal met
14:39:33.052 log.js:145 (video:5) updating in 0.5 seconds
14:39:33.349 log.js:145 (audio:7) timeNeeded=1747040908.8
14:39:33.349 log.js:145 (audio:7) update_: presentationTime=1747040899.029581 bufferedAhead=9.771416902542114
14:39:33.349 log.js:144 (audio:7) looking up segment from new stream endTime: 1747040908.8
14:39:33.349 log.js:143 Find 1747040908.8
14:39:33.349 log.js:143 Find 1747040908.8
14:39:33.349 log.js:145 fetching: reference= shaka.media.InitSegmentReference {startByte: 0, endByte: null, mediaQuality: {…}, timescale: null, getUris: ƒ, …}
14:39:33.350 log.js:145 fetching: reference= shaka.media.SegmentReference {startTime: 1747040908.8, endTime: 1747040915.1999998, trueEndTime: 1747040915.1999998, startByte: 0, getUrisInner: ƒ, …}
14:39:33.350 log.js:144 (audio:7) fetchAndAppend_: presentationTime=1747040899.029581 reference.startTime=1747040908.8 reference.endTime=1747040915.1999998
14:39:33.350 log.js:145 (audio:7) fetching segment
14:39:33.350 log.js:143 SegmentPrefetch(audio:7) reused prefetched segment at time: 1747040908.8 mapSize 1
14:39:33.553 log.js:145 (video:5) timeNeeded=1747040908.8
14:39:33.553 log.js:145 (video:5) update_: presentationTime=1747040899.234081 bufferedAhead=9.566916942596436
14:39:33.553 log.js:143 SegmentPrefetch(video:5) pop and abort prefetched segment at time: 1747040895.9999998
14:39:33.554 log.js:145 fetching: reference= shaka.media.SegmentReference {startTime: 1747040902.3999999, endTime: 1747040908.8, trueEndTime: 1747040908.8, startByte: 0, getUrisInner: ƒ, …}
14:39:33.554 log.js:144 (video:5) fetchAndAppend_: presentationTime=1747040899.234081 reference.startTime=1747040908.8 reference.endTime=1747040915.1999998
14:39:33.554 log.js:145 (video:5) fetching segment
14:39:33.554 log.js:143 SegmentPrefetch(video:5) missed segment at time: 1747040908.8 mapSize 1
14:39:33.554 log.js:145 fetching: reference= shaka.media.SegmentReference {startTime: 1747040908.8, endTime: 1747040915.1999998, trueEndTime: 1747040915.1999998, startByte: 0, getUrisInner: ƒ, …}
14:39:33.673 log.js:145 Segment downloaded: contentType=audio deltaTimeMs=323 numBytes=637 lastTimeChosenMs=1747040965537 enabled=true
14:39:33.673 log.js:145 Suggesting Streams...
14:39:33.673 log.js:145 Bandwidth ranges: 0.764 0.804 0.974
14:39:33.673 log.js:145 Bandwidth ranges: 0.828 0.872 1.252
14:39:33.673 log.js:145 Bandwidth ranges: 1.064 1.120 1.327
14:39:33.673 log.js:145 Bandwidth ranges: 1.128 1.187 3.016
14:39:33.673 log.js:145 Bandwidth ranges: 2.564 2.699 3.092
14:39:33.673 log.js:145 Bandwidth ranges: 2.628 2.766 4.781
14:39:33.673 log.js:145 Bandwidth ranges: 4.064 4.278 4.856
14:39:33.673 log.js:145 Bandwidth ranges: 4.128 4.345 7.134
14:39:33.673 log.js:145 Bandwidth ranges: 6.064 6.383 7.209
14:39:33.673 log.js:145 Bandwidth ranges: 6.128 6.451 Infinity
14:39:33.673 log.js:143 Calling switch_(), bandwidth=1696 kbps
14:39:33.673 log.js:143 switch_
14:39:33.674 log.js:143 SegmentPrefetch(video:5) pop and abort prefetched segment at time: 1747040902.3999999
14:39:33.674 log.js:143 SegmentPrefetch(video:5) pop and abort prefetched init segment
14:39:33.674 log.js:143 SegmentPrefetch(video:5) cleared all
14:39:33.674 log.js:143 switch: switching to Stream (video:1)
14:39:33.674 log.js:143 SegmentPrefetch(audio:7) pop and abort prefetched segment at time: 1747040908.8
14:39:33.674 log.js:143 SegmentPrefetch(audio:7) pop and abort prefetched init segment
14:39:33.674 log.js:143 SegmentPrefetch(audio:7) cleared all
14:39:33.674 log.js:143 switch: switching to Stream (audio:6)
14:39:33.675 log.js:145 (audio:6) updating in 0 seconds
14:39:33.675 log.js:143 Find 1747040908.8
14:39:33.675 log.js:142 Aborting current segment request.
14:39:33.675 log.js:143 Find 1747040908.8
14:39:33.675 log.js:142 Aborting current segment request.
14:39:33.675 log.js:145 (video:1) updating in 0 seconds
14:39:33.676 log.js:145 (audio:6) timeNeeded=1747040908.8
14:39:33.676 log.js:145 (audio:6) update_: presentationTime=1747040899.357209 bufferedAhead=9.443789005279541
14:39:33.676 log.js:144 (audio:6) looking up segment from new stream endTime: 1747040908.8
14:39:33.676 log.js:143 Find 1747040908.8
14:39:33.676 log.js:141 (audio:6) cannot find segment endTime: 1747040908.8
This suggests that either the audio or video buffer is insufficient, which causes the player to get stuck in a buffering loop. The segment lookup failure appears related to timeline discontinuities or stream manager handling after ads.
We suspect that this PR might be causing the issue. We checked reverting this and seems like issue is not reproducible.
Are you planning to send a PR to fix it?
No