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.09k stars 1.67k forks source link

Live MultiPeriod $Time$+SegmentTimeline stalls at period boundary #2946

Closed nicoweilelemental closed 4 years ago

nicoweilelemental commented 5 years ago
Environment
Steps to reproduce
  1. Please provide clear steps to reproduce your problem Just play the stream.
  2. If the bug is intermittent, give a rough frequency if possible This is a systematic problem.
Observed behaviour

You will see the playback stop at period boundary, MPD refreshes happening, some successful segments loading but the playback never resumes. Instead we see endless manifest reloading. This is a stream with ad insertion produced by AWS Elemental MediaPackage (for the original stream) and MediaTailor (for the ad insertion), playing fine in Shaka, Exoplayer and THEOplayer.

Console output

Debug.js:233 [538887][StreamController] Jumping media gap (discontinuity) at time 87664.517209 . Jumping to end of the stream Debug.js:233 [538888][ScheduleController][video] Schedule Controller stops Debug.js:233 [538889][ScheduleController][audio] Schedule Controller stops Debug.js:233 [538890][EventController] Added 0 inline events Debug.js:233 [538890][Stream] video codec: video/mp4;codecs="avc1.640028" Debug.js:233 [538891][DOMStorage] Last saved bitrate for video was 1186896 Debug.js:233 [538892][Stream] audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:233 [538894][Stream] No text data. Debug.js:233 [538894][Stream] No fragmentedText data. Debug.js:233 [538895][Stream] No embeddedText data. Debug.js:233 [538895][Stream] No muxed data. Debug.js:233 [538895][Stream] No image data. Debug.js:233 [538896] Doing period transition with changeType Debug.js:233 [538897] Doing period transition with changeType Debug.js:233 [538898][StreamController] SourceBuffer changeType method supported. Use it to switch codecs in periods transitions Debug.js:233 [538899][EventController] Start Event Controller Debug.js:233 [539994][DashParser] Parsing complete: ( xml2json: 4.07ms, objectiron: 0.0550ms, total: 0.00412s) Debug.js:233 [539997][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [540001][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [540006][Stream] Manifest updated... updating data system wide. Debug.js:233 [540011][EventController] Added 0 inline events Debug.js:233 [540015][Stream] Manifest updated... updating data system wide. Debug.js:233 [540018][EventController] Added 0 inline events Debug.js:233 [540024][Stream] Manifest updated... updating data system wide. Debug.js:233 [540027][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:03:40 GMT+0100 (heure normale d’Europe centrale)[1551265420.638]
Debug.js:233 [540030][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [544212][DashParser] Parsing complete: ( xml2json: 3.92ms, objectiron: 0.0500ms, total: 0.00397s) Debug.js:233 [544216][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [544219][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [544222][Stream] Manifest updated... updating data system wide. Debug.js:233 [544225][EventController] Added 0 inline events Debug.js:233 [544228][Stream] Manifest updated... updating data system wide. Debug.js:233 [544231][EventController] Added 0 inline events Debug.js:233 [544236][Stream] Manifest updated... updating data system wide. Debug.js:233 [544238][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:03:44 GMT+0100 (heure normale d’Europe centrale)[1551265424.855]
Debug.js:233 [544241][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [548449][DashParser] Parsing complete: ( xml2json: 5.86ms, objectiron: 0.0550ms, total: 0.00592s) Debug.js:233 [548452][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [548454][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [548457][Stream] Manifest updated... updating data system wide. Debug.js:233 [548459][EventController] Added 0 inline events Debug.js:233 [548462][Stream] Manifest updated... updating data system wide. Debug.js:233 [548464][EventController] Added 0 inline events Debug.js:233 [548469][Stream] Manifest updated... updating data system wide. Debug.js:233 [548471][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:03:49 GMT+0100 (heure normale d’Europe centrale)[1551265429.091]
Debug.js:233 [548474][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [548887][BufferController][video] Removing video buffer from: 0 to 87644.517209 Debug.js:233 [548888][BufferController][audio] Removing audio buffer from: 0 to 87644.517209 Debug.js:233 [548890][BufferController][video] onRemoved buffer from: 0 to 87644.517209 Debug.js:233 [548890][BufferController][video] Buffered Range for type: video : 87648.08 - 87664.88 currentTime = 87664.517209 Debug.js:233 [548890][BufferController][video] onRemoved : call updateBufferLevel Debug.js:233 [548890][ScheduleController][video] Buffer is empty! Stalling! Debug.js:233 [548890][BufferController][video] Waiting for more buffer before starting playback for video Debug.js:233 [548891][ScheduleController][video] Start denied to Schedule Controller Debug.js:233 [548891][BufferController][audio] onRemoved buffer from: 0 to 87644.517209 Debug.js:233 [548891][BufferController][audio] Buffered Range for type: audio : 87644.522666 - 87664.874666 currentTime = 87664.517209 Debug.js:233 [548892][BufferController][audio] onRemoved : call updateBufferLevel Debug.js:233 [548892][ScheduleController][audio] Buffer is empty! Stalling! Debug.js:233 [548892][BufferController][audio] Waiting for more buffer before starting playback for audio Debug.js:233 [548892][ScheduleController][audio] Start denied to Schedule Controller Debug.js:233 [552656][DashParser] Parsing complete: ( xml2json: 4.83ms, objectiron: 0.0550ms, total: 0.00489s) Debug.js:233 [552659][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [552661][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [552664][Stream] Manifest updated... updating data system wide. Debug.js:233 [552666][EventController] Added 0 inline events Debug.js:233 [552670][Stream] Manifest updated... updating data system wide. Debug.js:233 [552673][EventController] Added 0 inline events Debug.js:233 [552678][Stream] Manifest updated... updating data system wide. Debug.js:233 [552681][Stream] Manifest updated... updating data system wide. Debug.js:233 [552683][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:03:53 GMT+0100 (heure normale d’Europe centrale)[1551265433.298]
Debug.js:233 [552687][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [556876][DashParser] Parsing complete: ( xml2json: 5.75ms, objectiron: 0.0650ms, total: 0.00581s) Debug.js:233 [556879][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [556883][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [556887][Stream] Manifest updated... updating data system wide. Debug.js:233 [556890][EventController] Added 0 inline events Debug.js:233 [556894][Stream] Manifest updated... updating data system wide. Debug.js:233 [556897][EventController] Added 0 inline events Debug.js:233 [556903][Stream] Manifest updated... updating data system wide. Debug.js:233 [556906][Stream] Manifest updated... updating data system wide. Debug.js:233 [556908][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:03:57 GMT+0100 (heure normale d’Europe centrale)[1551265437.52]
Debug.js:233 [556911][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [560064][PlaybackController] Requesting seek to time: 87664.88 Debug.js:233 [560068][PlaybackController] Seeking to: 87664.88 Debug.js:233 [560069][BufferController][video] getAllRangesWithSafetyFactor for video - No request found in current time position, removing full buffer 0 - 87665.38 Debug.js:233 [560069][BufferController][video] Removing video buffer from: 0 to 87665.38 Debug.js:233 [560069][ScheduleController][video] Start denied to Schedule Controller Debug.js:233 [560071][PlaybackController] Native video element event: waiting Debug.js:233 [560073][DashHandler] Getting the request for video time : 87669.65866666667 Debug.js:233 [560076][DashHandler] Index for video time 87669.65866666667 is 1 Debug.js:233 [560079][ScheduleController][video] Schedule Controller starts Debug.js:233 [560084][DashHandler] Getting the request for audio time : 87669.808 Debug.js:233 [560089][DashHandler] Index for audio time 87669.808 is 1 Debug.js:233 [560092][ScheduleController][audio] Schedule Controller starts Debug.js:233 [560095][ScheduleController][video] Schedule Controller stops Debug.js:233 [560105][AbrController] AbrController (audio) stay on 0/0 (buffer: 0.357) Debug.js:233 [560110][ScheduleController][audio] Quality has changed, get init request for representationid = 4 Debug.js:233 [560113][ScheduleController][audio] isFragmentProcessingInProgress is already equal to true Debug.js:233 [560121][BufferController][video] onRemoved buffer from: 0 to 87665.38 Debug.js:233 [560121][BufferController][video] onRemoved : call updateBufferLevel Debug.js:233 [560121][ScheduleController][video] Schedule Controller starts Debug.js:233 [560123][AbrController] AbrController (video) stay on 0/2 (buffer: 0.363) Debug.js:233 [560123][ScheduleController][video] Quality has changed, get init request for representationid = 3 Debug.js:233 [560123][ScheduleController][video] isFragmentProcessingInProgress is already equal to true Debug.js:233 [560176][BufferController][audio] Init fragment finished loading saving to audio's init cache Debug.js:233 [560181][BufferController][audio] Append Init fragment audio with representationId: 4 and quality: 0 , data size: 638 Debug.js:233 [560186][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_audio_96_3_init.mp4 , Range: undefined Debug.js:233 [560193][ScheduleController][audio] Top quality audio index has changed from undefined to 0 Debug.js:233 [560193][AbrController] AbrController (audio) stay on 0/0 (buffer: 0.357) Debug.js:233 [560194][DashHandler] Getting the request for audio time : 87667.248 Debug.js:233 [560194][DashHandler] Index for audio time 87667.248 is 1 Debug.js:233 [560195][DashHandler] SegmentTimeline: 2.368 / 15 Debug.js:233 [560195][ScheduleController][audio] Next fragment request url is https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_audio_96_3_113664.mp4 Debug.js:233 [560197][BufferController][video] Init fragment finished loading saving to video's init cache Debug.js:233 [560198][BufferController][video] Append Init fragment video with representationId: 3 and quality: 0 , data size: 740 Debug.js:233 [560199][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_432_1_0_init.mp4 , Range: undefined Debug.js:233 [560201][ScheduleController][video] Top quality video index has changed from undefined to 2 Debug.js:233 [560201][AbrController] AbrController (video) stay on 0/2 (buffer: 0.363) Debug.js:233 [560202][DashHandler] Getting the request for video time : 87667.28 Debug.js:233 [560202][DashHandler] Index for video time 87667.28 is 1 Debug.js:233 [560202][DashHandler] SegmentTimeline: 2.4 / 15 Debug.js:233 [560202][ScheduleController][video] Next fragment request url is https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_432_1_0_216000.mp4 Debug.js:233 [560252][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_audio_96_3_113664.mp4 , Range: undefined Debug.js:233 [560253][BufferController][audio] Buffered Range for type: audio : 87644.522666 - 87664.874666 currentTime = 87664.88 Debug.js:233 [560253][BufferController][audio] Buffered Range for type: audio : 87667.248 - 87669.658666 currentTime = 87664.88 Debug.js:233 [560262][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_432_1_0_216000.mp4 , Range: undefined Debug.js:233 [560264][BufferController][video] Buffered Range for type: video : 87667.28 - 87669.68 currentTime = 87664.88 Debug.js:233 [560267][ThroughputRule] requesting switch to index: 2 type: video Average throughput 1068206 kbps Debug.js:233 [560267][AbrController] AbrController (video) switch from 0 to 2/2 (buffer: 2.4) . Debug.js:233 [560273][ScheduleController][video] Quality has changed, get init request for representationid = 1 Debug.js:233 [560273][ScheduleController][video] isFragmentProcessingInProgress is already equal to true Debug.js:233 [560330][BufferController][video] Init fragment finished loading saving to video's init cache Debug.js:233 [560332][BufferController][video] Append Init fragment video with representationId: 1 and quality: 2 , data size: 742 Debug.js:233 [560333][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_720_3_2_init.mp4 , Range: undefined Debug.js:233 [560336][ThroughputRule] requesting switch to index: 2 type: video Average throughput 1068206 kbps Debug.js:233 [560336][AbrController] AbrController (video) stay on 2/2 (buffer: 2.4) Debug.js:233 [560336][DashHandler] Getting the request for video time : 87669.68 Debug.js:233 [560336][DashHandler] Index for video time 87669.68 is 1 Debug.js:233 [560337][DashHandler] SegmentTimeline: 2.4 / 15 Debug.js:233 [560337][DashHandler] Getting the next request at index: 2, type: video Debug.js:233 [560337][DashHandler] SegmentTimeline: 4.8 / 15 Debug.js:233 [560337][ScheduleController][video] Next fragment request url is https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_720_3_2_432000.mp4 Debug.js:233 [560406][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_720_3_2_432000.mp4 , Range: undefined Debug.js:233 [560409][BufferController][video] Buffered Range for type: video : 87667.28 - 87672.08 currentTime = 87664.88 Debug.js:233 [560411][ScheduleController][video] Reloading outdated fragment at index: 1 Debug.js:233 [560412][DashHandler] Getting the request for video time : 87668.48 Debug.js:233 [560412][DashHandler] Index for video time 87668.48 is 1 Debug.js:233 [560412][ScheduleController][video] Next fragment request url is https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_720_3_2_216000.mp4 Debug.js:233 [560476][ScheduleController][video] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_720_3_2_216000.mp4 , Range: undefined Debug.js:233 [560478][BufferController][video] Buffered Range for type: video : 87667.28 - 87672.08 currentTime = 87664.88 Debug.js:233 [560756][ThroughputRule] requesting switch to index: 0 type: audio Average throughput 3848 kbps Debug.js:233 [560756][AbrController] AbrController (audio) stay on 0/0 (buffer: 2.411) Debug.js:233 [560756][DashHandler] Getting the request for audio time : 87669.65866666667 Debug.js:233 [560756][DashHandler] Index for audio time 87669.65866666667 is 1 Debug.js:233 [560757][DashHandler] SegmentTimeline: 2.368 / 15 Debug.js:233 [560757][DashHandler] Getting the next request at index: 2, type: audio Debug.js:233 [560761][DashHandler] SegmentTimeline: 4.77867 / 15 Debug.js:233 [560761][ScheduleController][audio] Next fragment request url is https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_audio_96_3_229376.mp4 Debug.js:233 [560820][ScheduleController][audio] OnFragmentLoadingCompleted - Url: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dashsegment/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/501bbf2f-84a9-4629-80f9-ec6d9a1dab3b/42283/42283_1/asset_audio_96_3_229376.mp4 , Range: undefined Debug.js:233 [560820][BufferController][audio] Buffered Range for type: audio : 87644.522666 - 87664.874666 currentTime = 87664.88 Debug.js:233 [560821][BufferController][audio] Buffered Range for type: audio : 87667.248 - 87672.047999 currentTime = 87664.88 Debug.js:233 [561097][DashParser] Parsing complete: ( xml2json: 5.96ms, objectiron: 0.0550ms, total: 0.00602s) Debug.js:233 [561099][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [561102][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [561105][Stream] Manifest updated... updating data system wide. Debug.js:233 [561107][EventController] Added 0 inline events Debug.js:233 [561110][Stream] Manifest updated... updating data system wide. Debug.js:233 [561113][EventController] Added 0 inline events Debug.js:233 [561116][ScheduleController][video] Schedule Controller stops Debug.js:233 [561120][ScheduleController][audio] Schedule Controller stops Debug.js:233 [561123][Stream] Manifest updated... updating data system wide. Debug.js:233 [561126][Stream] Manifest updated... updating data system wide. Debug.js:233 [561128][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:01 GMT+0100 (heure normale d’Europe centrale)[1551265441.739]
Debug.js:233 [561130][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [565285][DashParser] Parsing complete: ( xml2json: 4.50ms, objectiron: 0.0600ms, total: 0.00455s) Debug.js:233 [565288][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [565292][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [565296][Stream] Manifest updated... updating data system wide. Debug.js:233 [565300][EventController] Added 0 inline events Debug.js:233 [565304][Stream] Manifest updated... updating data system wide. Debug.js:233 [565309][EventController] Added 0 inline events Debug.js:233 [565318][Stream] Manifest updated... updating data system wide. Debug.js:233 [565321][Stream] Manifest updated... updating data system wide. Debug.js:233 [565324][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:05 GMT+0100 (heure normale d’Europe centrale)[1551265445.929]
Debug.js:233 [565327][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [568887][BufferController][audio] Removing audio buffer from: 0 to 87644.88 Debug.js:233 [568888][BufferController][audio] onRemoved buffer from: 0 to 87644.88 Debug.js:233 [568888][BufferController][audio] Buffered Range for type: audio : 87644.885333 - 87664.874666 currentTime = 87664.88 Debug.js:233 [568888][BufferController][audio] Buffered Range for type: audio : 87667.248 - 87672.047999 currentTime = 87664.88 Debug.js:233 [568888][BufferController][audio] onRemoved : call updateBufferLevel Debug.js:233 [568888][ScheduleController][audio] Schedule Controller starts Debug.js:233 [569508][DashParser] Parsing complete: ( xml2json: 4.87ms, objectiron: 0.115ms, total: 0.00499s) Debug.js:233 [569512][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [569515][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [569519][Stream] Manifest updated... updating data system wide. Debug.js:233 [569521][EventController] Added 0 inline events Debug.js:233 [569525][ScheduleController][audio] Schedule Controller stops Debug.js:233 [569532][Stream] Manifest updated... updating data system wide. Debug.js:233 [569535][Stream] Manifest updated... updating data system wide. Debug.js:233 [569539][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:10 GMT+0100 (heure normale d’Europe centrale)[1551265450.152]
Debug.js:233 [569543][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [573728][DashParser] Parsing complete: ( xml2json: 8.21ms, objectiron: 0.0800ms, total: 0.00829s) Debug.js:233 [573733][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [573737][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [573740][Stream] Manifest updated... updating data system wide. Debug.js:233 [573743][EventController] Added 0 inline events Debug.js:233 [573748][Stream] Manifest updated... updating data system wide. Debug.js:233 [573751][Stream] Manifest updated... updating data system wide. Debug.js:233 [573754][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:14 GMT+0100 (heure normale d’Europe centrale)[1551265454.374]
Debug.js:233 [573758][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [577948][DashParser] Parsing complete: ( xml2json: 4.48ms, objectiron: 0.0650ms, total: 0.00455s) Debug.js:233 [577951][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [577954][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [577958][Stream] Manifest updated... updating data system wide. Debug.js:233 [577961][EventController] Added 0 inline events Debug.js:233 [577966][Stream] Manifest updated... updating data system wide. Debug.js:233 [577970][Stream] Manifest updated... updating data system wide. Debug.js:233 [577974][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:18 GMT+0100 (heure normale d’Europe centrale)[1551265458.59]
Debug.js:233 [578012][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [582200][DashParser] Parsing complete: ( xml2json: 4.60ms, objectiron: 0.0450ms, total: 0.00464s) Debug.js:233 [582204][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [582208][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [582211][Stream] Manifest updated... updating data system wide. Debug.js:233 [582214][EventController] Added 0 inline events Debug.js:233 [582219][Stream] Manifest updated... updating data system wide. Debug.js:233 [582222][Stream] Manifest updated... updating data system wide. Debug.js:233 [582225][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:22 GMT+0100 (heure normale d’Europe centrale)[1551265462.845]
Debug.js:233 [582228][ManifestUpdater] Refresh manifest in 3999 milliseconds. Debug.js:233 [586461][DashParser] Parsing complete: ( xml2json: 6.43ms, objectiron: 0.0750ms, total: 0.00650s) Debug.js:233 [586464][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [586468][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [586471][Stream] Manifest updated... updating data system wide. Debug.js:233 [586474][Stream] Manifest updated... updating data system wide. Debug.js:233 [586476][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:27 GMT+0100 (heure normale d’Europe centrale)[1551265467.105]
Debug.js:233 [586480][ManifestUpdater] Refresh manifest in 4000 milliseconds. Debug.js:233 [590697][DashParser] Parsing complete: ( xml2json: 6.09ms, objectiron: 0.0600ms, total: 0.00615s) Debug.js:233 [590701][ManifestLoader] BaseURI set by Location to: https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/ Debug.js:233 [590706][StreamController] SegmentTimeline detected using calculated Live Edge Time Debug.js:233 [590712][Stream] Manifest updated... updating data system wide. Debug.js:233 [590716][Stream] Manifest updated... updating data system wide. Debug.js:233 [590721][ManifestUpdater] Manifest has been refreshed at Wed Feb 27 2019 12:04:31 GMT+0100 (heure normale d’Europe centrale)[1551265471.342]
Debug.js:233 [590726][ManifestUpdater] Refresh manifest in 4000 milliseconds.

nicoweilelemental commented 5 years ago

I need to add that the same stream on the MediaPackage origin has got the same problems, which seems to remove the codec switch at period boundaries from the possible root causes : https://f7b399c8cf81ac81.mediapackage.eu-west-1.amazonaws.com/out/v1/4d80592a43274cefae94215b1c18545d/index.mpd

nicoweilelemental commented 5 years ago

And Waqar spotted that we have a similar problem with he Livesim stream in multiperiod mode : https://vm2.dashif.org/livesim-dev/periods_60/segtimeline_1/testpic_6s/Manifest.mpd

epiclabsDASH commented 5 years ago

@nicoweilelemental, I think those streams are raising different type of issues. In the case of @waqarz one, it is broken since dash.js 2.7.0 and I guess the reason is it has segmenttimeline items which are empty (is this allowed?).

Regarding your url I am analyzing its timing info. Seems there are some inconsistencies in the timing info reported in segmentTimeline elements. I will get back to you with more detailed info.

waqarz commented 5 years ago

yes, https://vm2.dashif.org/livesim-dev/periods_60/segtimeline_1/testpic_6s/Manifest.mpd is not conforming according to validator. So the other one reported is more relevant.

z411 commented 5 years ago

I'm also experiencing the exact same behavior with this (conforming) MPD: https://tv.bienvenidoainternet.org/dash/bai.mpd

It is generated by nginx-rtmp. I'm not sure if it's caused by the same issue but the behavior is the same.

Edit: After some testing it seems the issue starts with dash.js 2.4.1, as the versions 2.4.0 and older don't seem to exhibit the issue.

Edit 2: Apparently it was a bug in the rtmp module for nginx. I grabbed and compiled this fork and the issue doesn't seem to happen anymore: https://github.com/sergey-dryabzhinsky/nginx-rtmp-module

eceozturk commented 5 years ago

Hi,

The conformance software consists of two validation parts:

  1. MPD validation, which checks if the MPD is valid according to the XML schema, if the MPD is formed according to DASH specification
  2. Segment validation, where the media pointed to by the MPD is downloaded (without mdat boxes's contents) and validated.

Currently, the conformance software (https://conformance.dashif.org/) does not support media segment validation for dynamic MPDs that contain SegmentTimeline as segment access. This means that only the MPD validation is performed when such an MPD is provided.

We have recently added the support for this (dynamic MPD with SegmentTimeline) in a beta version of the conformance software, which is accessible via http://54.72.87.160/test/current/Conformance-Frontend/Conformancetest.php. Please note that in case of dynamic MPD, we determine the current period (live edge) and compute a window of availability for segments within this period.

When I test the MPD provided in the issue, I have two findings:

  1. If the current period is the one that contains the segments with the naming index_video and index_audio, the segment validation logs the error: Program error! Requested information is at offset 2429, which is in a removed region at index 1 (offset: 2409, removed size: 1088044), exiting! When I check the content's header boxes, I see that the media content has moof - mdat - styp - sidx boxes in the given order. This is the reason why we get the above error (since segment validation tries to reach a box that appears to be after mdat).
  2. If the current period is the one that contains the segments with the naming "asset", the segment validation logs the error: error### Failed to process Adaptation Set 0, Representation 0! This error means that the segment validation could not be run. When I just check the initialization segment, I see that it is just 2 bytes and there is no definable ftyp box, etc. This is why the segment validation is not successful for this content.

Depending on this input, the findings above could be the reason why the playback is problematic at the period boundaries.

You can also test the provided MPD at http://54.72.87.160/test/current/Conformance-Frontend/Conformancetest.php for observing the abovementioned issues. I hope this helps with pinpointing the issue.

psykro commented 5 years ago

Hello There,

Not sure this is the same problem but we are facing the same type of issue here with the latest version of the reference player. I have tried with versions 2.6 to 2.7 and i have the same behaviour: the player fetches the segments from the first period (why the first ?), plays them and stops. It then reloads indefinitely the manifest and from time to time get some segments from the origin. So there are two issues for me:

Here is the manifest which was validated using the conformance check webpage above:

LiveMultiperiod.txt

Here are the chrome network logs:

scchrome

There is no network errors.

This may be a MPD error on our side, but this plays well with ShakaPlayer and Exoplayer

Maël (For the XCasters :), Nice to see you there Ece and Waqar)

davemevans commented 5 years ago

I am seeing the same problem as above - the player fetches and plays segments from the first period. Usually it stalls at the end of the period, but sometimes it loop those segments until they are no longer available.

Again, it may be that the content isn't quite right, but the stream plays fine in ShakaPlayer 😢

I can't provide a stream since our platform is event based and the streams expire very quickly. If I can work out a way, I'll send a DM to Jesus.

epiclabsDASH commented 5 years ago

Thanks @davemevans. I am with my hands (and head) fully put on segments request management so it can't better timing for taking a look at this. I will check this and your DM out later today.

We are hardly working on increasing resilience of dash.js when working with not totally right content. It is being hard given the amount of changes it is requiring but are almost done...... Thank you everyone for the patience. Thanks!

nicoweilelemental commented 5 years ago

@epiclabsDASH I think that our origin stream, which URL I mentioned previously in this thread, is a good sample to look at, not only ok from a DASH validator perspective, but also using the same init segments for all periods (which removes integrity risks possibly generated by SSAI) : https://f7b399c8cf81ac81.mediapackage.eu-west-1.amazonaws.com/out/v1/4d80592a43274cefae94215b1c18545d/index.mpd

It plays on Bitmovin, THEOplayer, Shaka, Exoplayer, but dot dash.js...

sandersaares commented 5 years ago

I took a look at https://f7b399c8cf81ac81.mediapackage.eu-west-1.amazonaws.com/out/v1/4d80592a43274cefae94215b1c18545d/index.mpd retrieved at 19 Mar 2019 08:19:40 with the following contents: index.mpd

I analyze it from the question of DASH and DASH-IF IOP conformance, not from a standpoint of "what players do" since players tend to accept all different types of erroneous content and judging by "what works where" does not help anyone produce valid content.

I note that the MPD does not declare conformance to DASH-IF IOP but in general, if you want your content to play well on different devices, you should definitely conform to DASH-IF IOP, so I assume you desire to do so.

I have the following comments:

Otherwise, I did not notice anything unusual. I suggest taking action on these two points to help improve the playability of this content.

I expect the requirement on <UTCTiming> to become a hard requirement in DASH-IF IOP v5. In current published versions it is only described as an option but really, it is critical in practice, so future version of IOP I expect will say so outright.

nicoweilelemental commented 5 years ago

Thanks for your feedback, @sandersaares I updated the MPD@minBufferTime to reflect the segments length but it doesn't change anything, the player behavior is still erratic at period boundaries. I can't add a UTCTiming node right now, it needs a new service build.

We have read in this thread that we can observe the same player problematic behavior with streams coming from several providers, and that those streams all pass the conformance check. I'm pretty sure that we will notice the same behavior with the Livesim stream once its conformance problems will have been fixed. In the meantime, people requiring multiperiod will continue to deploy their services on other players than dash.js. As much as we all love dash.js, I think it's fair to say that multiperiod has never been one of its strong points, and that it's still not.

z411 commented 5 years ago

I'm still having erratic behavior with SegmentTimeline. I'm not sure if it's related to others here, but sometimes the stream will play fine but sometimes it'll start playing with huge live delay (around 150s or more) and since the playlist is only half a minute long, the segments it's trying to seek to in the past don't exist anymore so it won't play.

When live, it'll happen sometimes and sometimes it'll work fine. I took snapshots of the mpd+segments that had the issue. (They're non-live snapshots so they'll stall after a while)

For example this one after loading it'll attempt to start with 70s of latency, but the playlist is only 60s long so it's way back in the past so it won't play: https://tv.bienvenidoainternet.org/snap7/bai.mpd

These have the same issue (2 minute long playlist, tries to start at 140s, plays erratically without sound): https://tv.bienvenidoainternet.org/snap4/bai.mpd https://tv.bienvenidoainternet.org/snap2/bai.mpd

This one works normally: https://tv.bienvenidoainternet.org/snap3/bai.mpd

I'm not sure if it's an issue with the .mpd or the player. The mpd passes the conformance test fine. The segment times and durations also seem fine to me. Could someone help me debug this?

epiclabsDASH commented 5 years ago

Hi @z411, I am preparing some changes that fix that erratic issue. I have been working on some issues related with multiperiod and segmenttimeline. Let me push that branch so you can have the opportunity of testing it. Thanks

z411 commented 5 years ago

@epiclabsDASH Got it. Thank you for response and your hard work, it's greatly appreciated.

psykro commented 5 years ago

Hello there,

@epiclabsDASH Any news on this ?

Many thanks !

kR

epiclabsDASH commented 5 years ago

Hi @psykropack. I will get back to you soon with a testing url. Sorry for the delay. We have the issue fixed (v3) but need to do some cleaning work before publishing it. Almost ready! I will keep you posted.

psykro commented 5 years ago

@epiclabsDASH Great ! We are ready to test it :)

Thanks !

kR

epiclabsDASH commented 5 years ago

This should be fixed in dash.js v3 -> #3003 (what a coincidence PR number!)

Url for testing: http://dashjsv3.surge.sh/samples/dash-if-reference-player/index.html

Any feedback will be more than welcome

nicoweilelemental commented 5 years ago

Hi @epiclabsDASH , all my MediaPackage streams work fine, but I still have problems with my MediaTailor streams after ad replacement: most of the times (but not always) the playback stops at the end of the ad tunnel and doesn't transition back to the live stream. We will investigate on our side also.

$TIME$ with Timeline / FULL https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/4d80592a43274cefae94215b1c18545d/index.mpd

$TIME$ with Timeline / COMPACT https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/2cbb07329ab1418c8f81bf82be0b39ec/index.mpd

$NUMBER$ with Timeline / FULL https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/262264840217463a87d4511cc85a57cc/index.mpd

$NUMBER$ with Timeline / COMPACT https://564fd68168794875b50e4a43a9e4b8c9.mediatailor.eu-west-1.amazonaws.com/v1/dash/cf6421621b389b384c1fd22e51603ee95db76ae0/dash-debug/out/v1/59ae202d9b7b406591cb34b1bcedd3f0/index.mpd

epiclabsDASH commented 5 years ago

Let me also get some debug data and share it with you. I will get back to you shortly.

epiclabsDASH commented 5 years ago

The only root of issues that I find is there is a small gap (0.4 seconds) between the last ad of the tunnel ad and the content.

[587128][BufferController][video] Buffered Range for type: video : 8657385.667001  -  8657445.907  currentTime =  8657448.838927 
[587128][BufferController][video] Buffered Range for type: video : 8657445.947001  -  8657463.667001  currentTime =  8657448.838927

That's the reason behind playback being stalled even though player has enough buffer (after the 0.4 seconds). Anyway, although not smoothly, dash.js should take care of this situation and jump that gap faster than it does (jump happens but after long time).

FYI, I am taking a look to:

I will keep you posted

psykro commented 5 years ago

Hi there,

@epiclabsDASH Thanks for working on this, that is really appreciated.

We will test it in our lab and come back to you.

dsilhavy commented 4 years ago

I did some further testing with the streams provided by @nicoweilelemental . I setup a small proxy server to filter audio and all video representations except one. Problem still occurs:

  1. Player crashes quite frequently before transitioning between the periods
  2. Sometimes (not always) there are gaps in the video buffer which lead to multiple TimeRange objects in video.buffered
  3. I observed some weird jumps in single periods. Player jumps 30 seconds from the live edge to the past.

Will do some further testing/investigating

nicoweilelemental commented 4 years ago

Hey Daniel,

Do you mean that these problems are caused by our streams, or just that the player has erratic behavior?

New test streams (replacing previously provided URLs): • Multi-period, compact manifest, number with timeline:https://d24rwxnt7vw9qb.cloudfront.net/v1/dash/e6d234965645b411ad572802b6c9d5a10799c9c1/All_Reference_Streams/4577dca5f8a44756875ab5cc913cd1f1/index.mpd • Multi-period, compact manifest, time with timeline: -https://d24rwxnt7vw9qb.cloudfront.net/v1/dash/e6d234965645b411ad572802b6c9d5a10799c9c1/All_Reference_Streams/91d37b0389de47e0b5266736d3633077/index.mpd • Multi-period, full manifest, number with timeline:https://d24rwxnt7vw9qb.cloudfront.net/v1/dash/e6d234965645b411ad572802b6c9d5a10799c9c1/All_Reference_Streams/ee565ea510cb4b4d8df5f48918c3d6dc/index.mpd • Multi-period, full manifest, time with timeline: https://d24rwxnt7vw9qb.cloudfront.net/v1/dash/e6d234965645b411ad572802b6c9d5a10799c9c1/All_Reference_Streams/6ba06d17f65b4e1cbd1238eaa05c02c1/index.mpd

dsilhavy commented 4 years ago

Right now my guess is that dash.js has a bug since the streams play stable in Shaka. I will do some further investigation and let you know what I find out

dsilhavy commented 4 years ago

@nicoweilelemental Regarding the jumps I described in my previous post. Is there a version of the stream without ads? I would like to check why the player jumps back in time.

dsilhavy commented 4 years ago

The jump in the livestream is caused by changes made in the previous release (https://github.com/Dash-Industry-Forum/dash.js/pull/3149) . After the buffer is cleared: earliestTime[streamInfo.id].started = false;

This leads to a seek triggered by the onBytesAppend function and we end up at the initialStartTime again. We need to find a way to fix this and not break the scenario described https://github.com/Dash-Industry-Forum/dash.js/issues/3146

nicoweilelemental commented 4 years ago

@dsilhavy here are the origin streams, without ads:

  1. DASH, multi-period, compact manifest, number with timeline: https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/4577dca5f8a44756875ab5cc913cd1f1/index.mpd
  2. DASH, multi-period, compact manifest, time with timeline: https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/91d37b0389de47e0b5266736d3633077/index.mpd
  3. DASH, multi-period, full manifest, number with timeline: https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/ee565ea510cb4b4d8df5f48918c3d6dc/index.mpd
  4. DASH, multi-period, full manifest, time with timeline: https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/6ba06d17f65b4e1cbd1238eaa05c02c1/index.mpd
dsilhavy commented 4 years ago

@nicoweilelemental : An issue that causes dash.js to crash frequently with 1)DASH, multi-period, compact manifest, number with timeline is that in some cases the MPD update removes periods and adds new periods without prior notification. As an example:

Common case in asset 1) Period 1 -> MPD Update Period 1 Period 2 -> MPD Update Period 2

Edge case which causes a crash Period 1 -> MPD Update Period 2

In the edge case Period 1 is removed immediately and Period 2 is not introduced before end of Period 1. Concrete example of two consecutive MPD updates:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2020-04-03T10:56:09" minimumUpdatePeriod="PT6S" availabilityStartTime="2019-11-21T02:22:25.552000+00:00" minBufferTime="PT30S" suggestedPresentationDelay="PT25.000S" timeShiftBufferDepth="PT59.000S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT11608355.080S" id="2032953">
    <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2020-04-03T10:54:43.833Z"/>
    <AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
      <SegmentTemplate timescale="60000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1574288123" initialization="index_video_$RepresentationID$_0_init.mp4?m=1574288123" startNumber="2032957" presentationTimeOffset="696501304800">
        <SegmentTimeline>
          <S t="696502396800" d="360000" r="9"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="19" width="480" height="270" frameRate="30/1" bandwidth="749952" codecs="avc1.4D4015"/>
    </AdaptationSet>
    <BaseURL>https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/4577dca5f8a44756875ab5cc913cd1f1/</BaseURL>
  </Period>
</MPD>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:scte35="urn:scte:scte35:2013:xml" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" id="201" type="dynamic" publishTime="2020-04-03T11:00:13" minimumUpdatePeriod="PT6S" availabilityStartTime="2019-11-21T02:22:25.552000+00:00" minBufferTime="PT30S" suggestedPresentationDelay="PT25.000S" timeShiftBufferDepth="PT59.000S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
  <Period start="PT11608535.280S" id="2032984">
    <SupplementalProperty schemeIdUri="urn:scte:dash:utc-time" value="2020-04-03T10:57:44.033Z"/>
    <AdaptationSet mimeType="video/mp4" segmentAlignment="true" startWithSAP="1" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
      <SegmentTemplate timescale="60000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1574288123" initialization="index_video_$RepresentationID$_0_init.mp4?m=1574288123" startNumber="2032999" presentationTimeOffset="696512116800">
        <SegmentTimeline>
          <S t="696517036800" d="360000" r="9"/>
        </SegmentTimeline>
      </SegmentTemplate>
      <Representation id="19" width="480" height="270" frameRate="30/1" bandwidth="749952" codecs="avc1.4D4015"/>
    </AdaptationSet>
    <BaseURL>https://ccf3786b925ee51c.mediapackage.us-east-1.amazonaws.com/out/v1/4577dca5f8a44756875ab5cc913cd1f1/</BaseURL>
  </Period>
</MPD>

In this case no duration of Period 2032953 was given before introducing Period 2032984. dash.js is stuck in 2032953 and never resumes playback. Is this standard compliant? The architecture of dash.js makes it not easy to resolve this problem. I want to make sure that we need to support this before thinking about a rearchitecture.

nicoweilelemental commented 4 years ago

@dsilhavy I believe that the second manifest is compliant considering that there is 60 seconds of content in the SegmentTimeline and that MPD timeShiftBufferDepth is equal to "PT59.000S". Section 13.6.3 of https://dashif-documents.azurewebsites.net/Guidelines-TimingModel/master/Guidelines-TimingModel.html#timing-mpd-updates-remove-content says that this is a valid case for removing the previous period: "Expired periods and segment references that no longer overlap the time shift buffer may be removed from the start of the MPD timeline."

dsilhavy commented 4 years ago

@nicoweilelemental : Short update: We fixed issues regarding live and SegmentTimeline playback. I checked the origin stream 1 (DASH, multi-period, compact manifest, number with timeline) without ads in the nightly version of dash.js and it ran for over 30minutes without crashes. I still see issues in the streams which includes ads, we will investigate further.

nicoweilelemental commented 4 years ago

Thanks for the update @dsilhavy, appreciated! I presume that the remaining issues with the streams with ads are related to the Period 1 > MPD Update > Period 2 edge case?

dsilhavy commented 4 years ago

@nicoweilelemental Yes and potential gaps between the periods.

dsilhavy commented 4 years ago

@nicoweilelemental I am testing some modifications I made in terms of gap handling and multiperiod prebuffering. The first results with one ad in between two content periods look good (DASH, multi-period, compact manifest, number with timeline, video only, filtered audio for now). There are small gaps when transitioning from the content to the ad which are handled well by dash.js.

However, what causes problems is the short 2 second elemental ad/bumper after the main ad. This bumper is only inserted a few times. I have an idea what might causes problems but it would be good to have a stream with multiple ads, especially shorter ones like the bumper. Is this possible?

Thanks

nicoweilelemental commented 4 years ago

Hi @dsilhavy Thanks for the investigation and the modifications. I prepared a new test url with the following lineup of ads: 2s+2s+14s (with sound)+2s+2s+2s+2s which is 26 seconds long. As the ad pod is 31 seconds long, you should also see 5 seconds of fill slate (AWS Elemental logo, no sound) at the end, as it can be seen in Shaka and Bitmovin players.

https://b659822d877f485fa801a06d4757d3ce.mediatailor.us-east-1.amazonaws.com/v1/dash/e6d234965645b411ad572802b6c9d5a10799c9c1/Multiperiod_Debug/4577dca5f8a44756875ab5cc913cd1f1/index.mpd

dsilhavy commented 4 years ago

An update on the multiperiod status.

Fixed issues

Observations

Those values are coming directly from the HTML5 video element. Haven't found the reason for this yet. I am updating the corresponding branch regularly: https://github.com/fraunhoferfokus/dash.js/tree/fix-multiperiod

dsilhavy commented 4 years ago

Next update:

I hosted the current multiperiod branch here: https://reference.dashif.org/dash.js/fix-multiperiod/samples/dash-if-reference-player/index.html

Improvements / Fixes

nicoweilelemental commented 4 years ago

Thanks for the update, @dsilhavy I’ll test in a few days when I’m back from vacations. This is exciting!

dsilhavy commented 4 years ago

Small update

nicoweilelemental commented 4 years ago

I did a quick test with the latest stream URL provided on this thread: out of 5 ad pods, all were successful but one where the playback was frozen for most of the short 2s man/woman walking, and the return to program didn't work - dry buffer staying dry. On this failed attempt I didn't join during the ad pod, but before it. Overall it's a huge improvement, seems like not much is missing to make it rock solid!

RufaelDev commented 4 years ago

@dsilhavy thanks for the hard work on this, we also have a test stream for you: https://pl8q5ug7b6.execute-api.eu-central-1.amazonaws.com/.mpd it plays very well, and you even fixed an issue that we had at period boundaries (2 second freeze), and playback is smooth now, so thanks for all this!

dsilhavy commented 4 years ago

@nicoweilelemental Thanks for testing. I am having a hard time producing errors which on one hand is good but also makes debugging harder. Do you remember if the dry buffer occured shortly after the start or longer time into the stream?

@RufaelDev Thanks for testing I add this stream to my testvectors

dsilhavy commented 4 years ago

I updated https://reference.dashif.org/dash.js/fix-multiperiod/samples/dash-if-reference-player/index.html

nicoweilelemental commented 4 years ago

Hi @dsilhavy I've run the latest Elemental test stream the updated player for a few hours without major hiccups, I only saw a long return to program transition once. The player was displaying the frozen first frame of soccer content until the audio+video buffers reached a surprisingly high 25 seconds, at which point the playback resumed. Other than that, all good !

dsilhavy commented 4 years ago

@nicoweilelemental Thanks for testing, I will try to reproduce the buffering error.

dsilhavy commented 4 years ago

Multiperiod has been fixed and improved in #3360 and is now merged into development. Further minor improvements have been made in the meantime. In addition the Elemental teststreams have been added to the reference client. The last tests looked good, which is why I will close this issue for now in order to progress in this sprint.

Multiperiod is an ongoing development topic, so anyone watching this issue: If you see problems in the nightly build with a particular multiperiod stream please create an issue for that.

http://reference.dashif.org/dash.js/nightly/samples/dash-if-reference-player/index.html

If any more problems with one of the streams mentioned here are observed please comment. I will consider reopening this then.

RufaelDev commented 4 years ago

Daniel, thanks for the work, compared to 3.1.2 and shaka, our test stream https://pl8q5ug7b6.execute-api.eu-central-1.amazonaws.com/.mpd crashes after some time, I error-3 1 3 attached the error, this only happens in 3.1.3 and may be related to some of the updates

dsilhavy commented 4 years ago

Hi Rufael, thanks for reporting. In which browser/OS are you testing?

RufaelDev commented 4 years ago

The subtitles issue on chrome, edge etc. moved to another issue #3395