-
Notifications
You must be signed in to change notification settings - Fork 1.4k
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
Support playing VOD with non-zero first Period start #1884
Comments
For your You have a You have a We interpret VOD to always start at 0 and play to the duration. This means that for your content, there will be 432100 hours of no content at the beginning of your content. Usually, the |
@ssadovski007, what piece of software created this content? Can you file a bug with them? |
Sorry but I am not sure I understand that correctly. Given |
This is VOD content, so we don't use The The So basically, for VOD content, the video always starts at 0 and goes to See this doc for more info on the presentation timeline. |
@TheModMaker thanks for the explanation. It's clear that
However, I am not convinced yet that Please let me explain with a reference to https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf spec. As per the following extracts from the spec (please ref to the full spec by the link above)
This is exactly what we try to achieve: to have live content recorded as separate programs (catchups). Going down into sub-sections of the 3.10 section.
The inner section below describes how DASH client would suppose to calculate Period's start / end times.
Given the above formula and the values from one-Period manifest provided, where
The final start/end values of the Period would be I did a test and removed Having said the above, I am considering Shaka Player is not properly handling Period(s) in VOD with Live profiles manifest with respect to the spec. p.s. I am testing a manifest pre-processor which re-populates value of |
So maybe the start time should be adjusted to 0. The wording in the DASH (ISO/IEC 23009-1:2014) spec is confusing on the matter. (I quote the DASH spec instead since the IOP is supposed to be a subset and using different profiles shouldn't change behavior) Section 5.3.2.1 starts with:
The whole spec uses
The first part sides with starting at 0 and having a gap; but the part about But I think you are probably correct. There is really no reason to have a gap at the start of VOD content. I'll relabel this issue and just close #1885. Also note that for shifting the timeline, it is probably not that complex. We don't need to shift the segments themselves since they are already relative to the Period. So all we need to do is change the Period start/duration and fix the handling of |
I tried that using proxy script and Shaka Player v2.4.7 (demo app) and dash.js (Reference Client 2.9.3) both play content fine (one-Period and multi-Period) |
Is this still an issue in our latest release, v2.5.9? |
Hi @joeyparrish I think we've got a similar issue to this where we've got a VOD manifest using a live profile - timeshifted manifest. The presentationTimeOffset of the video is out of sync with the segment timeline start time by 31 milliseconds. If I manually change this to match the segment timeline start time then the content works. I've been told the usual by the stream vendor that the manifest is fine because it plays in dashjs, bitmovin etc etc. Is this a bug in the player a bad manifest or is there a setting I can use to get it to work? |
We would need a URL, not a copy of the manifest. A copy of the manifest would let us parse it, but not fetch any content. To debug your issue, @ShanePhelan, we would need a manifest URL that is accessible to us. You can send those to us privately at [email protected]. |
Hi @joeyparrish sorry for the late response, we've had a long bank holiday weekend here in the UK. I've sent an email to [email protected] with the stream details. |
@joeyparrish I should've also mentioned that CORS is not correctly enabled on that stream so you'll have to launch Chrome / Firefox with web security disabled. Unfortunately I won't be able to get it enabled as we usually have a CDN in front of it that handles the CORS part. |
I have two bits of good news: First, if you configure the player to jump "large" gaps, this plays fine in current versions of Shaka Player. For example, I get this message in the console:
But with this config: player.configure('streaming.jumpLargeGaps', true); Instead I get this message:
and the content plays from the non-zero start time. Browsers will generally play through a larger gap at the start of the content than in the middle, but Chrome, for example, will only tolerate up to a 1s gap at the start. Gap-jumping in Shaka Player takes over and handles larger gaps. Secondly, this content in it's live form exposed a bug in our recent Period-flattening work for v2.6 (#1339), so I can now write new test cases for that and improve it. I'm going to close this as working correctly in our current release branch, v2.5.x. Thanks, and let us know if we can do anything else for you. |
Hi @joeyparrish Thanks for investigating and pointing out the jumpLargeGaps config. One other thing we've noticed is that in this timeshift scenario we never receive the 'canplay' event from the video element, but we do on other Dash clients. We rely on this event to display our Play CTA. I've noticed in the shaka player demo that the UX relies on the buffering event to hide the spinner. The content in question causes the spinner to never disappear indicating that it's still in a buffering state. You can play the content by clicking play, but it still seems as though something is wrong. Is there a way to get the canplay event to fire? Or workout via some other event / warning etc that canplay probably wont fire so fake it? Thanks |
I see the 'canplay' event firing with your content. Perhaps you're adding the event listener too late? video.addEventListener('canplay', () => console.log('canplay'));
player.configure('streaming.jumpLargeGaps', true); Then I click the play button and I see this in the console:
The 'canplay' event won't fire until after the player jumps over the gap, because until then, there isn't enough content buffered at the current position (0). After seeking to the start of the buffer, there is enough content buffered at that position, so the event fires. |
Hi @joeyparrish Your clicking play and then seeing the canplay event. We load the manifest and wait until the canplay event is fired before displaying the play button / calling play, otherwise we could have a scenario where the user has clicked play before the content is ready. I understand there isn't enough content buffered at that position. Other dash clients seem to implement an 'auto' jump and then buffer the content on the load call. Is there a way to do something similar in Shaka? |
Have you read the FAQ and checked for duplicate open issues?
yes
What version of Shaka Player are you using?
2.3.3
Can you reproduce the issue with our latest release version?
yes, Shaka Player v2.4.7-uncompiled
Can you reproduce the issue with the latest code from
master
?didn't try yet
Are you using the demo app or your own custom app?
Demo app
What browser and OS are you using?
macOS 10.14.4 / Chrome Browser Version 73.0.3683.103 (Official Build) (64-bit)
What are the manifest and license server URIs?
Sent to [email protected] mailgroup
What did you do?
Try to play a clearstream manifest configured as On-Demand Services with Live profiles (a chapter 3.10 of https://dashif.org/docs/DASH-IF-IOP-v4.3.pdf, section 3.10.2 - On-Demand Services with Live profiles)
What did you expect to happen?
It seems Shaka is only assuming a Live profile for
dynamic
manifests, which is incorrect because based of the specstatic
manifests are also possible.Type
dynamic
manifest plays fine and the same logic expects forstatic
manifests of Live profile.What actually happened?
Shaka Player failed playout the manifest composed as On-Demand Services with Live profiles with assertion failed: period duration must be a positive integer.
static
with onePeriod
elementstatic
with multiPeriod
elementsThe text was updated successfully, but these errors were encountered: