Dash-Industry-Forum / dash.js

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.
http://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html
Other
5.11k stars 1.67k forks source link

Error 416 in live mode with limited connection speed #4555

Open Kalynov opened 1 month ago

Kalynov commented 1 month ago
Environment
Steps to reproduce
  1. Open the Dash.js player in live mode.
  2. In devtools -> network set throttling to 3G or slow 4G or run several players simultaneously to slow down the channel.
  3. wait 5-10 minutes
Observed behavior

A network error appears in the console. error code 416 (Requested Range Not Satisfiable) the player gives an error and stops playing video and sound. however, the manifest continues to be constantly requested

Moreover, if you look at the manifest and at the request that throws an error, we can notice that the request specifies an incorrect range (or segment Url) for Rrepresentation with BaseUrl === 101051/_30__9927111640246786043/20240822/120413.m4v does not exist range === 1532636-1570522 this range is valid for Representation with baseUrl === 101051/_30__9927111640246786043/20240822/120213.m4v

REQUEST HEADERS

Request URL: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v
Request Method: GET
Status Code: 416 Requested Range Not Satisfiable
range: bytes=1532636-1570522

MANIFEST SEGMENTS

<Period id="2024-08-22T12:02:15.086007+00:00" start="PT59.603777S" duration="PT118.80771S">
            <AdaptationSet mimeType="video/mp4" codecs="avc1.42C00D" id="58847325642394" lang="" contentType="video" segmentAlignment="true">
                <Representation width="256" height="144" frameRate="1/1" mimeType="video/mp4" codecs="avc1.42C00D" id="_9927111640246786043" bandwidth="256000">
                    **<BaseURL>101051/_30__9927111640246786043/20240822/120213.m4v</BaseURL>**
                    <SegmentList timescale="16384" presentationTimeOffset="11647110222">
                        <Initialization range="0-789"/>
                       ....
                        <SegmentURL mediaRange="1463410-1498011"/>
                        <SegmentURL mediaRange="1498012-1532635"/>
                        **<SegmentURL mediaRange="1532636-1570522"/>**
                        <SegmentURL mediaRange="1570523-1598683"/>
                        <SegmentURL mediaRange="1598684-1627728"/>
                       .....
                    </SegmentList>
                </Representation>
            </AdaptationSet>
        </Period>
        ......
        <Period id="2024-08-22T12:04:13.893717+00:00" start="PT178.411487S">
            <AdaptationSet mimeType="video/mp4" codecs="avc1.42C00D" id="58847325642394" lang="" contentType="video" segmentAlignment="true">
                <SupplementalProperty schemeIdUri="urn:mpeg:dash:period-continuity:2015" value="2024-08-22T12:02:15.086007+00:00"/>
                <Representation width="256" height="144" frameRate="1/1" mimeType="video/mp4" codecs="avc1.42C00D" id="_9927111640246786043" bandwidth="256000">
                    <BaseURL>101051/_30__9927111640246786043/20240822/120413.m4v</BaseURL>
                    <SegmentList timescale="16384" presentationTimeOffset="11649056768">
                        <Initialization range="0-789"/>
                        <SegmentTimeline>
                            <S t="11649056768" d="32768"/>
                            <S t="11649089536" d="32768"/>
                            <S t="11649122304" d="32768"/>
                            <S t="11649155072" d="32768"/>
                            <S t="11649187840" d="32768"/>
                            <S t="11649220608" d="32768"/>
                            <S t="11649253376" d="32768"/>
                            <S t="11649286144" d="32768"/>
                            <S t="11649318912" d="32768"/>
                            <S t="11649351680" d="32768"/>
                            <S t="11649384448" d="32768"/>
                            <S t="11649417216" d="32768"/>
                            <S t="11649449984" d="32768"/>
                            <S t="11649482752" d="32768"/>
                            <S t="11649515520" d="32768"/>
                            <S t="11649548288" d="32768"/>
                            <S t="11649581056" d="32768"/>
                            <S t="11649613824" d="32768"/>
                        </SegmentTimeline>
                        <SegmentURL mediaRange="790-12492"/>
                        <SegmentURL mediaRange="12493-46306"/>
                        <SegmentURL mediaRange="46307-85784"/>
                        <SegmentURL mediaRange="85785-121297"/>
                        <SegmentURL mediaRange="121298-162754"/>
                        <SegmentURL mediaRange="162755-206148"/>
                        <SegmentURL mediaRange="206149-252184"/>
                        <SegmentURL mediaRange="252185-265922"/>
                        <SegmentURL mediaRange="265923-288043"/>
                        <SegmentURL mediaRange="288044-324228"/>
                        <SegmentURL mediaRange="324229-355125"/>
                        <SegmentURL mediaRange="355126-389725"/>
                        <SegmentURL mediaRange="389726-426862"/>
                        <SegmentURL mediaRange="426863-463948"/>
                        <SegmentURL mediaRange="463949-494801"/>
                        <SegmentURL mediaRange="494802-529595"/>
                        <SegmentURL mediaRange="529596-559969"/>
                        <SegmentURL mediaRange="559970-599820"/>
                    </SegmentList>
                </Representation>
            </AdaptationSet>
        </Period>
