diff --git a/src/toM3u8.js b/src/toM3u8.js index a5aeacc8..62498e02 100644 --- a/src/toM3u8.js +++ b/src/toM3u8.js @@ -245,9 +245,9 @@ export const toM3u8 = (dashPlaylists, sidxMapping = {}) => { } = dashPlaylists[0].attributes; const videoOnly = ({ attributes }) => - attributes.mimeType === 'video/mp4' || attributes.contentType === 'video'; + attributes.mimeType === 'video/mp4' || attributes.mimeType === 'video/webm' || attributes.contentType === 'video'; const audioOnly = ({ attributes }) => - attributes.mimeType === 'audio/mp4' || attributes.contentType === 'audio'; + attributes.mimeType === 'audio/mp4' || attributes.mimeType === 'audio/webm' || attributes.contentType === 'audio'; const vttOnly = ({ attributes }) => attributes.mimeType === 'text/vtt' || attributes.contentType === 'text'; diff --git a/test/index.test.js b/test/index.test.js index 8f03eb0e..30fbf675 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -6,6 +6,7 @@ import maatVttSegmentTemplate from './manifests/maat_vtt_segmentTemplate.mpd'; import segmentBaseTemplate from './manifests/segmentBase.mpd'; import segmentListTemplate from './manifests/segmentList.mpd'; import multiperiod from './manifests/multiperiod.mpd'; +import webmsegments from './manifests/webmsegments.mpd'; import multiperiodDynamic from './manifests/multiperiod-dynamic.mpd'; import { parsedManifest as maatVttSegmentTemplateManifest @@ -19,6 +20,9 @@ import { import { parsedManifest as multiperiodManifest } from './manifests/multiperiod.js'; +import { + parsedManifest as webmsegmentsManifest +} from './manifests/webmsegments.js'; import { parsedManifest as multiperiodDynamicManifest } from './manifests/multiperiod-dynamic.js'; @@ -49,6 +53,10 @@ QUnit.test('has parse', function(assert) { name: 'multiperiod', input: multiperiod, expected: multiperiodManifest +}, { + name: 'webmsegments', + input: webmsegments, + expected: webmsegmentsManifest }, { name: 'multiperiod_dynamic', input: multiperiodDynamic, diff --git a/test/manifests/webmsegments.js b/test/manifests/webmsegments.js new file mode 100644 index 00000000..e8c3fee1 --- /dev/null +++ b/test/manifests/webmsegments.js @@ -0,0 +1,154 @@ +export const parsedManifest = { + allowCache: true, + discontinuityStarts: [], + segments: [], + endList: true, + mediaGroups: { + 'AUDIO': { + audio: { + en: { + language: 'en', + autoselect: true, + default: true, + playlists: [ + { + attributes: { + 'NAME': '2', + 'BANDWIDTH': 32000, + 'CODECS': 'opus', + 'PROGRAM-ID': 1 + }, + uri: '', + endList: true, + timeline: 1, + resolvedUri: '', + targetDuration: 4, + segments: [ + { + uri: 'audio/segment_0.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/audio/segment_0.chk', + map: { + uri: 'audio/init.hdr', + resolvedUri: 'https://www.example.com/audio/init.hdr' + }, + number: 0 + }, + { + uri: 'audio/segment_1.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/audio/segment_1.chk', + map: { + uri: 'audio/init.hdr', + resolvedUri: 'https://www.example.com/audio/init.hdr' + }, + number: 1 + }, + { + uri: 'audio/segment_2.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/audio/segment_2.chk', + map: { + uri: 'audio/init.hdr', + resolvedUri: 'https://www.example.com/audio/init.hdr' + }, + number: 2 + }, + { + uri: 'audio/segment_3.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/audio/segment_3.chk', + map: { + uri: 'audio/init.hdr', + resolvedUri: 'https://www.example.com/audio/init.hdr' + }, + number: 3 + } + ], + mediaSequence: 0 + } + ], + uri: '' + } + } + }, + 'VIDEO': {}, + 'CLOSED-CAPTIONS': {}, + 'SUBTITLES': {} + }, + uri: '', + duration: 16, + playlists: [ + { + attributes: { + 'NAME': '1', + 'AUDIO': 'audio', + 'SUBTITLES': 'subs', + 'RESOLUTION': { + width: 480, + height: 200 + }, + 'CODECS': 'av1', + 'BANDWIDTH': 100000, + 'PROGRAM-ID': 1 + }, + uri: '', + endList: true, + timeline: 1, + resolvedUri: '', + targetDuration: 4, + segments: [ + { + uri: 'video/segment_0.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/video/segment_0.chk', + map: { + uri: 'video/init.hdr', + resolvedUri: 'https://www.example.com/video/init.hdr' + }, + number: 0 + }, + { + uri: 'video/segment_1.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/video/segment_1.chk', + map: { + uri: 'video/init.hdr', + resolvedUri: 'https://www.example.com/video/init.hdr' + }, + number: 1 + }, + { + uri: 'video/segment_2.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/video/segment_2.chk', + map: { + uri: 'video/init.hdr', + resolvedUri: 'https://www.example.com/video/init.hdr' + }, + number: 2 + }, + { + uri: 'video/segment_3.chk', + timeline: 1, + duration: 4, + resolvedUri: 'https://www.example.com/video/segment_3.chk', + map: { + uri: 'video/init.hdr', + resolvedUri: 'https://www.example.com/video/init.hdr' + }, + number: 3 + } + ], + mediaSequence: 0 + } + ], + minimumUpdatePeriod: 0 +}; diff --git a/test/manifests/webmsegments.mpd b/test/manifests/webmsegments.mpd new file mode 100644 index 00000000..a2bae9c3 --- /dev/null +++ b/test/manifests/webmsegments.mpd @@ -0,0 +1,21 @@ + + + + https://www.example.com/base + + + + + + + + + + + + +