diff --git a/demo/common/assets.js b/demo/common/assets.js index 3f84a15c32..6a1544ed37 100644 --- a/demo/common/assets.js +++ b/demo/common/assets.js @@ -131,6 +131,9 @@ shakaAssets.Feature = { // Set if the asset has at least one containerless stream (AAC, etc). CONTAINERLESS: 'Containerless', + // Set if the asset requires Dolby Vision with MV-HEVC (for 3D) support. + DOLBY_VISION_3D: 'Dolby Vision 3D', + // Set if the asset has at least one stream that is at least 720p. HIGH_DEFINITION: 'High definition', // Set if the asset has at least one stream that is at least 4k. @@ -400,7 +403,7 @@ shakaAssets.testAssets = [ /* manifestUri= */ 'https://storage.googleapis.com/shaka-demo-assets/sintel/dash.mpd', /* source= */ shakaAssets.Source.SHAKA) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.WEBM) @@ -429,7 +432,7 @@ shakaAssets.testAssets = [ /* manifestUri= */ 'https://storage.googleapis.com/shaka-demo-assets/sintel-webm-only/dash.mpd', /* source= */ shakaAssets.Source.SHAKA) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.WEBM) .addFeature(shakaAssets.Feature.OFFLINE), @@ -439,7 +442,7 @@ shakaAssets.testAssets = [ /* manifestUri= */ 'https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-only/dash.mpd', /* source= */ shakaAssets.Source.SHAKA) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.OFFLINE), @@ -450,7 +453,7 @@ shakaAssets.testAssets = [ /* source= */ shakaAssets.Source.SHAKA) .addKeySystem(shakaAssets.KeySystem.WIDEVINE) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.WEBM) @@ -476,7 +479,7 @@ shakaAssets.testAssets = [ .setAdTagUri(shakaAssets.AdTag.AD_POD_PREROLL_MIDROLL_POSTROLL) .addKeySystem(shakaAssets.KeySystem.WIDEVINE) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.WEBM) @@ -488,7 +491,7 @@ shakaAssets.testAssets = [ /* manifestUri= */ 'https://storage.googleapis.com/shaka-demo-assets/sintel-mp4-wvtt/dash.mpd', /* source= */ shakaAssets.Source.SHAKA) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.SUBTITLES) .addFeature(shakaAssets.Feature.OFFLINE), @@ -960,7 +963,6 @@ shakaAssets.testAssets = [ /* manifestUri= */ 'https://livesim2.dashif.org/livesim2/testpic_2s/Manifest_thumbs.mpd', /* source= */ shakaAssets.Source.DASH_IF) .addFeature(shakaAssets.Feature.DASH) - .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.MP4) .addFeature(shakaAssets.Feature.LIVE) .addFeature(shakaAssets.Feature.THUMBNAILS), @@ -1004,7 +1006,7 @@ shakaAssets.testAssets = [ /* source= */ shakaAssets.Source.BITCODIN) // Disabled because the audio playlist ends about 9 seconds early somehow. .markAsDisabled() - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.HLS) .addFeature(shakaAssets.Feature.MP2TS) .addFeature(shakaAssets.Feature.OFFLINE), @@ -1364,9 +1366,18 @@ shakaAssets.testAssets = [ /* source= */ shakaAssets.Source.APPLE) .addFeature(shakaAssets.Feature.HLS) .addFeature(shakaAssets.Feature.MP4) - .addFeature(shakaAssets.Feature.HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) .addFeature(shakaAssets.Feature.OFFLINE) .addFeature(shakaAssets.Feature.THUMBNAILS), + new ShakaDemoAssetInfo( + /* name= */ '3D movie stream', + /* iconUri= */ '', + /* manifestUri= */ 'https://devstreaming-cdn.apple.com/videos/streaming/examples/historic_planet_content_2023-10-26-3d-video/main.m3u8', + /* source= */ shakaAssets.Source.APPLE) + .addFeature(shakaAssets.Feature.HLS) + .addFeature(shakaAssets.Feature.ULTRA_HIGH_DEFINITION) + .addFeature(shakaAssets.Feature.DOLBY_VISION_3D) + .addFeature(shakaAssets.Feature.OFFLINE), // }}} // IRT assets {{{ diff --git a/demo/main.js b/demo/main.js index 68596bdac0..505634b4ed 100644 --- a/demo/main.js +++ b/demo/main.js @@ -735,6 +735,9 @@ shakaDemo.Main = class { if (asset.features.includes(shakaAssets.Feature.CONTAINERLESS)) { mimeTypes.push('audio/aac'); } + if (asset.features.includes(shakaAssets.Feature.DOLBY_VISION_3D)) { + mimeTypes.push('video/mp4; codecs="dvh1.20.01"'); + } const hasSupportedMimeType = mimeTypes.some((type) => { return this.support_.media[type]; }); diff --git a/demo/search.js b/demo/search.js index 0199538c15..a37c7953c2 100644 --- a/demo/search.js +++ b/demo/search.js @@ -371,6 +371,9 @@ shakaDemo.Search = class { /* docLink= */ null); this.makeBooleanInput_(specialContainer, Feature.HIGH_DEFINITION, FEATURE, 'Filters for assets with at least one high-definition video stream.'); + this.makeBooleanInput_(specialContainer, Feature.ULTRA_HIGH_DEFINITION, + FEATURE, 'Filters for assets with at least one ultra-high-definition' + + ' video stream.'); this.makeBooleanInput_(specialContainer, Feature.XLINK, FEATURE, 'Filters for assets that have XLINK tags in their manifests, so that ' + 'they can be broken into multiple files.'); diff --git a/lib/media/media_source_engine.js b/lib/media/media_source_engine.js index 835ef4456d..1cf02a205c 100644 --- a/lib/media/media_source_engine.js +++ b/lib/media/media_source_engine.js @@ -262,6 +262,7 @@ shaka.media.MediaSourceEngine = class { 'video/mp4; codecs="vp9"', 'video/mp4; codecs="vp09.00.10.08"', 'video/mp4; codecs="av01.0.01M.08"', + 'video/mp4; codecs="dvh1.20.01"', 'audio/mp4; codecs="mp4a.40.2"', 'audio/mp4; codecs="ac-3"', 'audio/mp4; codecs="ec-3"',