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.13k stars 1.68k forks source link

dash.js doesn't work in case @timeShiftBufferDepth absent #661

Closed alexpokotilo closed 9 years ago

alexpokotilo commented 9 years ago

According to the standard @timeShiftBufferDepth is optional. in console I see(last line looks most important)

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 48ms, objectiron: 4ms, total: 0.052s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Fri Jul 24 2015 20:03:58 GMT+1000 (VLAT) Debug.js:115 Server time: Fri Jul 24 2015 20:03:58 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -598 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 No audio data. Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 84.167 Debug.js:115 [video] Index for time 84.167 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of null

manifest example <?xml version="1.0" encoding="UTF-8"?> <MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xlink="http://www.w3.org/1999/xlink" xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minimumUpdatePeriod="PT10.793S" availabilityStartTime="2015-07-24T02:07:25Z" minBufferTime="PT6.0S">

http://127.0.0.1:8081/live/stream/manifest.mpd?nimblesessionid=22 once I add timeShiftBufferDepth with any values it starts working
davemevans commented 9 years ago

Streams without timeShiftBufferDepth play correctly for me - I modified a manifest returned from http://vm2.dashif.org/livesim-dev/testpic_2s/Manifest.mpd to remove that attribute and playback starts.

Do you have a public live stream available?

alexpokotilo commented 9 years ago
dsparacio commented 9 years ago

Doesn't the spec say that @timeShiftBufferDepth must be present and set to 0 if not a valid buffer depth? Looking now but I recall this.

greg80303 commented 9 years ago

@AkamaiDASH IOP 3.0 states that @timeShiftBufferDepth is "optional, but recommended"

alexpokotilo commented 9 years ago

It looks like @timeShiftBufferDepth is not a main problem here but it depend how often player fails. Please take a look at logs below. most of the time playback failed and "Debug.js:115 [video] Index for time 0 is -1 " message appears. but several times it starts playing. Link I provided http://146.185.139.54/live/stream/manifest.mpd is live stream from Nimble Streamer. it worked fine with both bitmovin and dash.js(1.3 and 1.4) but suddenly it stop working with dash.js for live streams. Still works fine with bitmovin. What's wrong with my manifest ?

Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 6ms, objectiron: 6ms, total: 0.012s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:38 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:38 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -555 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 531.167 Debug.js:115 [video] Index for time 531.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 522.1030000000001 Debug.js:115 [audio] Index for time 522.1030000000001 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259 Debug.js:115 [video] stop Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 1ms, objectiron: 2ms, total: 0.003s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:41 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:41 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -785 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 531.167 Debug.js:115 [video] Index for time 531.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 522.1030000000001 Debug.js:115 [audio] Index for time 522.1030000000001 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259 Debug.js:115 [video] stop

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 1ms, objectiron: 30ms, total: 0.031s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:43 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:43 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -954 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 531.167 Debug.js:115 [video] Index for time 531.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 522.187 Debug.js:115 [audio] Index for time 522.187 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259 Debug.js:115 [video] stop

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 3ms, objectiron: 2ms, total: 0.005s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:45 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:45 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -557 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 531.167 Debug.js:115 [video] Index for time 531.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 522.187 Debug.js:115 [audio] Index for time 522.187 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259 Debug.js:115 [video] stop

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 2ms, objectiron: 1ms, total: 0.003s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:46 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:46 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -934 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 523.667 Debug.js:115 [video] Index for time 523.667 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 2ms, objectiron: 1ms, total: 0.003s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:48 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:48 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -320 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 523.667 Debug.js:115 [video] Index for time 523.667 is -1 ScheduleController.js:357 Uncaught TypeError: Cannot read property 'startTime' of nullonLiveEdgeSearchCompleted @ ScheduleController.js:357dijon.System.notify @ dijon.js:599notify @ Notifier.js:67onSearchCompleted @ LiveEdgeFinder.js:45callbackFunc @ RulesController.js:175execute @ LiveEdgeWithTimeSynchronizationRule.js:59applyRules @ RulesController.js:191onStreamUpdated @ LiveEdgeFinder.js:60dijon.System.notify @ dijon.js:599notify @ Notifier.js:67checkIfInitializationCompleted @ Stream.js:160initializeMedia @ Stream.js:139activate @ Stream.js:308onMediaSourceOpen @ StreamController.js:259

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 37ms, objectiron: 2ms, total: 0.039s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:49 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:49 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -608 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 546.167 Debug.js:115 [video] Index for time 546.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 537.191 Debug.js:115 [audio] Index for time 537.191 is 0 Debug.js:115 [audio] start Debug.js:115 [audio] Getting the request for time: 0 Debug.js:115 [audio] Index for time 0 is -1 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] start Debug.js:115 [audio] Getting the request for time: 0 Debug.js:115 [audio] Index for time 0 is -1 Debug.js:115 loaded video:Initialization Segment:NaN (200, 0ms, 346ms) Debug.js:115 [video] Initialization finished loading Debug.js:115 [video] Stalling Buffer Debug.js:115 [video] Waiting for more buffer before starting playback. Debug.js:115 loaded audio:Initialization Segment:NaN (200, 0ms, 543ms) Debug.js:115 [audio] Initialization finished loading Debug.js:115 [audio] Stalling Buffer Debug.js:115 [audio] Waiting for more buffer before starting playback. Debug.js:115 [video] stop Debug.js:115 [audio] stop

