183 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
# mpd-parser
 | 
						|
 | 
						|
[](https://travis-ci.org/videojs/mpd-parser)
 | 
						|
[](https://greenkeeper.io/)
 | 
						|
[](http://slack.videojs.com)
 | 
						|
 | 
						|
[](https://nodei.co/npm/mpd-parser/)
 | 
						|
 | 
						|
mpd parser
 | 
						|
 | 
						|
## Table of Contents
 | 
						|
 | 
						|
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
 | 
						|
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
 | 
						|
 | 
						|
 | 
						|
- [Installation](#installation)
 | 
						|
- [Usage](#usage)
 | 
						|
  - [Parsed Output](#parsed-output)
 | 
						|
- [Including the Parser](#including-the-parser)
 | 
						|
  - [`<script>` Tag](#script-tag)
 | 
						|
  - [Browserify](#browserify)
 | 
						|
  - [RequireJS/AMD](#requirejsamd)
 | 
						|
- [License](#license)
 | 
						|
 | 
						|
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
 | 
						|
## Installation
 | 
						|
 | 
						|
```sh
 | 
						|
npm install --save mpd-parser
 | 
						|
```
 | 
						|
 | 
						|
## Usage
 | 
						|
 | 
						|
```js
 | 
						|
// get your manifest in whatever way works best
 | 
						|
// for example, by reading the file from the filesystem in node
 | 
						|
// or using fetch in a browser like so:
 | 
						|
 | 
						|
const manifestUri = 'https://example.com/dash.xml';
 | 
						|
const res = await fetch(manifestUri);
 | 
						|
const manifest = await res.text();
 | 
						|
 | 
						|
// A callback function to handle events like errors or warnings
 | 
						|
const eventHandler = ({ type, message }) => console.log(`${type}: ${message}`);
 | 
						|
 | 
						|
var parsedManifest = mpdParser.parse(manifest, { manifestUri, eventHandler });
 | 
						|
```
 | 
						|
 | 
						|
If dealing with a live stream, then on subsequent calls to parse, the previously parsed
 | 
						|
manifest object should be provided as an option to `parse` using the `previousManifest`
 | 
						|
option:
 | 
						|
 | 
						|
```js
 | 
						|
const newParsedManifest = mpdParser.parse(
 | 
						|
  manifest,
 | 
						|
  // parsedManifest comes from the prior example
 | 
						|
  { manifestUri, previousManifest: parsedManifest }
 | 
						|
);
 | 
						|
```
 | 
						|
 | 
						|
### Parsed Output
 | 
						|
 | 
						|
The parser ouputs a plain javascript object with the following structure:
 | 
						|
 | 
						|
```js
 | 
						|
Manifest {
 | 
						|
  allowCache: boolean,
 | 
						|
  contentSteering: {
 | 
						|
    defaultServiceLocation: string,
 | 
						|
    proxyServerURL: string,
 | 
						|
    queryBeforeStart: boolean,
 | 
						|
    serverURL: string
 | 
						|
  },
 | 
						|
  endList: boolean,
 | 
						|
  mediaSequence: number,
 | 
						|
  discontinuitySequence: number,
 | 
						|
  playlistType: string,
 | 
						|
  playlists: [
 | 
						|
    {
 | 
						|
      attributes: {},
 | 
						|
      Manifest
 | 
						|
    }
 | 
						|
  ],
 | 
						|
  mediaGroups: {
 | 
						|
    AUDIO: {
 | 
						|
      'GROUP-ID': {
 | 
						|
        default: boolean,
 | 
						|
        autoselect: boolean,
 | 
						|
        language: string,
 | 
						|
        uri: string,
 | 
						|
        instreamId: string,
 | 
						|
        characteristics: string,
 | 
						|
        forced: boolean
 | 
						|
      }
 | 
						|
    },
 | 
						|
    VIDEO: {},
 | 
						|
    'CLOSED-CAPTIONS': {},
 | 
						|
    SUBTITLES: {}
 | 
						|
  },
 | 
						|
  dateTimeString: string,
 | 
						|
  dateTimeObject: Date,
 | 
						|
  targetDuration: number,
 | 
						|
  totalDuration: number,
 | 
						|
  discontinuityStarts: [number],
 | 
						|
  segments: [
 | 
						|
    {
 | 
						|
      byterange: {
 | 
						|
        length: number,
 | 
						|
        offset: number
 | 
						|
      },
 | 
						|
      duration: number,
 | 
						|
      attributes: {},
 | 
						|
      discontinuity: number,
 | 
						|
      uri: string,
 | 
						|
      timeline: number,
 | 
						|
      key: {
 | 
						|
        method: string,
 | 
						|
        uri: string,
 | 
						|
        iv: string
 | 
						|
      },
 | 
						|
      map: {
 | 
						|
        uri: string,
 | 
						|
        byterange: {
 | 
						|
          length: number,
 | 
						|
          offset: number
 | 
						|
        }
 | 
						|
      },
 | 
						|
      'cue-out': string,
 | 
						|
      'cue-out-cont': string,
 | 
						|
      'cue-in': string
 | 
						|
    }
 | 
						|
  ]
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
## Including the Parser
 | 
						|
 | 
						|
To include mpd-parser on your website or web application, use any of the following methods.
 | 
						|
 | 
						|
### `<script>` Tag
 | 
						|
 | 
						|
This is the simplest case. Get the script in whatever way you prefer and include it on your page.
 | 
						|
 | 
						|
```html
 | 
						|
<script src="//path/to/mpd-parser.min.js"></script>
 | 
						|
<script>
 | 
						|
  var mpdParser = window['mpd-parser'];
 | 
						|
  var parsedManifest = mpdParser.parse(manifest, { manifestUri });
 | 
						|
</script>
 | 
						|
```
 | 
						|
 | 
						|
### Browserify
 | 
						|
 | 
						|
When using with Browserify, install mpd-parser via npm and `require` the parser as you would any other module.
 | 
						|
 | 
						|
```js
 | 
						|
var mpdParser = require('mpd-parser');
 | 
						|
 | 
						|
var parsedManifest = mpdParser.parse(manifest, { manifestUri });
 | 
						|
```
 | 
						|
 | 
						|
With ES6:
 | 
						|
```js
 | 
						|
import { parse } from 'mpd-parser';
 | 
						|
 | 
						|
const parsedManifest = parse(manifest, { manifestUri });
 | 
						|
```
 | 
						|
 | 
						|
### RequireJS/AMD
 | 
						|
 | 
						|
When using with RequireJS (or another AMD library), get the script in whatever way you prefer and `require` the parser as you normally would:
 | 
						|
 | 
						|
```js
 | 
						|
require(['mpd-parser'], function(mpdParser) {
 | 
						|
  var parsedManifest = mpdParser.parse(manifest, { manifestUri });
 | 
						|
});
 | 
						|
```
 | 
						|
 | 
						|
## License
 | 
						|
 | 
						|
Apache-2.0. Copyright (c) Brightcove, Inc
 |