46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
import { findChildren } from './utils/xml';
|
|
import { parseAttributes } from './parseAttributes';
|
|
import errors from './errors';
|
|
|
|
/**
|
|
* Parses the manifest for a UTCTiming node, returning the nodes attributes if found
|
|
*
|
|
* @param {string} mpd
|
|
* XML string of the MPD manifest
|
|
* @return {Object|null}
|
|
* Attributes of UTCTiming node specified in the manifest. Null if none found
|
|
*/
|
|
export const parseUTCTimingScheme = (mpd) => {
|
|
const UTCTimingNode = findChildren(mpd, 'UTCTiming')[0];
|
|
|
|
if (!UTCTimingNode) {
|
|
return null;
|
|
}
|
|
|
|
const attributes = parseAttributes(UTCTimingNode);
|
|
|
|
switch (attributes.schemeIdUri) {
|
|
case 'urn:mpeg:dash:utc:http-head:2014':
|
|
case 'urn:mpeg:dash:utc:http-head:2012':
|
|
attributes.method = 'HEAD';
|
|
break;
|
|
case 'urn:mpeg:dash:utc:http-xsdate:2014':
|
|
case 'urn:mpeg:dash:utc:http-iso:2014':
|
|
case 'urn:mpeg:dash:utc:http-xsdate:2012':
|
|
case 'urn:mpeg:dash:utc:http-iso:2012':
|
|
attributes.method = 'GET';
|
|
break;
|
|
case 'urn:mpeg:dash:utc:direct:2014':
|
|
case 'urn:mpeg:dash:utc:direct:2012':
|
|
attributes.method = 'DIRECT';
|
|
attributes.value = Date.parse(attributes.value);
|
|
break;
|
|
case 'urn:mpeg:dash:utc:http-ntp:2014':
|
|
case 'urn:mpeg:dash:utc:ntp:2014':
|
|
case 'urn:mpeg:dash:utc:sntp:2014':
|
|
default:
|
|
throw new Error(errors.UNSUPPORTED_UTC_TIMING_SCHEME);
|
|
}
|
|
|
|
return attributes;
|
|
};
|