Debug.js:115 Playback initiated! Debug.js:115 Parsing complete: ( xml2json: 1ms, objectiron: 2ms, total: 0.003s) Debug.js:115 Manifest has been refreshed. Debug.js:115 Manifest has loaded. Debug.js:115 Local time: Tue Jul 28 2015 10:43:51 GMT+1000 (VLAT) Debug.js:115 Server time: Tue Jul 28 2015 10:43:51 GMT+1000 (VLAT) Debug.js:115 Difference (ms): -123 Debug.js:115 MediaSource is open! Debug.js:115 [object Event] Debug.js:115 Duration successfully set to: 1.7976931348623157e+308 Debug.js:115 Added 0 inline events Debug.js:115 video codec: video/mp4;codecs="avc1.42c01e" Debug.js:115 [video] stop Debug.js:115 audio codec: audio/mp4;codecs="mp4a.40.2" Debug.js:115 [audio] stop Debug.js:115 No text data. Debug.js:115 No fragmentedText data. Debug.js:115 [video] Getting the request for time: 546.167 Debug.js:115 [video] Index for time 546.167 is 0 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] Getting the request for time: 537.191 Debug.js:115 [audio] Index for time 537.191 is 0 Debug.js:115 [audio] start Debug.js:115 [audio] Getting the request for time: 0 Debug.js:115 [audio] Index for time 0 is -1 Debug.js:115 [video] start Debug.js:115 [video] Getting the request for time: 0 Debug.js:115 [video] Index for time 0 is -1 Debug.js:115 [audio] start Debug.js:115 [audio] Getting the request for time: 0 Debug.js:115 [audio] Index for time 0 is -1 Debug.js:115 loaded audio:Initialization Segment:NaN (200, 0ms, 354ms) Debug.js:115 [audio] Initialization finished loading Debug.js:115 [audio] Stalling Buffer Debug.js:115 [audio] Waiting for more buffer before starting playback. Debug.js:115 loaded video:Initialization Segment:NaN (200, 0ms, 506ms) Debug.js:115 [video] Initialization finished loading Debug.js:115 [video] Stalling Buffer Debug.js:115 [video] Waiting for more buffer before starting playback. Debug.js:115

alexpokotilo commented 9 years ago

@greg80303 http://vm2.dashif.org/livesim-dev/testpic_2s/Manifest.mpd doesn't comply with IOP 3 as audio and video segments delivered together but IOP says all media components should be delivered in separate segments.

alexpokotilo commented 9 years ago

@AkamaiDASH please find more details. if I add more that 4 segments it starts working. I've checked the code and see the following:

MediaPlayer.dependencies.PlaybackController .... getLiveDelay: function(fragmentDuration) .... delay = fragmentDuration * liveDelayFragmentCount;

so delay by default will be 4(liveDelayFragmentCount as set to 4 by default) * fragmentDuration;

MediaPlayer.dependencies.ScheduleController = function () ... onLiveEdgeSearchCompleted = function(e) ... startTime = liveEdgeTime - Math.min((self.playbackController.getLiveDelay(currentTrackInfo.fragmentDuration)), manifestInfo.DVRWindowSize / 2), .....

     request = self.adapter.getFragmentRequestForTime(self.streamProcessor, currentTrackInfo, startTime, {ignoreIsFinished: true});

...

