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

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

Closed
5 tasks done
nicoweilelemental opened this issue Feb 27, 2019 · 50 comments
Closed
5 tasks done
Assignees
Milestone

Comments

@nicoweilelemental
Copy link

nicoweilelemental commented Feb 27, 2019

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
Copy link
Author

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
Copy link
Author

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
Copy link
Contributor

@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
Copy link
Contributor

waqarz commented Feb 28, 2019

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
Copy link

z411 commented Mar 2, 2019

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
Copy link

eceozturk commented Mar 4, 2019

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
Copy link

psykro commented Mar 8, 2019

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:

  • Why does it play from the first period although it is a live manifest (dynamic type)
  • Why it stops at period boundary

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
Copy link
Contributor

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
Copy link
Contributor

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
Copy link
Author

@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
Copy link
Member

sandersaares commented Mar 19, 2019

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:

  • This MPD has no clock synchronization information embedded. For correct playback timing, client and packager clocks must be synchronized and the method of synchronization must be signaled in the MPD. Proper content requires at least one <UTCTiming> element that carries this data and that the packager also follows this clock, not only emits it in the MPD.
  • MPD@minBufferTime is 30 seconds which is a questionable value. This attribute is used to indicate the minimum buffer level the player must keep to avoid decoder stalls when it is loading data at real-time speed (1 second worth of data per second). Generally, this will either be one segment or less (depending on internal sample structure of a segment and how many forward references between the samples exist). 30 seconds is a very high value that is not likely to be realistic. Do not use this value to guide player segment buffering behavior - this is a codec parameter, not something to be used for networking purposes.

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
Copy link
Author

nicoweilelemental commented Mar 20, 2019

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
Copy link

z411 commented Mar 22, 2019

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
Copy link
Contributor

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
Copy link

z411 commented Mar 22, 2019

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

@psykro
Copy link

psykro commented May 9, 2019

Hello there,

@epiclabsDASH Any news on this ?

Many thanks !

kR

@epiclabsDASH
Copy link
Contributor

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
Copy link

psykro commented May 22, 2019

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

Thanks !

kR

@epiclabsDASH
Copy link
Contributor

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

@epiclabsDASH
Copy link
Contributor

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

@epiclabsDASH
Copy link
Contributor

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:

  • Your manifest, to be sure the 0.4 seconds gap is not coming from dash.js skipping a possible very short last segment.
  • To our jump gap logic.

I will keep you posted

@psykro
Copy link

psykro commented Jul 24, 2019

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 dsilhavy added this to the 3.1.0 milestone Feb 3, 2020
@dsilhavy dsilhavy self-assigned this Feb 3, 2020
@dsilhavy
Copy link
Collaborator

dsilhavy commented Feb 7, 2020

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
Copy link
Author

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
Copy link
Collaborator

dsilhavy commented Apr 3, 2020

@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
Copy link
Author

nicoweilelemental commented Apr 7, 2020

@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 dsilhavy modified the milestones: 3.1.0, 3.1.1 Apr 14, 2020
@dsilhavy
Copy link
Collaborator

dsilhavy commented May 6, 2020

@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
Copy link
Author

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
Copy link
Collaborator

dsilhavy commented May 7, 2020

@nicoweilelemental Yes and potential gaps between the periods.

@dsilhavy dsilhavy modified the milestones: 3.1.1, 3.1.2 May 13, 2020
@dsilhavy
Copy link
Collaborator

@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
Copy link
Author

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 dsilhavy modified the milestones: 3.1.2, 3.1.3 Jul 24, 2020
@dsilhavy
Copy link
Collaborator

dsilhavy commented Jul 27, 2020

An update on the multiperiod status.

Fixed issues

  • Prebuffering of the new period now starts when audio and video of the previous period are finished buffering
  • dash.js now prebuffers multiple upcoming periods. The problem before was that dash.js was only prebuffering a single period which lead to problems and playback stalling for short periods
  • While prebuffering the new period the Sourcebuffer.timestampOffset was overwritten by the current period. This is fixed now.

Observations

  • I debugged against the stream provided by @nicoweilelemental . It works in Chrome for video only, I can see a smooth transition between the periods and the player jumps over small gaps at the beginning of the periods. In dash.js 3.1.2 playback is stalling frequently.
  • If I use the original stream with audio, it plays well in Firefox. However, Chrome frequently crashes and I can observe some weird behavior. The currentTime of the videolement is within the buffer range, but still the playback stalls. As an example:
Range 0: start 21430672.487333 end 21430690.064665
Range 1: start 21430690.130333 end 21430711.749999
Currenttime: 21430692.996954

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
Copy link
Collaborator

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

  • Use appendWindowStart and appendWindowEnd to set buffer ranges according to Period@start and period durations. This needs further testing.
  • Improve gap handling: Do not wait for playback to stall but instead actively jump over gaps in the timeline prior to reaching them
  • For testing: Adjusted the InsufficientBufferRule in order to buffer more data for audio. This enables us to prebuffer multiple periods with audio.
  • Fixed various minor issues for instance related to rounding of values

Observations

  • I saw all five teststreams mentioned here and here running for at least five minutes (that's when I stopped testing) with multiple period transitions and gap jumps

Next steps

  • The current code base is by no means ready for merging. However, I would like to encourage everyone who saw multiperiod problems before to test the behavior in the hosted branch.
  • @nicoweilelemental Would be nice to confirm my findings if you find some time.
  • The changes only work for unprotected content, I did not test with protected streams

@nicoweilelemental
Copy link
Author

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

@dsilhavy
Copy link
Collaborator

dsilhavy commented Aug 3, 2020

Small update

  • I some rare cases I see problems when joining the stream in one of the short ad periods.
  • I received additional related test vectors with gaps in VoD and livestreams. Added the following fixes:
    • Added gap jump at playback start
    • Avoid endless loop if no live edge could be calculated because of a missing DVR window for ad periods. Need to investigate further why no DVR window is available.

@nicoweilelemental
Copy link
Author

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
Copy link

RufaelDev commented Aug 4, 2020

@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
Copy link
Collaborator

dsilhavy commented Aug 6, 2020

@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
Copy link
Collaborator

dsilhavy commented Aug 6, 2020

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

  • Added support for period switch when the upcoming periods can not be prebuffered. In this case stream will stall and the gap handler will jump to the end of the current period, initiating a period switch to the upcoming period. Transition will not be as smooth but worked for the Elemental content when disabling the prebuffering feature. Might help with situations in which the player ran into a dry buffer and does not recover

@nicoweilelemental
Copy link
Author

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
Copy link
Collaborator

dsilhavy commented Aug 7, 2020

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

@dsilhavy
Copy link
Collaborator

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
Copy link

RufaelDev commented Aug 25, 2020

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
Copy link
Collaborator

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

@RufaelDev
Copy link

RufaelDev commented Sep 4, 2020

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

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

10 participants