Skip to content

Commit

Permalink
descriptor type updates v5.0.0 (#4250)
Browse files Browse the repository at this point in the history
* update to v5

* use descriptorType only for applicable elements (deprecate legacy of values-only usage)

* handle viewpoint as read from mpd as array since it's allowed 0..N

* adding some info messages for track selection

* enhance documentation

* cleaning code, adding a warning when defaults are used

* add tests on defaulting schemeIdUris

* adding sample to exersice track selection

* change http to https

* rebase: add schemeIdUri for CEA-608 as constant

* re-enable CEA-608 parser again (bugfix)
  • Loading branch information
stschr authored Aug 14, 2023
1 parent 8937f8a commit 50af3de
Show file tree
Hide file tree
Showing 13 changed files with 532 additions and 273 deletions.
12 changes: 4 additions & 8 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -523,14 +523,10 @@ declare namespace dashjs {
representationCount: number;
labels: { text: string, lang?: string }[];
lang: string | null;
viewpoint: any | undefined | null;
viewpointsWithSchemeIdUri: DescriptorType[] | null;
accessibility: any[] | null;
accessibilitiesWithSchemeIdUri: DescriptorType[] | null;
audioChannelConfiguration: any[] | null;
audioChannelConfigurationsWithSchemeIdUri: DescriptorType[] | null;
roles: string[] | null;
rolesWithSchemeIdUri: DescriptorType[] | null;
viewpoint: DescriptorType[] | null;
accessibility: DescriptorType[] | null;
audioChannelConfiguration: DescriptorType[] | null;
roles: DescriptorType[] | null;
codec: string | null;
mimeType: string | null;
contentProtection: any | null;
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

157 changes: 157 additions & 0 deletions samples/multi-audio/multi-audio-default-lang-acc.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Multiple audio tracks sample</title>
<script class="code" src="../../contrib/akamai/controlbar/ControlBar.js"></script>
<script src="../../dist/dash.all.debug.js"></script>

<!-- Bootstrap core CSS -->
<link href="../lib/bootstrap/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../contrib/akamai/controlbar/controlbar.css">
<link href="../lib/main.css" rel="stylesheet">

<style>
video {
width: 100%;
}

.dash-video-player {
position: relative; /* This position relative is needed to position the menus */
margin: 0 auto;
line-height: 1.0;
}

#mediaSettings, #selectedTrack {
height:400px;
margin-top: 20px;
font-size: 12px;
}
</style>

<script class="code">
function init() {
var url = 'https://webapi.streaming.dolby.com/v0_9/sources/media/v01/dash/lesson_8.mpd';
var videoElement = document.querySelector('video');

var player = dashjs.MediaPlayer().create();
player.updateSettings({'debug': {'logLevel': dashjs.Debug.LOG_LEVEL_INFO}});
player.initialize(videoElement, url, true);
player.setInitialMediaSettingsFor('audio', {
lang: 'es',
role: 'alternate',
audioChannelConfiguration: '6',
test: '2',
viewpoint: '1',
accessibility: {schemeIdUri:'urn:mpeg:dash:role:2011', value:'description'}
})

var controlbar = new ControlBar(player);
controlbar.initialize();

elMediaSetting = document.getElementById('mediaSettings');
if(elMediaSetting) {
elMediaSetting.innerHTML = JSON.stringify(player.getInitialMediaSettingsFor('audio'), null, 4);
elMediaSetting.scrollTop = elMediaSetting.scrollHeight;
}

player.on(dashjs.MediaPlayer.events['STREAM_INITIALIZED'], function() {
elTrack = document.getElementById('selectedTrack');
if(elTrack) {
elTrack.innerHTML = JSON.stringify(player.getCurrentTrackFor('audio'), null, 4);
};
});
}

</script>
</head>
<body>

<main>
<div class="container py-4">
<header class="pb-3 mb-4 border-bottom">
<img class=""
src="../lib/img/dashjs-logo.png"
width="200">
</header>
<div class="row">
<div class="col-md-4">
<div class="h-100 p-5 bg-light border rounded-3">
<h3>Multi audio - Initial Track</h3>
<p>This example shows how an initial track is selected from content with multiple audio tracks based on preference settings.</p>
<p>Desired media settings are sanitized by a default <code>schemeIdUri</code>, if not provided.</p>
<p>Example requires support for Dolby Audio.</p>
</div>
</div>
<div class="col-md-8">
<div class="dash-video-player code">
<div class="videoContainer" id="videoContainer">
<video preload="auto" autoplay></video>
<div id="videoController" class="video-controller unselectable">
<div id="playPauseBtn" class="btn-play-pause" title="Play/Pause">
<span id="iconPlayPause" class="icon-play"></span>
</div>
<span id="videoTime" class="time-display">00:00:00</span>
<div id="fullscreenBtn" class="btn-fullscreen control-icon-layout" title="Fullscreen">
<span class="icon-fullscreen-enter"></span>
</div>
<div id="bitrateListBtn" class="control-icon-layout" title="Bitrate List">
<span class="icon-bitrate"></span>
</div>
<input type="range" id="volumebar" class="volumebar" value="1" min="0" max="1" step=".01"/>
<div id="muteBtn" class="btn-mute control-icon-layout" title="Mute">
<span id="iconMute" class="icon-mute-off"></span>
</div>
<div id="trackSwitchBtn" class="control-icon-layout" title="A/V Tracks">
<span class="icon-tracks"></span>
</div>
<div id="captionBtn" class="btn-caption control-icon-layout" title="Closed Caption">
<span class="icon-caption"></span>
</div>
<span id="videoDuration" class="duration-display">00:00:00</span>
<div class="seekContainer">
<div id="seekbar" class="seekbar seekbar-complete">
<div id="seekbar-buffer" class="seekbar seekbar-buffer"></div>
<div id="seekbar-play" class="seekbar seekbar-play"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="h-100 p-5 border rounded-3">
<h3>Get Initial Media Settings For Audio</h3>
<label for="mediaSettings">return value of <code>getInitialMediaSettingsFor('audio')</code>:</label>
<textarea class="form-control" id="mediaSettings"></textarea>
</div>
</div>
<div class="col-md-6">
<div class="h-100 p-5 border rounded-3">
<h3>Get selected audio track</h3>
<label for="selectedTrack">return value of <code>getCurrentTrackFor('audio')</code>:</label>
<textarea class="form-control" id="selectedTrack"></textarea>
</div>
</div>

</div>
<div class="row">
<div class="col-md-12">
<div id="code-output"></div>
</div>
</div>
<footer class="pt-3 mt-4 text-muted border-top">
&copy; DASH-IF
</footer>
</div>
</main>
<script>
document.addEventListener('DOMContentLoaded', function () {
init();
});
</script>
<script src="../highlighter.js"></script>
</body>
</html>
12 changes: 12 additions & 0 deletions samples/samples.json
Original file line number Diff line number Diff line change
Expand Up @@ -568,6 +568,18 @@
"Video",
"Audio"
]
},
{
"title": "Multi Audio - Initial Track with language and accessibility",
"description": "This example illustrates how to select a default audio language and accessibility for playback.",
"href": "multi-audio/multi-audio-default-lang-acc.html",
"image": "http://webapi.streaming.dolby.com/v0_9/sources/media/v01/img/dolbyaudio_black2.png",
"labels": [
"VoD",
"Multi Audio",
"Video",
"Audio"
]
}
]
},
Expand Down
19 changes: 17 additions & 2 deletions src/core/Settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,13 @@ import Events from './events/Events';
* applyMb: false,
* etpWeightRatio: 0
* }
* }
* },
* defaultSchemeIdUri: {
* viewpoint: '',
* audioChannelConfiguration: 'urn:mpeg:mpegB:cicp:ChannelConfiguration',
* role: 'urn:mpeg:dash:role:2011',
* accessibility: 'urn:mpeg:dash:role:2011'
* }
* },
* errors: {
* recoverAttempts: {
Expand Down Expand Up @@ -847,6 +853,9 @@ import Events from './events/Events';
* Settings related to Common Media Client Data reporting.
* @property {module:Settings~CmsdSettings} cmsd
* Settings related to Common Media Server Data parsing.
* @property {module:Settings~defaultSchemeIdUri} defaultSchemeIdUri
* Default schemeIdUri for descriptor type elements
* These strings are used when not provided with setInitialMediaSettingsFor()
*/


Expand Down Expand Up @@ -1105,7 +1114,13 @@ function Settings() {
applyMb: false,
etpWeightRatio: 0
}
}
},
defaultSchemeIdUri: {
viewpoint: '',
audioChannelConfiguration: 'urn:mpeg:mpegB:cicp:ChannelConfiguration',
role: 'urn:mpeg:dash:role:2011',
accessibility: 'urn:mpeg:dash:role:2011'
}
},
errors: {
recoverAttempts: {
Expand Down
Loading

0 comments on commit 50af3de

Please sign in to comment.