so in case if video just begin or have 1-4 segments startTime = liveEdgeTime-Math.min((self.playbackController.getLiveDelay(currentTrackInfo.fragmentDuration)), will always be negative. in case manifest have less than 4 segments startTime will always jump to wrong value and request = self.adapter.getFragmentRequestForTime(self.streamProcessor, currentTrackInfo, startTime, {ignoreIsFinished: true}); will always return request == null.

It's an issue for sure especially for TIME-BASED manifest where I specify explicitly and player has valid and updated segment list with exact value

davemevans commented 9 years ago

There does appear to be more than one bug here, not least because segmentDuration is not fixed for segmentTimeline but the player assumes it is.

Have you tried changing the liveDelayFragmentCount to zero using the API on MediaPlayer?

There are a couple of other issues I can see:

1) Your logs imply time synchronisation occurring, but you have not specified a UTCTiming element in the manifest. This implies you must be using an old version of the codebase. Please pull the latest development branch and use that as a known issue with segmentTimeline and time sync has been fixed.

2) The availabilityStartTime in your manifest is changing. See 23009-1 8.4.2 "When the MPD is updated, the value of MPD@availabilityStartTime shall be the same in the original and the updated MPD".

Finally, http://vm2.dashif.org/livesim-dev/testpic_2s/Manifest.mpd definitely is delivering unmultiplexed media - the dev tools and console output confirm this.

alexpokotilo commented 9 years ago

@bbcrddave "There does appear to be more than one bug here, not least because segmentDuration is not fixed for segmentTimeline but the player assumes it is." you mean that player wants to have segment time and duration as integral count of timescale ? but what should I do in case I get stream from rtmp source and rtmp timescale is 1000 but video frame rate is 24 fps ? so duration cannot be "pretty number". If player assume that it's a bug. What do you think ?

"Have you tried changing the liveDelayFragmentCount to zero using the API on MediaPlayer?" No I have not. I saw this api call but I want player works with my server without api calls. I really cannot get why player cannot check if delay is to big so starttime is negative and just set delay to lower value. now player tries to play 4 * segment duration before availability time oflast segment. But this calculation is very strange as segment durations may be different for all segments and this will not work for initials segments as delay will longer than last segment availability end time. I guess this should be fixed in player.

"1) Your logs imply time synchronisation occurring, but you have not specified a UTCTiming element in the manifest. This implies you must be using an old version of the codebase. Please pull the latest development branch and use that as a known issue with segmentTimeline and time sync has been fixed." thanks a lot ! I'll take a look at UTCTiming element description in IOP v3 and add it to my manifest. I implemented server using dash standard and did not work with IOS before. I used http://dashif.org/reference/players/javascript/1.4.0/samples/dash-if-reference-player/index.html previously to check my DASH workflow and didn't check dev branch. Could you please give me a link to the issue already fixed ? is there any link there latest dev branch version deployed in web so I can check it without checkout ?

"Finally, http://vm2.dashif.org/livesim-dev/testpic_2s/Manifest.mpd definitely is delivering unmultiplexed media - the dev tools and console output confirm this." my fault. so sorry here. number-based manifest confused me. you're right

davemevans commented 9 years ago

Sorry, no. I meant the second thing you said - that the player seems to assume that the segmentDuration of the first segment in the timeline is the duration of all segments. That appears to be a bug to me. Perhaps best to open a new issue with more specific details?

I really cannot get why player cannot check if delay is to big so starttime is negative and just set delay to lower value.

Agreed. I have submitted a PR to ensure starttime is never negative but it is has not been merged yet (#652)

Link to fixed issue: #627. UTCTiming isn't mandatory - your server may legitimately choose not to insert. The bug was that the player attempted to synchronise anyway, even when that was not appropriate.

There is a nightly dev player hosted at http://vm2.dashif.org/dash.js/samples/dash-if-reference-player/index.html

alexpokotilo commented 9 years ago

Sorry, no. I meant the second thing you said - that the player seems to assume that the segmentDuration of the first segment in the timeline is the duration of all segments. That appears to be a bug to me. Perhaps best to open a new issue with more specific details? not a problem at all - I can file another ticket and we can close this one.

I really cannot get why player cannot check if delay is to big so starttime is negative and just set delay to lower value.

Agreed. I have submitted a PR to ensure starttime is never negative but it is has not been merged yet (#652 https://github.com/Dash-Industry-Forum/dash.js/pull/652)

yep. it's exactly I found debugging today. thanks

Link to fixed issue: #627 https://github.com/Dash-Industry-Forum/dash.js/pull/627. UTCTiming isn't mandatory - your server may legitimately choose not to insert. The bug was that the player attempted to synchronise anyway, even when that was not appropriate.

There is a nightly dev player hosted at http://vm2.dashif.org/dash.js/samples/dash-if-reference-player/index.html

you rock! thanks a lot!

— Reply to this email directly or view it on GitHub https://github.com/Dash-Industry-Forum/dash.js/issues/661#issuecomment-125563234 .

alexpokotilo commented 9 years ago

submitted #673 against delay calculation for SegmentTimeline manifests.