-
Notifications
You must be signed in to change notification settings - Fork 1.7k
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
Catch-up player starts from beginning when manifest transitions from 'dynamic' to 'static' #3263
Comments
Hi @mrp1977, |
@mrp1977 please maintain the source stream available so that we can use it to fix and test |
We have to consider also the DVR window range since the timeShiftBufferDepth is not provided in the dynamic manifests. Thus DVR window is considered infinite and then start from 0 (1/1/1970) |
When the transition from dynamic to static happens is a @mediaPresentationDuration attribute added? If so presentationDuration should be equal to @mediaPresentationDuration Edit: Or does your question apply to dynamic streams without tsbd in general? |
The question applies to dynamic streams without tsbd in general |
Hi,
These being the asks, could you kindly clarify if the intended feature request above is for the same purpose of adding an accurate 'switchToLiveArchiveOnEOS' option? |
I'am not sure I fully understood but I would answer yes. |
Thanks for picking up and fixing this issue so quickly @bbert. We (@mrp1977 and me, both working for Unified Streaming) have tested playback in the nightly build and the player no longer stalls in Chrome and Firefox when the MPD switches from 'dynamic' to 'static', as expected. As for your question about 'timeShiftBufferDepth': in the past our sub-clipping behavior for live scenarios would include a growing value for this as long as the MPD was still dynamic, but we noticed that players didn't handle that well. Instead of re-adding 'timeShiftBufferDepth', would it perhaps be a good and valid way to solve your issue by aligning 'availabilityStartTime' with the start of the requested sub-clip (while also adding a 'presentationTimeOffset' to compensate for the different 'availabilityStartTime', so that the UNIX epoch-based timestamps in the URLs can be maintained)? Or do you perhaps have other suggestions? Unfortunately, the DASH-IF Guidelines for Implementation do not offer very clear guidance on this (version 4.3, paragraph 4.6.2):
And the work-in-progress version has even less to say about it: https://dashif-documents.azurewebsites.net/Guidelines-TimingModel/master/Guidelines-TimingModel.html#timing-mpd-updates-theend |
The problem is that until the guidelines are not specified for this use case, servers and players will try to adapt to each other. One suggestion, on player side, would be:
What do you think? @dsilhavy ? |
@bbert, thank you very much for your response. In this instance, the vbegin is mentioned as being behind the currentTime. When the user gives a vbegin, 4 minutes behind current time, they would expect to see the playback start at that instant, rather than the player at live edge and then start from the beginning on completion of transition. Could you kindly correct me if not accurate?
Would you advise that I start another issue thread for considering the switchToArchive feature for implementation? It may be suited for recovery from stream failover too. Regards
|
Regarding timeShiftBufferDepth problem:
|
Yes, you can start the playback by providing the vbegin time as a start time to the player.
What do you mean by alter the start timestamp?
One point is that some servers already exist and are deployed with missing 'timeShiftBufferDepth' and availabilityStartTime set to 1/1/1970 |
I've pushed a PR #3294 that proposes a fix for determining the segments availability range and thus the DVR window range in case the timeShiftBufferDepth is not provided in manifest. At this stage, when loading a test stream from your servers, it starts playback from beginning since player fails to find a valid segment at live edge (@dsilhavy maybe related to #3217 which I broke recently). But this should be fixed very soon. Thanks to this PR, the DVR window will increase progressively, getDuration() returns the DVR window range, i.e. from [0, <current epoch time - vbegin>] up to [0, <vend - vbegin>] This is a proposal but we can discuss on it |
Thanks @bbert. Although I'm not sure exactly what you mean by:
Do you refer to any 'normal' live stream from our servers, or only one that is a sub-clip with a start time in the past and an end time in the future? In the first case we do add 'timeShiftBufferDepth', in the second we don't. If your statement refers to only the use case with a sub-clip that has an end time in the future, I think it makes perfect sense for playback to begin at the start of that clip (instead of the live edge). |
@bbert Thanks I will check the PR Regarding live edge: This was fixed here: #3285 . There is still an issue in some cases when seeking back within the DVR window and returning to live. However, starting ad the live edge should work in the nightly. I remember we had a similar PR adjusting the DVR window for SegmentTimeline manifests based on the elements in the MPD. However, this broke multiperiod which is why we came up with #3285. I will bring up this topic in one of the IOP calls. Question from my side: In the sub-clip case in which start is in the past and end is in the future: Why do you expect the player to begin at the start of the clip? I would expect this to be a dynamic manifest for which we calculate the live edge. What would be the difference compared to a "normal" live stream? |
Thanks @dsilhavy. Your plan to bring this topic up for discussion in one of the IOP calls sounds great. As active contributors in DASH-IF we would happily join such a call to share our perspective, so if you could notify us beforehand that would be much appreciated. As for your question about whether playback of this type of sub-clip should start at the beginning or at the live edge, I must admit that my previous statement was probably made too hastily: there are definitely good reasons to want to start playback at the live edge as well. I don't think it's a clear cut case of one over the other, but rather that it depends on context and type of content. |
I was refering to sub-clip use case. Normally player should start at live edge, but you can specify to start playback at vbegin using url anchor. (But in current version it does start at vbegin incidentally)
Sub-clip case correspond to NPVR-like streams, then when you start watching your record it may be more suitable for users to start watching at the beginning. But you're right by default it should start at live edge, but as @boy-vd said, it depends of the context and application can make the choice to start at vbegin |
@bbert You are right thanks for the hint. Because the DVR window is set to infinity one of the checks in StreamProcessor fails and playback starts from the beginning of the timeline:
I open a separate issue for that. |
@boy-vd We have a biweekly call with Thomas Stockhammer and Ece Öztürk from Nomor. Next one is on Tuesday: Tuesday, June 22, 2020 I send you the dial in data on Slack |
I close this issue, as the original problem was fixed |
Environment
Steps to reproduce
The below will give a time relevant URL which can then be used in the player.
echo "https://live.unified-streaming.com/scte35/scte35.isml/.mpd?vbegin=$(($(date -u +%s)-240))&vend=$(($(date -u +%s)+60))"
using vbegin and vend in Unified Streaming software returns a manifest between the stated periods
no
Observed behaviour
Describe what the player is doing that is unexpected or undesired behaviour.
Adding a vbegin in the past and a vend in the future to a livestream URL when the vend reaches wallclock time and the manifest transitions from a 'dynamic' to a 'static' rather than continuing to play the stream the player stalls and then starts from the vbegin time again.
Expected behaviour - Despite manifest transition from dynamic to static content should continue playing until vend.
Manifest changes as per https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf section 4.6
Examples of both static and dynamic manifests are attached.
dynamicmanifest.txt
staticmanifest.txt
Console output
The text was updated successfully, but these errors were encountered: