-
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
startNumber in dynamic manifests using SegmentTemplate #237
Comments
Please do send me the manifests privately. If the content can also be made available, that is often helpful for debugging. The names of the encoder vendors would also be helpful. There are many parts of the DASH spec in need of clarification, and some vendors have mutually incompatible interpretations of certain things. |
We believe that using The first segment in a The
The only way
And for
If This is just one area in the DASH spec where the language needs to be clarified and concrete examples need to be given. As it stands, there is enough ambiguity and confusion that not all implementations are compatible with regard to |
Hi guys, I don't think the DASH spec is underspecified, but it is quite complex. It seems to me, that there is indeed an issue in with dynamic MPDs and startNumber in shaka-player. I've been working a lot with how to do live streaming correctly in DASH, and made the the DASH-IF live simulator that can be used as a reference (for MPDs using SegmentTemplate with In particular, it is possible to choose the startNumber in the MPD and the two MPDs Both have availabilityStartTime 1970-01-01-00:00:00, but the first one has startNumber 0 and the second 100000. The media segments are generated depending on the path to the MPD and their timing and content is shifted appropriately to make the content be the same at the same live instance independent of the startNumber. Thus, if you use two parallel players running the two different MPDs the playout should be in sync, irrespective of the value of the startNumber. That is also the case if you play them with the dash.js reference player: http://dashif.org/reference/players/javascript/v1.5.1/samples/dash-if-reference-player/index.html Some more details: For MPDs with type dynamic, it is important to look at the combo "availabilityStartTime + period@start" (AST + PST) and "startNumber" and the current time. startNumber refers to the segment that is available one segmentDuration after the period start (at the period start, only the init segments are available), For dynamic MPDs, you shall "never" start to play with startNumber, but the latest available segment is LSN = floor( (now - (availabilityStartTime+PST))/segmentDuration + startNumber- 1). It is also important to align the mediaTimeLine (based on baseMediaDecodeTime) so that it starts at 0 at the beginning of the period. In any case, you're not allowed to change the availabilityStartTime at any point, so a later manifest can only have additional periods (and old one removed), or updates to the SegmentTimeline. DASH-IF has had a lot of discussions on these topics so there are more complete descriptions and applications in their interoperability guide lines.The latest is V3.1 with improved live available at http://dashif.org/guidelines/ I hope that the MPD URLs provided above can help in testing the timing behavior of the dhaka-player. If you want to have other test-cases implemented in live-simulator, please add an issue to the Github project. |
@tobbee Thanks for the information. I stand corrected. Can you clarify a few points for us? Some things are still unclear to me. If startNumber refers to the segment that is available one segmentDuration after the period start (at the period start, only the init segments are available), does that mean that the live SegmentList examples I gave are not spec-compliant? We've seen dynamic manifests like this, in which SegmentList shows the most recent handful of segments, and uses startNumber to indicate the number of the first segment in the list, rather than the first segment in the Period. What about the SegmentTimeline examples above? Is it valid for SegmentTimeline to update in a dynamic manifest? Is it valid for startNumber to indicate the number of the first segment in the timeline, rather than the first segment in the Period? |
@joeyparrish I have not worked with explicit SegmentLists, but it clearly says in the standard that startNumber (optional) refers to the first segment in the period. Thus, it cannot be changed until there is a new period. On the other hand, in this case it is easy to have an explicit list of segments, and that list can be changed with an update of the MPD (keeping AST and Period start unchanged) to give a time-shift window. I've recently started to implement some test streams for live SegmentTimeLine with I don't have the full context of the original content discussed by @Feenposhleen, but it seems that the AST was updated with the MPD which is not allowed. Inserting a new period with a new startNumber is allowed though, and I have links that do that like; I think DASH is to generous in its options about combining MPD segment schemes. One of the goals of DASH-IF is to reduce the used alternatives, which is especially important for live (dynamic MPDs). |
Okay, so for now, we will change SegmentTemplate w/ duration to treat startNumber specially compared to SegmentList and SegmentTimeline. |
@tobbee @Feenposhleen Please take a look and reopen if you have any further issues. The fix will be in release v1.6.2. |
@joeyparrish Will this change also impact #232 |
@priyajeet, this most recent fix supercedes earlier changes such as that for 232. If you have find any bugs in the latest code on master, please let us know. |
We use two different providers for live DASH playback, and they have chosen different strategies for segment templating. One has the template format
index-$Number$-IDENTIFIER.mp4
where the identifier is unique for the encoder session and ensures no future segments share URI with a previous one. The other provider usesindex-$Number$.mp4
, but relies on thestartNumber
property in theSegmentTemplate
as an identifier to make sure URIs are unique.The second strategy is no longer working in Shaka. It seems like the startNumber is being ignored. Just to illustrate (pseudo):
Is this format unsupported or is this a bug? I can provide the actual manifests over a private channel if needed.
The text was updated successfully, but these errors were encountered: