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

4th Edition AMD1 MPD Patch Update Implementation #92

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from

Conversation

technogeek00
Copy link

This is an initial pass at bringing in support for the MPD Patching mechanism as outlined in the 4th Edition AMD1 text. This defines a new boolean parameter patching which when provided causes the generated MPD to contain the appropriate PatchLocation element and have subsequent updates from the PatchLocation provided as valid MPD Patch responses.

To accomplish the actual patch responses a second parameter is introduced, patch, which is set to the base time of the patch that will be produced. This parameter is set as part of the URI provided in the PatchLocation element and is not expected to be set manually.

Looking for feedback on approach, I still need to update with new unit test cases

technogeek00 and others added 6 commits March 4, 2020 23:07
This introduces a new parameter "patching" which can be set to
"/patching_1" in the url which will enable patch playout mode for the
dynamic MPD.

During patch playout mode the MPD will contain a PatchLocation element
that points back to the server with an additional "/patch_<time>/"
reference to signify the last information given to the client.

When the client follows the PatchLocation URI it will receive a Patch
response that is applied to the existing in-memory MPD to create the
full form MPD at the original location.

Current pieces needing further investigation:
- Segment update consistency, unclear if we have overlap
- Empty segment timeline on join, periods with an empty segment timeline
should be omitted and included on the next update
There is no specification restriction that would prevent the combined
usage of patching and these options, however their implementation in the
simulator would require significant work in order to enable. To avoid
the options being used and getting invalid responses they are explicitly
detected with patching and an exception is raised. Issues can be filed
on github to ask for enablement of a scenario.

Minor fix for location production without fixed start/end times
@TobbeEdgeware
Copy link

Thanks for this Zack! I'm quite far on translating everything to Python3, so I'll leave this until that is done. Some unit tests should be fine of course. What about player support?

@technogeek00
Copy link
Author

Sounds good, I can rebase it on top of the python 3 work as well.
Tested on internal players, but porting implementation to dash.js: https://github.com/technogeek00/dash.js/tree/mpd-patch-updates

They currently work together, but need further robustness testing.

@TobbeEdgeware
Copy link

Sorry for the long delay, but the code is now moved to Python3 and slightly reorganised to to integrate the low-latency mode. Could you look into rebasing and adapting this PR to that code base and make a unit test that checks that this mode is working?

@technogeek00
Copy link
Author

Yeah I'll take the task of rebasing, there are minor changes in the final AMD as well so the delay ended up net positive :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants