UNPKG

rx-player

Version:
442 lines (438 loc) 15.5 kB
import { describe, it, expect } from "vitest"; import { parseXml } from "../xml-parser"; const exampleXml = `<?xml version="1.0" encoding="utf-8"?> <MPD availabilityStartTime="2012-01-01T00:00:00Z" id="Config part of url maybe?" minBufferTime="PT2S" minimumUpdatePeriod="PT0S" profiles="urn:mpeg:dash:profile:isoff-live:2011,urn:com:dashif:dash264" publishTime="2018-05-28T11:47:45Z" timeShiftBufferDepth="PT5M" type="dynamic" ns1:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns1="http://www.w3.org/2001/XMLSchema-instance"> <ProgramInformation> <Title>Media Presentation Description by MobiTV. Powered by MDL Team@Sweden.</Title> </ProgramInformation> <Period id="p0" start="PT0S" ns2:publishTime="2012-01-01T00:00:00Z" xmlns:ns2="urn:mobitv"> <AdaptationSet contentType="audio" lang="eng" mimeType="audio/mp4" segmentAlignment="true" startWithSAP="1" ns2:qualityLevel="SD"> <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" /> <SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/t$Time$.m4s" timescale="48000"> <SegmentTimeline> <S d="288768" t="73320372578304" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> <S d="288768" r="2" /> <S d="287744" /> </SegmentTimeline> </SegmentTemplate> <Representation audioSamplingRate="48000" bandwidth="48000" codecs="mp4a.40.2" id="A48"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" /> </Representation> </AdaptationSet> <AdaptationSet contentType="video" maxFrameRate="60/2" maxHeight="360" maxWidth="640" mimeType="video/mp4" minHeight="360" minWidth="640" par="16:9" segmentAlignment="true" startWithSAP="1" ns2:qualityLevel="SD"> <Role schemeIdUri="urn:mpeg:dash:role:2011" value="main" /> <SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/t$Time$.m4s" timescale="90000"> <SegmentTimeline> <S d="540000" r="49" t="137475698580000" /> </SegmentTimeline> </SegmentTemplate> <Representation bandwidth="300000" codecs="avc1.64001e" frameRate="60/2" height="360" id="V300" sar="1:1" width="640" /> </AdaptationSet> </Period> </MPD>`; /* eslint-disable @typescript-eslint/naming-convention */ const exampleResult = [ { tagName: "?xml", attributes: { version: "1.0", encoding: "utf-8" }, children: [], posStart: 0, posEnd: 2589, }, { tagName: "MPD", attributes: { availabilityStartTime: "2012-01-01T00:00:00Z", id: "Config part of url maybe?", minBufferTime: "PT2S", minimumUpdatePeriod: "PT0S", profiles: "urn:mpeg:dash:profile:isoff-live:2011,urn:com:dashif:dash264", publishTime: "2018-05-28T11:47:45Z", timeShiftBufferDepth: "PT5M", type: "dynamic", "ns1:schemaLocation": "urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd", xmlns: "urn:mpeg:dash:schema:mpd:2011", "xmlns:ns1": "http://www.w3.org/2001/XMLSchema-instance", }, children: [ { tagName: "ProgramInformation", attributes: {}, children: [ { tagName: "Title", attributes: {}, children: [ "Media Presentation Description by MobiTV. Powered by MDL Team@Sweden.", ], posStart: 505, posEnd: 589, }, ], posStart: 478, posEnd: 614, }, { tagName: "Period", attributes: { id: "p0", start: "PT0S", "ns2:publishTime": "2012-01-01T00:00:00Z", "xmlns:ns2": "urn:mobitv", }, children: [ { tagName: "AdaptationSet", attributes: { contentType: "audio", lang: "eng", mimeType: "audio/mp4", segmentAlignment: "true", startWithSAP: "1", "ns2:qualityLevel": "SD", }, children: [ { tagName: "Role", attributes: { schemeIdUri: "urn:mpeg:dash:role:2011", value: "main" }, children: [], posStart: 853, posEnd: 912, }, { tagName: "SegmentTemplate", attributes: { initialization: "$RepresentationID$/init.mp4", media: "$RepresentationID$/t$Time$.m4s", timescale: "48000", }, children: [ { tagName: "SegmentTimeline", attributes: {}, children: [ { tagName: "S", attributes: { d: "288768", t: "73320372578304" }, children: [], posStart: 1060, posEnd: 1095, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1096, posEnd: 1112, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1113, posEnd: 1135, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1136, posEnd: 1152, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1153, posEnd: 1175, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1176, posEnd: 1192, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1193, posEnd: 1215, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1216, posEnd: 1232, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1233, posEnd: 1255, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1256, posEnd: 1272, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1273, posEnd: 1295, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1296, posEnd: 1312, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1313, posEnd: 1335, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1336, posEnd: 1352, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1353, posEnd: 1375, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1376, posEnd: 1392, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1393, posEnd: 1415, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1416, posEnd: 1432, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1433, posEnd: 1455, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1456, posEnd: 1472, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1473, posEnd: 1495, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1496, posEnd: 1512, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1513, posEnd: 1535, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1536, posEnd: 1552, }, { tagName: "S", attributes: { d: "288768", r: "2" }, children: [], posStart: 1553, posEnd: 1575, }, { tagName: "S", attributes: { d: "287744" }, children: [], posStart: 1576, posEnd: 1592, }, ], posStart: 1042, posEnd: 1611, }, ], posStart: 922, posEnd: 1630, }, { tagName: "Representation", attributes: { audioSamplingRate: "48000", bandwidth: "48000", codecs: "mp4a.40.2", id: "A48", }, children: [ { tagName: "AudioChannelConfiguration", attributes: { schemeIdUri: "urn:mpeg:dash:23003:3:audio_channel_configuration:2011", value: "2", }, children: [], posStart: 1741, posEnd: 1849, }, ], posStart: 1640, posEnd: 1876, }, ], posStart: 713, posEnd: 1899, }, { tagName: "AdaptationSet", attributes: { contentType: "video", maxFrameRate: "60/2", maxHeight: "360", maxWidth: "640", mimeType: "video/mp4", minHeight: "360", minWidth: "640", par: "16:9", segmentAlignment: "true", startWithSAP: "1", "ns2:qualityLevel": "SD", }, children: [ { tagName: "Role", attributes: { schemeIdUri: "urn:mpeg:dash:role:2011", value: "main" }, children: [], posStart: 2128, posEnd: 2187, }, { tagName: "SegmentTemplate", attributes: { initialization: "$RepresentationID$/init.mp4", media: "$RepresentationID$/t$Time$.m4s", timescale: "90000", }, children: [ { tagName: "SegmentTimeline", attributes: {}, children: [ { tagName: "S", attributes: { d: "540000", r: "49", t: "137475698580000" }, children: [], posStart: 2335, posEnd: 2378, }, ], posStart: 2317, posEnd: 2397, }, ], posStart: 2197, posEnd: 2416, }, { tagName: "Representation", attributes: { bandwidth: "300000", codecs: "avc1.64001e", frameRate: "60/2", height: "360", id: "V300", sar: "1:1", width: "640", }, children: [], posStart: 2426, posEnd: 2546, }, ], posStart: 1906, posEnd: 2569, }, ], posStart: 615, posEnd: 2582, }, ], posStart: 39, posEnd: 2589, }, ]; describe("parseXml", () => { it("should properly parse example XML", () => { const parsed = parseXml(exampleXml); expect(parsed).toEqual(exampleResult); }); });