Console output
[3149968][StreamProcessor][audio] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type audio - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120213.m4a , Range:611594-628031 
Debug.js:169 [3149968][AbrController] [audio] switching from throughput to buffer occupancy ABR rule (buffer: 2.255). 
Debug.js:169 [3151252][AbrController] [video] switching from buffer occupancy to throughput ABR rule (buffer: 0.955). 
Debug.js:169 [3151253][AbrController] [audio] switching from buffer occupancy to throughput ABR rule (buffer: 0.973). 
Debug.js:169 [3151979][StreamProcessor][video] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type video - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120213.m4v , Range:1463410-1498011 
Debug.js:169 [3151980][AbrController] [video] switching from throughput to buffer occupancy ABR rule (buffer: 2.225). 
Debug.js:169 [3152050][StreamProcessor][audio] Buffer is empty! Stalling! 
Debug.js:169 [3152171][PlaybackController] Native video element event: waiting 
Debug.js:169 [3152427][StreamProcessor][audio] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type audio - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120213.m4a , Range:628032-644490 
Debug.js:169 [3152428][AbrController] [audio] switching from throughput to buffer occupancy ABR rule (buffer: 2.051). 
Debug.js:169 [3153794][DashParser] Parsing complete: ( xml2json: 21.9ms, objectiron: 0.100ms, total: 0.0220s) 
Debug.js:169 [3153795][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3153798][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:04:55 GMT+0200 (Центральная Европа, летнее время)[1724328295.586]  
Debug.js:169 [3155069][StreamProcessor][video] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type video - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120213.m4v , Range:1498012-1532635 
Debug.js:169 [3155158][StreamProcessor][audio] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type audio - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120213.m4a , Range:644491-660885 
Debug.js:169 [3155161][PlaybackController] Native video element event: playing 
XHRLoader.js:102 

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v 416 (Requested Range Not Satisfiable)

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a 416 (Requested Range Not Satisfiable)

Debug.js:169 [3158314][AbrController] [video] switching from buffer occupancy to throughput ABR rule (buffer: 0.868). 
Debug.js:169 [3158315][AbrController] [audio] switching from buffer occupancy to throughput ABR rule (buffer: 0.880). 
Debug.js:169 [3158801][DashParser] Parsing complete: ( xml2json: 8.40ms, objectiron: 0.00ms, total: 0.00840s) 
Debug.js:169 [3158801][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3158803][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:00 GMT+0200 (Центральная Европа, летнее время)[1724328300.592]  
Debug.js:169 [3159112][StreamProcessor][video] Buffer is empty! Stalling! 
Debug.js:169 [3159113][StreamProcessor][audio] Buffer is empty! Stalling! 
Debug.js:169 [3159142][PlaybackController] Native video element event: waiting 
XHRLoader.js:102 

GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v 416 (Requested Range Not Satisfiable)        

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a 416 (Requested Range Not Satisfiable)

Debug.js:169 [3163932][DashParser] Parsing complete: ( xml2json: 9.90ms, objectiron: 0.00ms, total: 0.00990s) 
Debug.js:169 [3163932][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3163934][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:05 GMT+0200 (Центральная Европа, летнее время)[1724328305.723]  
XHRLoader.js:102 

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v 416 (Requested Range Not Satisfiable)

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a 416 (Requested Range Not Satisfiable)

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v 416 (Requested Range Not Satisfiable)

Debug.js:169 [3168875][StreamProcessor][video] OnFragmentLoadingCompleted for stream id 2024-08-22T12:02:13.893717+00:00 and media type video - Url: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927111640246786043/20240822/120413.m4v , Range:1532636-1570522 
Debug.js:169 [3168875][StreamProcessor][video] Fragment loading completed with an error 
Debug.js:169 [3168877][StreamProcessor][audio] onFragmentLoadingAbandoned request: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a has been aborted 
Debug.js:169 [3168878][StreamProcessor][audio] onFragmentLoadingAbandoned request: https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a has to be downloaded again, origin is not seeking process or switch track call 
XHRLoader.js:102 

       GET https://probe01-qa-ubuntu20.vot/probe_id/4/data/101051/_30__9927110540735157832/20240822/120413.m4a 416 (Requested Range Not Satisfiable)

Debug.js:169 [3168897][DashParser] Parsing complete: ( xml2json: 16.5ms, objectiron: 0.00ms, total: 0.0165s) 
Debug.js:169 [3168897][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3168899][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:10 GMT+0200 (Центральная Европа, летнее время)[1724328310.688]  
Debug.js:169 [3173951][DashParser] Parsing complete: ( xml2json: 8.20ms, objectiron: 0.00ms, total: 0.00820s) 
Debug.js:169 [3173951][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3173953][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:15 GMT+0200 (Центральная Европа, летнее время)[1724328315.742]  
Debug.js:169 [3178719][DashParser] Parsing complete: ( xml2json: 9.40ms, objectiron: 0.00ms, total: 0.00940s) 
Debug.js:169 [3178719][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3178720][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:20 GMT+0200 (Центральная Европа, летнее время)[1724328320.51]  
Debug.js:169 [3183738][DashParser] Parsing complete: ( xml2json: 11.4ms, objectiron: 0.00ms, total: 0.0114s) 
Debug.js:169 [3183738][StreamController] Manifest updated... updating data system wide. 
Debug.js:169 [3183740][ManifestUpdater] Manifest has been refreshed at Thu Aug 22 2024 14:05:25 GMT+0200 (Центральная Европа, летнее время)[1724328325.529]  
Debug.js:169 [3188801][DashParser] Parsing complete: ( xml2json: 9.20ms, objectiron: 0.00ms, total: 0.00920s) 
Expected behavior

The player must request the correct Range and not stop

dsilhavy commented 6 days ago

@Kalynov Do you see the same behavior in the latest nightly version: https://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html

Kalynov commented 5 days ago

@Kalynov Do you see the same behavior in the latest nightly version: https://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html

yes i do