Skip to content

Commit

Permalink
feat(DASH): Add MPD Patch support (#5247)
Browse files Browse the repository at this point in the history
Closes #2228

---------

Co-authored-by: Wojciech Tyczyński <wojciech.tyczynski@sky.uk>
  • Loading branch information
dave-nicholas and tykus160 authored May 29, 2024
1 parent c541515 commit d38aabf
Show file tree
Hide file tree
Showing 13 changed files with 1,310 additions and 87 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ DASH features supported:
- CEA-608/708 captions
- Multi-codec variants (on platforms with changeType support)
- MPD chaining
- MPD Patch updates for SegmentTemplate with $Number$, SegmentTimeline with
$Number$ and SegmentTimeline with $Time$

DASH features **not** supported:
- Xlink with actuate=onRequest
Expand All @@ -116,6 +118,8 @@ DASH features **not** supported:
bitrates
- Timescales so large that timestamps cannot be represented as integers in
JavaScript (2^53): https://github.com/shaka-project/shaka-player/issues/1667
- Modifying elements with an @schemeIdUri attribute via MPD Patch
- Xlink dereferencing with MPD Patch


## HLS features
Expand Down
57 changes: 57 additions & 0 deletions demo/common/assets.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,9 @@ shakaAssets.Feature = {
// Set if the asset has Content Steering.
CONTENT_STEERING: 'Content Steering',

// Set if the asset supports MPD Patch.
MPD_PATCH: 'MPD Patch',

// Set if the asset is VR.
VR: 'VR',

Expand Down Expand Up @@ -984,6 +987,60 @@ shakaAssets.testAssets = [
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.THUMBNAILS),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTemplate with $Number$ (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTemplate with $Number$, multiperiod (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/periods_60/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTimeline with $Number$ (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/segtimelinenr_1/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTimeline with $Number$, multiperiod (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/segtimelinenr_1/periods_60/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTimeline with $Time$ (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/segtimeline_1/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF MPD Patch - SegmentTimeline with $Time$, multiperiod (livesim)',
/* iconUri= */ 'https://storage.googleapis.com/shaka-asset-icons/dash_if_test_pattern.png',
/* manifestUri= */ 'https://livesim2.dashif.org/livesim2/patch_60/segtimeline_1/periods_60/testpic_2s/Manifest.mpd',
/* source= */ shakaAssets.Source.DASH_IF)
.addFeature(shakaAssets.Feature.DASH)
.addFeature(shakaAssets.Feature.MP4)
.addFeature(shakaAssets.Feature.LIVE)
.addFeature(shakaAssets.Feature.MPD_PATCH),
new ShakaDemoAssetInfo(
/* name= */ 'DASH-IF - Regular chaining',
/* iconUri= */ '',
Expand Down
2 changes: 2 additions & 0 deletions demo/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,8 @@ shakaDemo.Search = class {
'Filters for assets that have an LCEVC enhancement layer.');
this.makeBooleanInput_(specialContainer, Feature.CONTENT_STEERING, FEATURE,
'Filters for assets that use Content Steering.');
this.makeBooleanInput_(specialContainer, Feature.MPD_PATCH, FEATURE,
'Filters for assets that use MPD Patch.');
this.makeBooleanInput_(specialContainer, Feature.VR, FEATURE,
'Filters for assets that are VR.');
this.makeBooleanInput_(specialContainer, Feature.MPD_CHAINING, FEATURE,
Expand Down
Loading

0 comments on commit d38aabf

Please sign in to comment.