You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

7 lines
15 KiB

/**
* m3u8-parser
* @version 2.1.0
* @copyright 2017 Brightcove, Inc
* @license Apache-2.0
*/
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.m3u8Parser=t()}}(function(){return function t(e,i,r){function n(s,o){if(!i[s]){if(!e[s]){var u="function"==typeof require&&require;if(!o&&u)return u(s,!0);if(a)return a(s,!0);var f=new Error("Cannot find module '"+s+"'");throw f.code="MODULE_NOT_FOUND",f}var c=i[s]={exports:{}};e[s][0].call(c.exports,function(t){var i=e[s][1][t];return n(i?i:t)},c,c.exports,t,e,i,r)}return i[s].exports}for(var a="function"==typeof require&&require,s=0;s<r.length;s++)n(r[s]);return n}({1:[function(t,e,i){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function t(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,i,r){return i&&t(e.prototype,i),r&&t(e,r),e}}(),u=t("./stream"),f=r(u),c=function(t){function e(){n(this,e);var t=a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return t.buffer="",t}return s(e,t),o(e,[{key:"push",value:function(t){var e=void 0;for(this.buffer+=t,e=this.buffer.indexOf("\n");e>-1;e=this.buffer.indexOf("\n"))this.trigger("data",this.buffer.substring(0,e)),this.buffer=this.buffer.substring(e+1)}}]),e}(f.default);i.default=c},{"./stream":4}],2:[function(t,e,i){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function t(t,e){var i=[],r=!0,n=!1,a=void 0;try{for(var s,o=t[Symbol.iterator]();!(r=(s=o.next()).done)&&(i.push(s.value),!e||i.length!==e);r=!0);}catch(t){n=!0,a=t}finally{try{!r&&o.return&&o.return()}finally{if(n)throw a}}return i}return function(e,i){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,i);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=function(){function t(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,i,r){return i&&t(e.prototype,i),r&&t(e,r),e}}(),f=t("./stream"),c=r(f),l=function(){var t="[^=]*",e='"[^"]*"|[^,]*',i="(?:"+t+")=(?:"+e+")";return new RegExp("(?:^|,)("+i+")")},d=function(t){for(var e=t.split(l()),i={},r=e.length,n=void 0;r--;)""!==e[r]&&(n=/([^=]*)=(.*)/.exec(e[r]).slice(1),n[0]=n[0].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^\s+|\s+$/g,""),n[1]=n[1].replace(/^['"](.*)['"]$/g,"$1"),i[n[0]]=n[1]);return i},g=function(t){function e(){return n(this,e),a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this))}return s(e,t),u(e,[{key:"push",value:function(t){var e=void 0,i=void 0;if(t=t.replace(/^[\u0000\s]+|[\u0000\s]+$/g,""),0!==t.length){if("#"!==t[0])return void this.trigger("data",{type:"uri",uri:t});if(0!==t.indexOf("#EXT"))return void this.trigger("data",{type:"comment",text:t.slice(1)});if(t=t.replace("\r",""),e=/^#EXTM3U/.exec(t))return void this.trigger("data",{type:"tag",tagType:"m3u"});if(e=/^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(t))return i={type:"tag",tagType:"inf"},e[1]&&(i.duration=parseFloat(e[1])),e[2]&&(i.title=e[2]),void this.trigger("data",i);if(e=/^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"targetduration"},e[1]&&(i.duration=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"totalduration"},e[1]&&(i.duration=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-VERSION:?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"version"},e[1]&&(i.version=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(t))return i={type:"tag",tagType:"media-sequence"},e[1]&&(i.number=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(t))return i={type:"tag",tagType:"discontinuity-sequence"},e[1]&&(i.number=parseInt(e[1],10)),void this.trigger("data",i);if(e=/^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(t))return i={type:"tag",tagType:"playlist-type"},e[1]&&(i.playlistType=e[1]),void this.trigger("data",i);if(e=/^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(t))return i={type:"tag",tagType:"byterange"},e[1]&&(i.length=parseInt(e[1],10)),e[2]&&(i.offset=parseInt(e[2],10)),void this.trigger("data",i);if(e=/^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(t))return i={type:"tag",tagType:"allow-cache"},e[1]&&(i.allowed=!/NO/.test(e[1])),void this.trigger("data",i);if(e=/^#EXT-X-MAP:?(.*)$/.exec(t)){if(i={type:"tag",tagType:"map"},e[1]){var r=d(e[1]);if(r.URI&&(i.uri=r.URI),r.BYTERANGE){var n=r.BYTERANGE.split("@"),a=o(n,2),s=a[0],u=a[1];i.byterange={},s&&(i.byterange.length=parseInt(s,10)),u&&(i.byterange.offset=parseInt(u,10))}}return void this.trigger("data",i)}if(e=/^#EXT-X-STREAM-INF:?(.*)$/.exec(t)){if(i={type:"tag",tagType:"stream-inf"},e[1]){if(i.attributes=d(e[1]),i.attributes.RESOLUTION){var f=i.attributes.RESOLUTION.split("x"),c={};f[0]&&(c.width=parseInt(f[0],10)),f[1]&&(c.height=parseInt(f[1],10)),i.attributes.RESOLUTION=c}i.attributes.BANDWIDTH&&(i.attributes.BANDWIDTH=parseInt(i.attributes.BANDWIDTH,10)),i.attributes["PROGRAM-ID"]&&(i.attributes["PROGRAM-ID"]=parseInt(i.attributes["PROGRAM-ID"],10))}return void this.trigger("data",i)}return(e=/^#EXT-X-MEDIA:?(.*)$/.exec(t))?(i={type:"tag",tagType:"media"},e[1]&&(i.attributes=d(e[1])),void this.trigger("data",i)):(e=/^#EXT-X-ENDLIST/.exec(t))?void this.trigger("data",{type:"tag",tagType:"endlist"}):(e=/^#EXT-X-DISCONTINUITY/.exec(t))?void this.trigger("data",{type:"tag",tagType:"discontinuity"}):(e=/^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(t))?(i={type:"tag",tagType:"program-date-time"},e[1]&&(i.dateTimeString=e[1],i.dateTimeObject=new Date(e[1])),void this.trigger("data",i)):(e=/^#EXT-X-KEY:?(.*)$/.exec(t))?(i={type:"tag",tagType:"key"},e[1]&&(i.attributes=d(e[1]),i.attributes.IV&&("0x"===i.attributes.IV.substring(0,2).toLowerCase()&&(i.attributes.IV=i.attributes.IV.substring(2)),i.attributes.IV=i.attributes.IV.match(/.{8}/g),i.attributes.IV[0]=parseInt(i.attributes.IV[0],16),i.attributes.IV[1]=parseInt(i.attributes.IV[1],16),i.attributes.IV[2]=parseInt(i.attributes.IV[2],16),i.attributes.IV[3]=parseInt(i.attributes.IV[3],16),i.attributes.IV=new Uint32Array(i.attributes.IV))),void this.trigger("data",i)):(e=/^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(t))?(i={type:"tag",tagType:"cue-out-cont"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i)):(e=/^#EXT-X-CUE-OUT:?(.*)?$/.exec(t))?(i={type:"tag",tagType:"cue-out"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i)):(e=/^#EXT-X-CUE-IN:?(.*)?$/.exec(t))?(i={type:"tag",tagType:"cue-in"},e[1]?i.data=e[1]:i.data="",void this.trigger("data",i)):void this.trigger("data",{type:"tag",data:t.slice(4)})}}}]),e}(c.default);i.default=g},{"./stream":4}],3:[function(t,e,i){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var o=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var i=arguments[e];for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[r]=i[r])}return t},u=function(){function t(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,i,r){return i&&t(e.prototype,i),r&&t(e,r),e}}(),f=t("./stream"),c=r(f),l=t("./line-stream"),d=r(l),g=t("./parse-stream"),p=r(g),y=function(t){function e(){n(this,e);var t=a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));t.lineStream=new d.default,t.parseStream=new p.default,t.lineStream.pipe(t.parseStream);var i=t,r=[],s={},u=void 0,f=void 0,c=function(){},l={AUDIO:{},VIDEO:{},"CLOSED-CAPTIONS":{},SUBTITLES:{}},g=0;return t.manifest={allowCache:!0,discontinuityStarts:[],segments:[]},t.parseStream.on("data",function(t){var e=void 0,n=void 0;({tag:function(){(({"allow-cache":function(){this.manifest.allowCache=t.allowed,"allowed"in t||(this.trigger("info",{message:"defaulting allowCache to YES"}),this.manifest.allowCache=!0)},byterange:function e(){var e={};"length"in t&&(s.byterange=e,e.length=t.length,"offset"in t||(this.trigger("info",{message:"defaulting offset to zero"}),t.offset=0)),"offset"in t&&(s.byterange=e,e.offset=t.offset)},endlist:function(){this.manifest.endList=!0},inf:function(){"mediaSequence"in this.manifest||(this.manifest.mediaSequence=0,this.trigger("info",{message:"defaulting media sequence to zero"})),"discontinuitySequence"in this.manifest||(this.manifest.discontinuitySequence=0,this.trigger("info",{message:"defaulting discontinuity sequence to zero"})),t.duration>0&&(s.duration=t.duration),0===t.duration&&(s.duration=.01,this.trigger("info",{message:"updating zero segment duration to a small value"})),this.manifest.segments=r},key:function(){return t.attributes?"NONE"===t.attributes.METHOD?void(f=null):t.attributes.URI?(t.attributes.METHOD||this.trigger("warn",{message:"defaulting key method to AES-128"}),f={method:t.attributes.METHOD||"AES-128",uri:t.attributes.URI},void("undefined"!=typeof t.attributes.IV&&(f.iv=t.attributes.IV))):void this.trigger("warn",{message:"ignoring key declaration without URI"}):void this.trigger("warn",{message:"ignoring key declaration without attribute list"})},"media-sequence":function(){return isFinite(t.number)?void(this.manifest.mediaSequence=t.number):void this.trigger("warn",{message:"ignoring invalid media sequence: "+t.number})},"discontinuity-sequence":function(){return isFinite(t.number)?(this.manifest.discontinuitySequence=t.number,void(g=t.number)):void this.trigger("warn",{message:"ignoring invalid discontinuity sequence: "+t.number})},"playlist-type":function(){return/VOD|EVENT/.test(t.playlistType)?void(this.manifest.playlistType=t.playlistType):void this.trigger("warn",{message:"ignoring unknown playlist type: "+t.playlist})},map:function(){u={},t.uri&&(u.uri=t.uri),t.byterange&&(u.byterange=t.byterange)},"stream-inf":function(){return this.manifest.playlists=r,this.manifest.mediaGroups=this.manifest.mediaGroups||l,t.attributes?(s.attributes||(s.attributes={}),void o(s.attributes,t.attributes)):void this.trigger("warn",{message:"ignoring empty stream-inf attributes"})},media:function(){if(this.manifest.mediaGroups=this.manifest.mediaGroups||l,!(t.attributes&&t.attributes.TYPE&&t.attributes["GROUP-ID"]&&t.attributes.NAME))return void this.trigger("warn",{message:"ignoring incomplete or missing media group"});var i=this.manifest.mediaGroups[t.attributes.TYPE];i[t.attributes["GROUP-ID"]]=i[t.attributes["GROUP-ID"]]||{},e=i[t.attributes["GROUP-ID"]],n={default:/yes/i.test(t.attributes.DEFAULT)},n.default?n.autoselect=!0:n.autoselect=/yes/i.test(t.attributes.AUTOSELECT),t.attributes.LANGUAGE&&(n.language=t.attributes.LANGUAGE),t.attributes.URI&&(n.uri=t.attributes.URI),t.attributes["INSTREAM-ID"]&&(n.instreamId=t.attributes["INSTREAM-ID"]),t.attributes.CHARACTERISTICS&&(n.characteristics=t.attributes.CHARACTERISTICS),t.attributes.FORCED&&(n.forced=/yes/i.test(t.attributes.FORCED)),e[t.attributes.NAME]=n},discontinuity:function(){g+=1,s.discontinuity=!0,this.manifest.discontinuityStarts.push(r.length)},"program-date-time":function(){this.manifest.dateTimeString=t.dateTimeString,this.manifest.dateTimeObject=t.dateTimeObject},targetduration:function(){return!isFinite(t.duration)||t.duration<0?void this.trigger("warn",{message:"ignoring invalid target duration: "+t.duration}):void(this.manifest.targetDuration=t.duration)},totalduration:function(){return!isFinite(t.duration)||t.duration<0?void this.trigger("warn",{message:"ignoring invalid total duration: "+t.duration}):void(this.manifest.totalDuration=t.duration)},"cue-out":function(){s.cueOut=t.data},"cue-out-cont":function(){s.cueOutCont=t.data},"cue-in":function(){s.cueIn=t.data}})[t.tagType]||c).call(i)},uri:function(){s.uri=t.uri,r.push(s),!this.manifest.targetDuration||"duration"in s||(this.trigger("warn",{message:"defaulting segment duration to the target duration"}),s.duration=this.manifest.targetDuration),f&&(s.key=f),s.timeline=g,u&&(s.map=u),s={}},comment:function(){}})[t.type].call(i)}),t}return s(e,t),u(e,[{key:"push",value:function(t){this.lineStream.push(t)}},{key:"end",value:function(){this.lineStream.push("\n")}}]),e}(c.default);i.default=y},{"./line-stream":1,"./parse-stream":2,"./stream":4}],4:[function(t,e,i){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var n=function(){function t(t,e){for(var i=0;i<e.length;i++){var r=e[i];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,i,r){return i&&t(e.prototype,i),r&&t(e,r),e}}(),a=function(){function t(){r(this,t),this.listeners={}}return n(t,[{key:"on",value:function(t,e){this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e)}},{key:"off",value:function(t,e){if(!this.listeners[t])return!1;var i=this.listeners[t].indexOf(e);return this.listeners[t].splice(i,1),i>-1}},{key:"trigger",value:function(t){var e=this.listeners[t],i=void 0,r=void 0,n=void 0;if(e)if(2===arguments.length)for(r=e.length,i=0;i<r;++i)e[i].call(this,arguments[1]);else for(n=Array.prototype.slice.call(arguments,1),r=e.length,i=0;i<r;++i)e[i].apply(this,n)}},{key:"dispose",value:function(){this.listeners={}}},{key:"pipe",value:function(t){this.on("data",function(e){t.push(e)})}}]),t}();i.default=a},{}],5:[function(t,e,i){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var n=t("./line-stream"),a=r(n),s=t("./parse-stream"),o=r(s),u=t("./parser"),f=r(u);e.exports={LineStream:a.default,ParseStream:o.default,Parser:f.default}},{"./line-stream":1,"./parse-stream":2,"./parser":3}]},{},[5])(5)});