diff --git a/externs/shaka/player.js b/externs/shaka/player.js index 6345523850..a2f9eff1fb 100644 --- a/externs/shaka/player.js +++ b/externs/shaka/player.js @@ -208,6 +208,8 @@ shaka.extern.BufferedInfo; * pixelAspectRatio: ?string, * hdr: ?string, * mimeType: ?string, + * audioMimeType: ?string, + * videoMimeType: ?string, * codecs: ?string, * audioCodec: ?string, * videoCodec: ?string, @@ -267,6 +269,10 @@ shaka.extern.BufferedInfo; * The video HDR provided in the manifest, if present. * @property {?string} mimeType * The MIME type of the content provided in the manifest. + * @property {?string} audioMimeType + * The audio MIME type of the content provided in the manifest. + * @property {?string} videoMimeType + * The video MIME type of the content provided in the manifest. * @property {?string} codecs * The audio/video codecs string provided in the manifest, if present. * @property {?string} audioCodec diff --git a/lib/util/stream_utils.js b/lib/util/stream_utils.js index f5a753f923..92866c18bf 100644 --- a/lib/util/stream_utils.js +++ b/lib/util/stream_utils.js @@ -846,6 +846,11 @@ shaka.util.StreamUtils = class { /** @type {?shaka.extern.Stream} */ const video = variant.video; + /** @type {?string} */ + const audioMimeType = audio ? audio.mimeType : null; + /** @type {?string} */ + const videoMimeType = video ? video.mimeType : null; + /** @type {?string} */ const audioCodec = audio ? audio.codecs : null; /** @type {?string} */ @@ -910,6 +915,8 @@ shaka.util.StreamUtils = class { pixelAspectRatio: null, hdr: null, mimeType: mimeType, + audioMimeType: audioMimeType, + videoMimeType: videoMimeType, codecs: codecs.join(', '), audioCodec: audioCodec, videoCodec: videoCodec, @@ -977,6 +984,8 @@ shaka.util.StreamUtils = class { pixelAspectRatio: null, hdr: null, mimeType: stream.mimeType, + audioMimeType: null, + videoMimeType: null, codecs: stream.codecs || null, audioCodec: null, videoCodec: null, @@ -1049,6 +1058,8 @@ shaka.util.StreamUtils = class { pixelAspectRatio: null, hdr: null, mimeType: stream.mimeType, + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null, @@ -1167,6 +1178,8 @@ shaka.util.StreamUtils = class { pixelAspectRatio: null, hdr: null, mimeType: null, + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null, diff --git a/test/offline/storage_integration.js b/test/offline/storage_integration.js index e926aa76f1..1c94e6a9e4 100644 --- a/test/offline/storage_integration.js +++ b/test/offline/storage_integration.js @@ -1381,6 +1381,8 @@ filterDescribe('Storage', storageSupport, () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4,audio/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'mp4,mp4', audioCodec: 'mp4', videoCodec: 'mp4', @@ -1423,6 +1425,8 @@ filterDescribe('Storage', storageSupport, () => { pixelAspectRatio: null, hdr: null, mimeType: 'text/vtt', + audioMimeType: null, + videoMimeType: null, codecs: 'vtt', audioCodec: null, videoCodec: null, diff --git a/test/player_unit.js b/test/player_unit.js index 69b5e62220..3b4eb3c6df 100644 --- a/test/player_unit.js +++ b/test/player_unit.js @@ -1115,6 +1115,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1149,6 +1151,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1183,6 +1187,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1217,6 +1223,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1251,6 +1259,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1285,6 +1295,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1319,6 +1331,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1353,6 +1367,8 @@ describe('Player', () => { pixelAspectRatio: '59:54', hdr: null, mimeType: 'video/mp4', + audioMimeType: 'audio/mp4', + videoMimeType: 'video/mp4', codecs: 'avc1.4d401f, mp4a.40.2', audioCodec: 'mp4a.40.2', videoCodec: 'avc1.4d401f', @@ -1384,6 +1400,8 @@ describe('Player', () => { label: 'Spanish', kind: 'caption', mimeType: 'text/vtt', + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null, @@ -1418,6 +1436,8 @@ describe('Player', () => { label: 'English', kind: 'caption', mimeType: 'application/ttml+xml', + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null, @@ -1452,6 +1472,8 @@ describe('Player', () => { label: 'English', kind: 'caption', mimeType: 'application/ttml+xml', + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null, @@ -1489,6 +1511,8 @@ describe('Player', () => { label: null, kind: null, mimeType: 'image/jpeg', + audioMimeType: null, + videoMimeType: null, codecs: null, audioCodec: null, videoCodec: null,