| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586 |
- (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
- 'use strict';
- var _lineStream = require('./line-stream');
- var _lineStream2 = _interopRequireDefault(_lineStream);
- var _parseStream = require('./parse-stream');
- var _parseStream2 = _interopRequireDefault(_parseStream);
- var _parser = require('./parser');
- var _parser2 = _interopRequireDefault(_parser);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- module.exports = {
- LineStream: _lineStream2['default'],
- ParseStream: _parseStream2['default'],
- Parser: _parser2['default']
- }; /**
- * @file m3u8/index.js
- *
- * Utilities for parsing M3U8 files. If the entire manifest is available,
- * `Parser` will create an object representation with enough detail for managing
- * playback. `ParseStream` and `LineStream` are lower-level parsing primitives
- * that do not assume the entirety of the manifest is ready and expose a
- * ReadableStream-like interface.
- */
- },{"./line-stream":2,"./parse-stream":3,"./parser":4}],2:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- var _stream = require('./stream');
- var _stream2 = _interopRequireDefault(_stream);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
- * @file m3u8/line-stream.js
- */
- /**
- * A stream that buffers string input and generates a `data` event for each
- * line.
- *
- * @class LineStream
- * @extends Stream
- */
- var LineStream = function (_Stream) {
- _inherits(LineStream, _Stream);
- function LineStream() {
- _classCallCheck(this, LineStream);
- var _this = _possibleConstructorReturn(this, (LineStream.__proto__ || Object.getPrototypeOf(LineStream)).call(this));
- _this.buffer = '';
- return _this;
- }
- /**
- * Add new data to be parsed.
- *
- * @param {String} data the text to process
- */
- _createClass(LineStream, [{
- key: 'push',
- value: function push(data) {
- var nextNewline = void 0;
- this.buffer += data;
- nextNewline = this.buffer.indexOf('\n');
- for (; nextNewline > -1; nextNewline = this.buffer.indexOf('\n')) {
- this.trigger('data', this.buffer.substring(0, nextNewline));
- this.buffer = this.buffer.substring(nextNewline + 1);
- }
- }
- }]);
- return LineStream;
- }(_stream2['default']);
- exports['default'] = LineStream;
- },{"./stream":5}],3:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- var _stream = require('./stream');
- var _stream2 = _interopRequireDefault(_stream);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
- * @file m3u8/parse-stream.js
- */
- /**
- * "forgiving" attribute list psuedo-grammar:
- * attributes -> keyvalue (',' keyvalue)*
- * keyvalue -> key '=' value
- * key -> [^=]*
- * value -> '"' [^"]* '"' | [^,]*
- */
- var attributeSeparator = function attributeSeparator() {
- var key = '[^=]*';
- var value = '"[^"]*"|[^,]*';
- var keyvalue = '(?:' + key + ')=(?:' + value + ')';
- return new RegExp('(?:^|,)(' + keyvalue + ')');
- };
- /**
- * Parse attributes from a line given the seperator
- *
- * @param {String} attributes the attibute line to parse
- */
- var parseAttributes = function parseAttributes(attributes) {
- // split the string using attributes as the separator
- var attrs = attributes.split(attributeSeparator());
- var result = {};
- var i = attrs.length;
- var attr = void 0;
- while (i--) {
- // filter out unmatched portions of the string
- if (attrs[i] === '') {
- continue;
- }
- // split the key and value
- attr = /([^=]*)=(.*)/.exec(attrs[i]).slice(1);
- // trim whitespace and remove optional quotes around the value
- attr[0] = attr[0].replace(/^\s+|\s+$/g, '');
- attr[1] = attr[1].replace(/^\s+|\s+$/g, '');
- attr[1] = attr[1].replace(/^['"](.*)['"]$/g, '$1');
- result[attr[0]] = attr[1];
- }
- return result;
- };
- /**
- * A line-level M3U8 parser event stream. It expects to receive input one
- * line at a time and performs a context-free parse of its contents. A stream
- * interpretation of a manifest can be useful if the manifest is expected to
- * be too large to fit comfortably into memory or the entirety of the input
- * is not immediately available. Otherwise, it's probably much easier to work
- * with a regular `Parser` object.
- *
- * Produces `data` events with an object that captures the parser's
- * interpretation of the input. That object has a property `tag` that is one
- * of `uri`, `comment`, or `tag`. URIs only have a single additional
- * property, `line`, which captures the entirety of the input without
- * interpretation. Comments similarly have a single additional property
- * `text` which is the input without the leading `#`.
- *
- * Tags always have a property `tagType` which is the lower-cased version of
- * the M3U8 directive without the `#EXT` or `#EXT-X-` prefix. For instance,
- * `#EXT-X-MEDIA-SEQUENCE` becomes `media-sequence` when parsed. Unrecognized
- * tags are given the tag type `unknown` and a single additional property
- * `data` with the remainder of the input.
- *
- * @class ParseStream
- * @extends Stream
- */
- var ParseStream = function (_Stream) {
- _inherits(ParseStream, _Stream);
- function ParseStream() {
- _classCallCheck(this, ParseStream);
- return _possibleConstructorReturn(this, (ParseStream.__proto__ || Object.getPrototypeOf(ParseStream)).call(this));
- }
- /**
- * Parses an additional line of input.
- *
- * @param {String} line a single line of an M3U8 file to parse
- */
- _createClass(ParseStream, [{
- key: 'push',
- value: function push(line) {
- var match = void 0;
- var event = void 0;
- // strip whitespace
- line = line.replace(/^[\u0000\s]+|[\u0000\s]+$/g, '');
- if (line.length === 0) {
- // ignore empty lines
- return;
- }
- // URIs
- if (line[0] !== '#') {
- this.trigger('data', {
- type: 'uri',
- uri: line
- });
- return;
- }
- // Comments
- if (line.indexOf('#EXT') !== 0) {
- this.trigger('data', {
- type: 'comment',
- text: line.slice(1)
- });
- return;
- }
- // strip off any carriage returns here so the regex matching
- // doesn't have to account for them.
- line = line.replace('\r', '');
- // Tags
- match = /^#EXTM3U/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'm3u'
- });
- return;
- }
- match = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'inf'
- };
- if (match[1]) {
- event.duration = parseFloat(match[1]);
- }
- if (match[2]) {
- event.title = match[2];
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'targetduration'
- };
- if (match[1]) {
- event.duration = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'totalduration'
- };
- if (match[1]) {
- event.duration = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'version'
- };
- if (match[1]) {
- event.version = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'media-sequence'
- };
- if (match[1]) {
- event.number = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'discontinuity-sequence'
- };
- if (match[1]) {
- event.number = parseInt(match[1], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'playlist-type'
- };
- if (match[1]) {
- event.playlistType = match[1];
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'byterange'
- };
- if (match[1]) {
- event.length = parseInt(match[1], 10);
- }
- if (match[2]) {
- event.offset = parseInt(match[2], 10);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'allow-cache'
- };
- if (match[1]) {
- event.allowed = !/NO/.test(match[1]);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-MAP:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'map'
- };
- if (match[1]) {
- var attributes = parseAttributes(match[1]);
- if (attributes.URI) {
- event.uri = attributes.URI;
- }
- if (attributes.BYTERANGE) {
- var _attributes$BYTERANGE = attributes.BYTERANGE.split('@'),
- _attributes$BYTERANGE2 = _slicedToArray(_attributes$BYTERANGE, 2),
- length = _attributes$BYTERANGE2[0],
- offset = _attributes$BYTERANGE2[1];
- event.byterange = {};
- if (length) {
- event.byterange.length = parseInt(length, 10);
- }
- if (offset) {
- event.byterange.offset = parseInt(offset, 10);
- }
- }
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-STREAM-INF:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'stream-inf'
- };
- if (match[1]) {
- event.attributes = parseAttributes(match[1]);
- if (event.attributes.RESOLUTION) {
- var split = event.attributes.RESOLUTION.split('x');
- var resolution = {};
- if (split[0]) {
- resolution.width = parseInt(split[0], 10);
- }
- if (split[1]) {
- resolution.height = parseInt(split[1], 10);
- }
- event.attributes.RESOLUTION = resolution;
- }
- if (event.attributes.BANDWIDTH) {
- event.attributes.BANDWIDTH = parseInt(event.attributes.BANDWIDTH, 10);
- }
- if (event.attributes['PROGRAM-ID']) {
- event.attributes['PROGRAM-ID'] = parseInt(event.attributes['PROGRAM-ID'], 10);
- }
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-MEDIA:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'media'
- };
- if (match[1]) {
- event.attributes = parseAttributes(match[1]);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-ENDLIST/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'endlist'
- });
- return;
- }
- match = /^#EXT-X-DISCONTINUITY/.exec(line);
- if (match) {
- this.trigger('data', {
- type: 'tag',
- tagType: 'discontinuity'
- });
- return;
- }
- match = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'program-date-time'
- };
- if (match[1]) {
- event.dateTimeString = match[1];
- event.dateTimeObject = new Date(match[1]);
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-KEY:?(.*)$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'key'
- };
- if (match[1]) {
- event.attributes = parseAttributes(match[1]);
- // parse the IV string into a Uint32Array
- if (event.attributes.IV) {
- if (event.attributes.IV.substring(0, 2).toLowerCase() === '0x') {
- event.attributes.IV = event.attributes.IV.substring(2);
- }
- event.attributes.IV = event.attributes.IV.match(/.{8}/g);
- event.attributes.IV[0] = parseInt(event.attributes.IV[0], 16);
- event.attributes.IV[1] = parseInt(event.attributes.IV[1], 16);
- event.attributes.IV[2] = parseInt(event.attributes.IV[2], 16);
- event.attributes.IV[3] = parseInt(event.attributes.IV[3], 16);
- event.attributes.IV = new Uint32Array(event.attributes.IV);
- }
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'cue-out-cont'
- };
- if (match[1]) {
- event.data = match[1];
- } else {
- event.data = '';
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'cue-out'
- };
- if (match[1]) {
- event.data = match[1];
- } else {
- event.data = '';
- }
- this.trigger('data', event);
- return;
- }
- match = /^#EXT-X-CUE-IN:?(.*)?$/.exec(line);
- if (match) {
- event = {
- type: 'tag',
- tagType: 'cue-in'
- };
- if (match[1]) {
- event.data = match[1];
- } else {
- event.data = '';
- }
- this.trigger('data', event);
- return;
- }
- // unknown tag type
- this.trigger('data', {
- type: 'tag',
- data: line.slice(4)
- });
- }
- }]);
- return ParseStream;
- }(_stream2['default']);
- exports['default'] = ParseStream;
- },{"./stream":5}],4:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- var _stream = require('./stream');
- var _stream2 = _interopRequireDefault(_stream);
- var _lineStream = require('./line-stream');
- var _lineStream2 = _interopRequireDefault(_lineStream);
- var _parseStream = require('./parse-stream');
- var _parseStream2 = _interopRequireDefault(_parseStream);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /**
- * @file m3u8/parser.js
- */
- /**
- * A parser for M3U8 files. The current interpretation of the input is
- * exposed as a property `manifest` on parser objects. It's just two lines to
- * create and parse a manifest once you have the contents available as a string:
- *
- * ```js
- * var parser = new m3u8.Parser();
- * parser.push(xhr.responseText);
- * ```
- *
- * New input can later be applied to update the manifest object by calling
- * `push` again.
- *
- * The parser attempts to create a usable manifest object even if the
- * underlying input is somewhat nonsensical. It emits `info` and `warning`
- * events during the parse if it encounters input that seems invalid or
- * requires some property of the manifest object to be defaulted.
- *
- * @class Parser
- * @extends Stream
- */
- var Parser = function (_Stream) {
- _inherits(Parser, _Stream);
- function Parser() {
- _classCallCheck(this, Parser);
- var _this = _possibleConstructorReturn(this, (Parser.__proto__ || Object.getPrototypeOf(Parser)).call(this));
- _this.lineStream = new _lineStream2['default']();
- _this.parseStream = new _parseStream2['default']();
- _this.lineStream.pipe(_this.parseStream);
- /* eslint-disable consistent-this */
- var self = _this;
- /* eslint-enable consistent-this */
- var uris = [];
- var currentUri = {};
- // if specified, the active EXT-X-MAP definition
- var currentMap = void 0;
- // if specified, the active decryption key
- var _key = void 0;
- var noop = function noop() {};
- var defaultMediaGroups = {
- 'AUDIO': {},
- 'VIDEO': {},
- 'CLOSED-CAPTIONS': {},
- 'SUBTITLES': {}
- };
- // group segments into numbered timelines delineated by discontinuities
- var currentTimeline = 0;
- // the manifest is empty until the parse stream begins delivering data
- _this.manifest = {
- allowCache: true,
- discontinuityStarts: [],
- segments: []
- };
- // update the manifest with the m3u8 entry from the parse stream
- _this.parseStream.on('data', function (entry) {
- var mediaGroup = void 0;
- var rendition = void 0;
- ({
- tag: function tag() {
- // switch based on the tag type
- (({
- 'allow-cache': function allowCache() {
- this.manifest.allowCache = entry.allowed;
- if (!('allowed' in entry)) {
- this.trigger('info', {
- message: 'defaulting allowCache to YES'
- });
- this.manifest.allowCache = true;
- }
- },
- byterange: function byterange() {
- var byterange = {};
- if ('length' in entry) {
- currentUri.byterange = byterange;
- byterange.length = entry.length;
- if (!('offset' in entry)) {
- this.trigger('info', {
- message: 'defaulting offset to zero'
- });
- entry.offset = 0;
- }
- }
- if ('offset' in entry) {
- currentUri.byterange = byterange;
- byterange.offset = entry.offset;
- }
- },
- endlist: function endlist() {
- this.manifest.endList = true;
- },
- inf: function inf() {
- if (!('mediaSequence' in this.manifest)) {
- this.manifest.mediaSequence = 0;
- this.trigger('info', {
- message: 'defaulting media sequence to zero'
- });
- }
- if (!('discontinuitySequence' in this.manifest)) {
- this.manifest.discontinuitySequence = 0;
- this.trigger('info', {
- message: 'defaulting discontinuity sequence to zero'
- });
- }
- if (entry.duration > 0) {
- currentUri.duration = entry.duration;
- }
- if (entry.duration === 0) {
- currentUri.duration = 0.01;
- this.trigger('info', {
- message: 'updating zero segment duration to a small value'
- });
- }
- this.manifest.segments = uris;
- },
- key: function key() {
- if (!entry.attributes) {
- this.trigger('warn', {
- message: 'ignoring key declaration without attribute list'
- });
- return;
- }
- // clear the active encryption key
- if (entry.attributes.METHOD === 'NONE') {
- _key = null;
- return;
- }
- if (!entry.attributes.URI) {
- this.trigger('warn', {
- message: 'ignoring key declaration without URI'
- });
- return;
- }
- if (!entry.attributes.METHOD) {
- this.trigger('warn', {
- message: 'defaulting key method to AES-128'
- });
- }
- // setup an encryption key for upcoming segments
- _key = {
- method: entry.attributes.METHOD || 'AES-128',
- uri: entry.attributes.URI
- };
- if (typeof entry.attributes.IV !== 'undefined') {
- _key.iv = entry.attributes.IV;
- }
- },
- 'media-sequence': function mediaSequence() {
- if (!isFinite(entry.number)) {
- this.trigger('warn', {
- message: 'ignoring invalid media sequence: ' + entry.number
- });
- return;
- }
- this.manifest.mediaSequence = entry.number;
- },
- 'discontinuity-sequence': function discontinuitySequence() {
- if (!isFinite(entry.number)) {
- this.trigger('warn', {
- message: 'ignoring invalid discontinuity sequence: ' + entry.number
- });
- return;
- }
- this.manifest.discontinuitySequence = entry.number;
- currentTimeline = entry.number;
- },
- 'playlist-type': function playlistType() {
- if (!/VOD|EVENT/.test(entry.playlistType)) {
- this.trigger('warn', {
- message: 'ignoring unknown playlist type: ' + entry.playlist
- });
- return;
- }
- this.manifest.playlistType = entry.playlistType;
- },
- map: function map() {
- currentMap = {};
- if (entry.uri) {
- currentMap.uri = entry.uri;
- }
- if (entry.byterange) {
- currentMap.byterange = entry.byterange;
- }
- },
- 'stream-inf': function streamInf() {
- this.manifest.playlists = uris;
- this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;
- if (!entry.attributes) {
- this.trigger('warn', {
- message: 'ignoring empty stream-inf attributes'
- });
- return;
- }
- if (!currentUri.attributes) {
- currentUri.attributes = {};
- }
- _extends(currentUri.attributes, entry.attributes);
- },
- media: function media() {
- this.manifest.mediaGroups = this.manifest.mediaGroups || defaultMediaGroups;
- if (!(entry.attributes && entry.attributes.TYPE && entry.attributes['GROUP-ID'] && entry.attributes.NAME)) {
- this.trigger('warn', {
- message: 'ignoring incomplete or missing media group'
- });
- return;
- }
- // find the media group, creating defaults as necessary
- var mediaGroupType = this.manifest.mediaGroups[entry.attributes.TYPE];
- mediaGroupType[entry.attributes['GROUP-ID']] = mediaGroupType[entry.attributes['GROUP-ID']] || {};
- mediaGroup = mediaGroupType[entry.attributes['GROUP-ID']];
- // collect the rendition metadata
- rendition = {
- 'default': /yes/i.test(entry.attributes.DEFAULT)
- };
- if (rendition['default']) {
- rendition.autoselect = true;
- } else {
- rendition.autoselect = /yes/i.test(entry.attributes.AUTOSELECT);
- }
- if (entry.attributes.LANGUAGE) {
- rendition.language = entry.attributes.LANGUAGE;
- }
- if (entry.attributes.URI) {
- rendition.uri = entry.attributes.URI;
- }
- if (entry.attributes['INSTREAM-ID']) {
- rendition.instreamId = entry.attributes['INSTREAM-ID'];
- }
- if (entry.attributes.CHARACTERISTICS) {
- rendition.characteristics = entry.attributes.CHARACTERISTICS;
- }
- if (entry.attributes.FORCED) {
- rendition.forced = /yes/i.test(entry.attributes.FORCED);
- }
- // insert the new rendition
- mediaGroup[entry.attributes.NAME] = rendition;
- },
- discontinuity: function discontinuity() {
- currentTimeline += 1;
- currentUri.discontinuity = true;
- this.manifest.discontinuityStarts.push(uris.length);
- },
- 'program-date-time': function programDateTime() {
- this.manifest.dateTimeString = entry.dateTimeString;
- this.manifest.dateTimeObject = entry.dateTimeObject;
- },
- targetduration: function targetduration() {
- if (!isFinite(entry.duration) || entry.duration < 0) {
- this.trigger('warn', {
- message: 'ignoring invalid target duration: ' + entry.duration
- });
- return;
- }
- this.manifest.targetDuration = entry.duration;
- },
- totalduration: function totalduration() {
- if (!isFinite(entry.duration) || entry.duration < 0) {
- this.trigger('warn', {
- message: 'ignoring invalid total duration: ' + entry.duration
- });
- return;
- }
- this.manifest.totalDuration = entry.duration;
- },
- 'cue-out': function cueOut() {
- currentUri.cueOut = entry.data;
- },
- 'cue-out-cont': function cueOutCont() {
- currentUri.cueOutCont = entry.data;
- },
- 'cue-in': function cueIn() {
- currentUri.cueIn = entry.data;
- }
- })[entry.tagType] || noop).call(self);
- },
- uri: function uri() {
- currentUri.uri = entry.uri;
- uris.push(currentUri);
- // if no explicit duration was declared, use the target duration
- if (this.manifest.targetDuration && !('duration' in currentUri)) {
- this.trigger('warn', {
- message: 'defaulting segment duration to the target duration'
- });
- currentUri.duration = this.manifest.targetDuration;
- }
- // annotate with encryption information, if necessary
- if (_key) {
- currentUri.key = _key;
- }
- currentUri.timeline = currentTimeline;
- // annotate with initialization segment information, if necessary
- if (currentMap) {
- currentUri.map = currentMap;
- }
- // prepare for the next URI
- currentUri = {};
- },
- comment: function comment() {
- // comments are not important for playback
- }
- })[entry.type].call(self);
- });
- return _this;
- }
- /**
- * Parse the input string and update the manifest object.
- *
- * @param {String} chunk a potentially incomplete portion of the manifest
- */
- _createClass(Parser, [{
- key: 'push',
- value: function push(chunk) {
- this.lineStream.push(chunk);
- }
- /**
- * Flush any remaining input. This can be handy if the last line of an M3U8
- * manifest did not contain a trailing newline but the file has been
- * completely received.
- */
- }, {
- key: 'end',
- value: function end() {
- // flush any buffered input
- this.lineStream.push('\n');
- }
- }]);
- return Parser;
- }(_stream2['default']);
- exports['default'] = Parser;
- },{"./line-stream":2,"./parse-stream":3,"./stream":5}],5:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- /**
- * @file stream.js
- */
- /**
- * A lightweight readable stream implemention that handles event dispatching.
- *
- * @class Stream
- */
- var Stream = function () {
- function Stream() {
- _classCallCheck(this, Stream);
- this.listeners = {};
- }
- /**
- * Add a listener for a specified event type.
- *
- * @param {String} type the event name
- * @param {Function} listener the callback to be invoked when an event of
- * the specified type occurs
- */
- _createClass(Stream, [{
- key: 'on',
- value: function on(type, listener) {
- if (!this.listeners[type]) {
- this.listeners[type] = [];
- }
- this.listeners[type].push(listener);
- }
- /**
- * Remove a listener for a specified event type.
- *
- * @param {String} type the event name
- * @param {Function} listener a function previously registered for this
- * type of event through `on`
- * @return {Boolean} if we could turn it off or not
- */
- }, {
- key: 'off',
- value: function off(type, listener) {
- if (!this.listeners[type]) {
- return false;
- }
- var index = this.listeners[type].indexOf(listener);
- this.listeners[type].splice(index, 1);
- return index > -1;
- }
- /**
- * Trigger an event of the specified type on this stream. Any additional
- * arguments to this function are passed as parameters to event listeners.
- *
- * @param {String} type the event name
- */
- }, {
- key: 'trigger',
- value: function trigger(type) {
- var callbacks = this.listeners[type];
- var i = void 0;
- var length = void 0;
- var args = void 0;
- if (!callbacks) {
- return;
- }
- // Slicing the arguments on every invocation of this method
- // can add a significant amount of overhead. Avoid the
- // intermediate object creation for the common case of a
- // single callback argument
- if (arguments.length === 2) {
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].call(this, arguments[1]);
- }
- } else {
- args = Array.prototype.slice.call(arguments, 1);
- length = callbacks.length;
- for (i = 0; i < length; ++i) {
- callbacks[i].apply(this, args);
- }
- }
- }
- /**
- * Destroys the stream and cleans up.
- */
- }, {
- key: 'dispose',
- value: function dispose() {
- this.listeners = {};
- }
- /**
- * Forwards all `data` events on this stream to the destination stream. The
- * destination stream should provide a method `push` to receive the data
- * events as they arrive.
- *
- * @param {Stream} destination the stream that will receive all `data` events
- * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options
- */
- }, {
- key: 'pipe',
- value: function pipe(destination) {
- this.on('data', function (data) {
- destination.push(data);
- });
- }
- }]);
- return Stream;
- }();
- exports['default'] = Stream;
- },{}],6:[function(require,module,exports){
- (function (global){
- 'use strict';
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- var _src = require('../src');
- var _qunit = (typeof window !== "undefined" ? window['QUnit'] : typeof global !== "undefined" ? global['QUnit'] : null);
- var _qunit2 = _interopRequireDefault(_qunit);
- var _testExpected = require('./test-expected.js');
- var _testExpected2 = _interopRequireDefault(_testExpected);
- var _testManifests = require('./test-manifests.js');
- var _testManifests2 = _interopRequireDefault(_testManifests);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- _qunit2['default'].module('LineStream', {
- beforeEach: function beforeEach() {
- this.lineStream = new _src.LineStream();
- }
- });
- _qunit2['default'].test('empty inputs produce no tokens', function () {
- var data = false;
- this.lineStream.on('data', function () {
- data = true;
- });
- this.lineStream.push('');
- _qunit2['default'].ok(!data, 'no tokens were produced');
- });
- _qunit2['default'].test('splits on newlines', function () {
- var lines = [];
- this.lineStream.on('data', function (line) {
- lines.push(line);
- });
- this.lineStream.push('#EXTM3U\nmovie.ts\n');
- _qunit2['default'].strictEqual(2, lines.length, 'two lines are ready');
- _qunit2['default'].strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token');
- _qunit2['default'].strictEqual('movie.ts', lines.shift(), 'the second line is the second token');
- });
- _qunit2['default'].test('empty lines become empty strings', function () {
- var lines = [];
- this.lineStream.on('data', function (line) {
- lines.push(line);
- });
- this.lineStream.push('\n\n');
- _qunit2['default'].strictEqual(2, lines.length, 'two lines are ready');
- _qunit2['default'].strictEqual('', lines.shift(), 'the first line is empty');
- _qunit2['default'].strictEqual('', lines.shift(), 'the second line is empty');
- });
- _qunit2['default'].test('handles lines broken across appends', function () {
- var lines = [];
- this.lineStream.on('data', function (line) {
- lines.push(line);
- });
- this.lineStream.push('#EXTM');
- _qunit2['default'].strictEqual(0, lines.length, 'no lines are ready');
- this.lineStream.push('3U\nmovie.ts\n');
- _qunit2['default'].strictEqual(2, lines.length, 'two lines are ready');
- _qunit2['default'].strictEqual('#EXTM3U', lines.shift(), 'the first line is the first token');
- _qunit2['default'].strictEqual('movie.ts', lines.shift(), 'the second line is the second token');
- });
- _qunit2['default'].test('stops sending events after deregistering', function () {
- var temporaryLines = [];
- var temporary = function temporary(line) {
- temporaryLines.push(line);
- };
- var permanentLines = [];
- var permanent = function permanent(line) {
- permanentLines.push(line);
- };
- this.lineStream.on('data', temporary);
- this.lineStream.on('data', permanent);
- this.lineStream.push('line one\n');
- _qunit2['default'].strictEqual(temporaryLines.length, permanentLines.length, 'both callbacks receive the event');
- _qunit2['default'].ok(this.lineStream.off('data', temporary), 'a listener was removed');
- this.lineStream.push('line two\n');
- _qunit2['default'].strictEqual(1, temporaryLines.length, 'no new events are received');
- _qunit2['default'].strictEqual(2, permanentLines.length, 'new events are still received');
- });
- _qunit2['default'].module('ParseStream', {
- beforeEach: function beforeEach() {
- this.lineStream = new _src.LineStream();
- this.parseStream = new _src.ParseStream();
- this.lineStream.pipe(this.parseStream);
- }
- });
- _qunit2['default'].test('parses comment lines', function () {
- var manifest = '# a line that starts with a hash mark without "EXT" is a comment\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'comment', 'the type is comment');
- _qunit2['default'].strictEqual(element.text, manifest.slice(1, manifest.length - 1), 'the comment text is parsed');
- });
- _qunit2['default'].test('parses uri lines', function () {
- var manifest = 'any non-blank line that does not start with a hash-mark is a URI\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'uri', 'the type is uri');
- _qunit2['default'].strictEqual(element.uri, manifest.substring(0, manifest.length - 1), 'the uri text is parsed');
- });
- _qunit2['default'].test('parses unknown tag types', function () {
- var manifest = '#EXT-X-EXAMPLE-TAG:some,additional,stuff\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the type is tag');
- _qunit2['default'].strictEqual(element.data, manifest.slice(4, manifest.length - 1), 'unknown tag data is preserved');
- });
- // #EXTM3U
- _qunit2['default'].test('parses #EXTM3U tags', function () {
- var manifest = '#EXTM3U\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'm3u', 'the tag type is m3u');
- });
- // #EXTINF
- _qunit2['default'].test('parses minimal #EXTINF tags', function () {
- var manifest = '#EXTINF\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'inf', 'the tag type is inf');
- });
- _qunit2['default'].test('parses #EXTINF tags with durations', function () {
- var manifest = '#EXTINF:15\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'inf', 'the tag type is inf');
- _qunit2['default'].strictEqual(element.duration, 15, 'the duration is parsed');
- _qunit2['default'].ok(!('title' in element), 'no title is parsed');
- manifest = '#EXTINF:21,\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'inf', 'the tag type is inf');
- _qunit2['default'].strictEqual(element.duration, 21, 'the duration is parsed');
- _qunit2['default'].ok(!('title' in element), 'no title is parsed');
- });
- _qunit2['default'].test('parses #EXTINF tags with a duration and title', function () {
- var manifest = '#EXTINF:13,Does anyone really use the title attribute?\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'inf', 'the tag type is inf');
- _qunit2['default'].strictEqual(element.duration, 13, 'the duration is parsed');
- _qunit2['default'].strictEqual(element.title, manifest.substring(manifest.indexOf(',') + 1, manifest.length - 1), 'the title is parsed');
- });
- _qunit2['default'].test('parses #EXTINF tags with carriage returns', function () {
- var manifest = '#EXTINF:13,Does anyone really use the title attribute?\r\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'inf', 'the tag type is inf');
- _qunit2['default'].strictEqual(element.duration, 13, 'the duration is parsed');
- _qunit2['default'].strictEqual(element.title, manifest.substring(manifest.indexOf(',') + 1, manifest.length - 2), 'the title is parsed');
- });
- // #EXT-X-TARGETDURATION
- _qunit2['default'].test('parses minimal #EXT-X-TARGETDURATION tags', function () {
- var manifest = '#EXT-X-TARGETDURATION\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'targetduration', 'the tag type is targetduration');
- _qunit2['default'].ok(!('duration' in element), 'no duration is parsed');
- });
- _qunit2['default'].test('parses #EXT-X-TARGETDURATION with duration', function () {
- var manifest = '#EXT-X-TARGETDURATION:47\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'targetduration', 'the tag type is targetduration');
- _qunit2['default'].strictEqual(element.duration, 47, 'the duration is parsed');
- });
- // #EXT-X-VERSION
- _qunit2['default'].test('parses minimal #EXT-X-VERSION tags', function () {
- var manifest = '#EXT-X-VERSION:\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'version', 'the tag type is version');
- _qunit2['default'].ok(!('version' in element), 'no version is present');
- });
- _qunit2['default'].test('parses #EXT-X-VERSION with a version', function () {
- var manifest = '#EXT-X-VERSION:99\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'version', 'the tag type is version');
- _qunit2['default'].strictEqual(element.version, 99, 'the version is parsed');
- });
- // #EXT-X-MEDIA-SEQUENCE
- _qunit2['default'].test('parses minimal #EXT-X-MEDIA-SEQUENCE tags', function () {
- var manifest = '#EXT-X-MEDIA-SEQUENCE\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'media-sequence', 'the tag type is media-sequence');
- _qunit2['default'].ok(!('number' in element), 'no number is present');
- });
- _qunit2['default'].test('parses #EXT-X-MEDIA-SEQUENCE with sequence numbers', function () {
- var manifest = '#EXT-X-MEDIA-SEQUENCE:109\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'media-sequence', 'the tag type is media-sequence');
- _qunit2['default'].ok(element.number, 109, 'the number is parsed');
- });
- // #EXT-X-PLAYLIST-TYPE
- _qunit2['default'].test('parses minimal #EXT-X-PLAYLIST-TYPE tags', function () {
- var manifest = '#EXT-X-PLAYLIST-TYPE:\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type');
- _qunit2['default'].ok(!('playlistType' in element), 'no playlist type is present');
- });
- _qunit2['default'].test('parses #EXT-X-PLAYLIST-TYPE with mutability info', function () {
- var manifest = '#EXT-X-PLAYLIST-TYPE:EVENT\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type');
- _qunit2['default'].strictEqual(element.playlistType, 'EVENT', 'the playlist type is EVENT');
- manifest = '#EXT-X-PLAYLIST-TYPE:VOD\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type');
- _qunit2['default'].strictEqual(element.playlistType, 'VOD', 'the playlist type is VOD');
- manifest = '#EXT-X-PLAYLIST-TYPE:nonsense\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'playlist-type', 'the tag type is playlist-type');
- _qunit2['default'].strictEqual(element.playlistType, 'nonsense', 'the playlist type is parsed');
- });
- // #EXT-X-BYTERANGE
- _qunit2['default'].test('parses minimal #EXT-X-BYTERANGE tags', function () {
- var manifest = '#EXT-X-BYTERANGE\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'byterange', 'the tag type is byterange');
- _qunit2['default'].ok(!('length' in element), 'no length is present');
- _qunit2['default'].ok(!('offset' in element), 'no offset is present');
- });
- _qunit2['default'].test('parses #EXT-X-BYTERANGE with length and offset', function () {
- var manifest = '#EXT-X-BYTERANGE:45\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'byterange', 'the tag type is byterange');
- _qunit2['default'].strictEqual(element.length, 45, 'length is parsed');
- _qunit2['default'].ok(!('offset' in element), 'no offset is present');
- manifest = '#EXT-X-BYTERANGE:108@16\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'byterange', 'the tag type is byterange');
- _qunit2['default'].strictEqual(element.length, 108, 'length is parsed');
- _qunit2['default'].strictEqual(element.offset, 16, 'offset is parsed');
- });
- // #EXT-X-ALLOW-CACHE
- _qunit2['default'].test('parses minimal #EXT-X-ALLOW-CACHE tags', function () {
- var manifest = '#EXT-X-ALLOW-CACHE:\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache');
- _qunit2['default'].ok(!('allowed' in element), 'no allowed is present');
- });
- _qunit2['default'].test('parses valid #EXT-X-ALLOW-CACHE tags', function () {
- var manifest = '#EXT-X-ALLOW-CACHE:YES\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache');
- _qunit2['default'].ok(element.allowed, 'allowed is parsed');
- manifest = '#EXT-X-ALLOW-CACHE:NO\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'allow-cache', 'the tag type is allow-cache');
- _qunit2['default'].ok(!element.allowed, 'allowed is parsed');
- });
- // #EXT-X-MAP
- _qunit2['default'].test('parses minimal #EXT-X-MAP tags', function () {
- var manifest = '#EXT-X-MAP:URI="init.m4s"\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'map', 'the tag type is map');
- _qunit2['default'].strictEqual(element.uri, 'init.m4s', 'parsed the uri');
- });
- _qunit2['default'].test('parses #EXT-X-MAP tags with a byterange', function () {
- var manifest = '#EXT-X-MAP:URI="0.m4s", BYTERANGE="1000@23"\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.uri, '0.m4s', 'parsed the uri');
- _qunit2['default'].strictEqual(element.byterange.length, 1000, 'parsed the byterange length');
- _qunit2['default'].strictEqual(element.byterange.offset, 23, 'parsed the byterange offset');
- });
- _qunit2['default'].test('parses #EXT-X-MAP tags with arbitrary attributes', function () {
- var manifest = '#EXT-X-MAP:URI="init.mp4", SOMETHING=YES,BYTERANGE="720@0"\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.uri, 'init.mp4', 'parsed the uri');
- _qunit2['default'].strictEqual(element.byterange.length, 720, 'parsed the byterange length');
- _qunit2['default'].strictEqual(element.byterange.offset, 0, 'parsed the byterange offset');
- });
- // #EXT-X-STREAM-INF
- _qunit2['default'].test('parses minimal #EXT-X-STREAM-INF tags', function () {
- var manifest = '#EXT-X-STREAM-INF\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].ok(!('attributes' in element), 'no attributes are present');
- });
- // #EXT-X-PROGRAM-DATE-TIME
- _qunit2['default'].test('parses minimal EXT-X-PROGRAM-DATE-TIME tags', function () {
- var manifest = '#EXT-X-PROGRAM-DATE-TIME\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time');
- _qunit2['default'].ok(!('dateTimeString' in element), 'no dateTime is present');
- });
- _qunit2['default'].test('parses EXT-X-PROGRAM-DATE-TIME tags with valid date-time formats', function () {
- var manifest = '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.166-04:00\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time');
- _qunit2['default'].strictEqual(element.dateTimeString, '2016-06-22T09:20:16.166-04:00', 'dateTimeString is parsed');
- _qunit2['default'].deepEqual(element.dateTimeObject, new Date('2016-06-22T09:20:16.166-04:00'), 'dateTimeObject is parsed');
- manifest = '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.16389Z\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'program-date-time', 'the tag type is date-time');
- _qunit2['default'].strictEqual(element.dateTimeString, '2016-06-22T09:20:16.16389Z', 'dateTimeString is parsed');
- _qunit2['default'].deepEqual(element.dateTimeObject, new Date('2016-06-22T09:20:16.16389Z'), 'dateTimeObject is parsed');
- });
- _qunit2['default'].test('parses #EXT-X-STREAM-INF with common attributes', function () {
- var manifest = '#EXT-X-STREAM-INF:BANDWIDTH=14400\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].strictEqual(element.attributes.BANDWIDTH, 14400, 'bandwidth is parsed');
- manifest = '#EXT-X-STREAM-INF:PROGRAM-ID=7\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].strictEqual(element.attributes['PROGRAM-ID'], 7, 'program-id is parsed');
- manifest = '#EXT-X-STREAM-INF:RESOLUTION=396x224\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].strictEqual(element.attributes.RESOLUTION.width, 396, 'width is parsed');
- _qunit2['default'].strictEqual(element.attributes.RESOLUTION.height, 224, 'heigth is parsed');
- manifest = '#EXT-X-STREAM-INF:CODECS="avc1.4d400d, mp4a.40.2"\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].strictEqual(element.attributes.CODECS, 'avc1.4d400d, mp4a.40.2', 'codecs are parsed');
- });
- _qunit2['default'].test('parses #EXT-X-STREAM-INF with arbitrary attributes', function () {
- var manifest = '#EXT-X-STREAM-INF:NUMERIC=24,ALPHA=Value,MIXED=123abc\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'stream-inf', 'the tag type is stream-inf');
- _qunit2['default'].strictEqual(element.attributes.NUMERIC, '24', 'numeric attributes are parsed');
- _qunit2['default'].strictEqual(element.attributes.ALPHA, 'Value', 'alphabetic attributes are parsed');
- _qunit2['default'].strictEqual(element.attributes.MIXED, '123abc', 'mixed attributes are parsed');
- });
- // #EXT-X-ENDLIST
- _qunit2['default'].test('parses #EXT-X-ENDLIST tags', function () {
- var manifest = '#EXT-X-ENDLIST\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].strictEqual(element.type, 'tag', 'the line type is tag');
- _qunit2['default'].strictEqual(element.tagType, 'endlist', 'the tag type is stream-inf');
- });
- // #EXT-X-KEY
- _qunit2['default'].test('parses valid #EXT-X-KEY tags', function () {
- var manifest = '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].deepEqual(element, {
- type: 'tag',
- tagType: 'key',
- attributes: {
- METHOD: 'AES-128',
- URI: 'https://priv.example.com/key.php?r=52'
- }
- }, 'parsed a valid key');
- manifest = '#EXT-X-KEY:URI="https://example.com/key#1",METHOD=FutureType-1024\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].deepEqual(element, {
- type: 'tag',
- tagType: 'key',
- attributes: {
- METHOD: 'FutureType-1024',
- URI: 'https://example.com/key#1'
- }
- }, 'parsed the attribute list independent of order');
- manifest = '#EXT-X-KEY:IV=1234567890abcdef1234567890abcdef\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element.attributes.IV, 'detected an IV attribute');
- _qunit2['default'].deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value');
- });
- _qunit2['default'].test('parses minimal #EXT-X-KEY tags', function () {
- var manifest = '#EXT-X-KEY:\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element, 'an event was triggered');
- _qunit2['default'].deepEqual(element, {
- type: 'tag',
- tagType: 'key'
- }, 'parsed a minimal key tag');
- });
- _qunit2['default'].test('parses lightly-broken #EXT-X-KEY tags', function () {
- var manifest = '#EXT-X-KEY:URI=\'https://example.com/single-quote\',METHOD=AES-128\n';
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].strictEqual(element.attributes.URI, 'https://example.com/single-quote', 'parsed a single-quoted uri');
- element = null;
- manifest = '#EXT-X-KEYURI="https://example.com/key",METHOD=AES-128\n';
- this.lineStream.push(manifest);
- _qunit2['default'].strictEqual(element.tagType, 'key', 'parsed the tag type');
- _qunit2['default'].strictEqual(element.attributes.URI, 'https://example.com/key', 'inferred a colon after the tag type');
- element = null;
- manifest = '#EXT-X-KEY: URI = "https://example.com/key",METHOD=AES-128\n';
- this.lineStream.push(manifest);
- _qunit2['default'].strictEqual(element.attributes.URI, 'https://example.com/key', 'trims and removes quotes around the URI');
- });
- _qunit2['default'].test('parses prefixed with 0x or 0X #EXT-X-KEY:IV tags', function () {
- var manifest = void 0;
- var element = void 0;
- this.parseStream.on('data', function (elem) {
- element = elem;
- });
- manifest = '#EXT-X-KEY:IV=0x1234567890abcdef1234567890abcdef\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element.attributes.IV, 'detected an IV attribute');
- _qunit2['default'].deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value with 0x');
- manifest = '#EXT-X-KEY:IV=0X1234567890abcdef1234567890abcdef\n';
- this.lineStream.push(manifest);
- _qunit2['default'].ok(element.attributes.IV, 'detected an IV attribute');
- _qunit2['default'].deepEqual(element.attributes.IV, new Uint32Array([0x12345678, 0x90abcdef, 0x12345678, 0x90abcdef]), 'parsed an IV value with 0X');
- });
- _qunit2['default'].test('ignores empty lines', function () {
- var manifest = '\n';
- var event = false;
- this.parseStream.on('data', function () {
- event = true;
- });
- this.lineStream.push(manifest);
- _qunit2['default'].ok(!event, 'no event is triggered');
- });
- _qunit2['default'].module('m3u8 parser');
- _qunit2['default'].test('can be constructed', function () {
- _qunit2['default'].notStrictEqual(_typeof(new _src.Parser()), 'undefined', 'parser is defined');
- });
- _qunit2['default'].test('attaches cue-out data to segment', function () {
- var parser = new _src.Parser();
- var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-OUT:10', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-OUT15', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-OUT', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n');
- parser.push(manifest);
- _qunit2['default'].equal(parser.manifest.segments[1].cueOut, '10', 'parser attached cue out tag');
- _qunit2['default'].equal(parser.manifest.segments[2].cueOut, '15', 'cue out without : seperator');
- _qunit2['default'].equal(parser.manifest.segments[3].cueOut, '', 'cue out without data');
- });
- _qunit2['default'].test('attaches cue-out-cont data to segment', function () {
- var parser = new _src.Parser();
- var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-OUT-CONT:10/60', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-OUT-CONT15/30', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-OUT-CONT', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n');
- parser.push(manifest);
- _qunit2['default'].equal(parser.manifest.segments[1].cueOutCont, '10/60', 'parser attached cue out cont tag');
- _qunit2['default'].equal(parser.manifest.segments[2].cueOutCont, '15/30', 'cue out cont without : seperator');
- _qunit2['default'].equal(parser.manifest.segments[3].cueOutCont, '', 'cue out cont without data');
- });
- _qunit2['default'].test('attaches cue-in data to segment', function () {
- var parser = new _src.Parser();
- var manifest = ['#EXTM3U', '#EXTINF:5,', '#COMMENT', 'ex1.ts', '#EXT-X-CUE-IN', '#EXTINF:5,', 'ex2.ts', '#EXT-X-CUE-IN:15', '#EXT-UKNOWN-TAG', '#EXTINF:5,', 'ex3.ts', '#EXT-X-CUE-IN=abc', '#EXTINF:5,', 'ex3.ts', '#EXT-X-ENDLIST'].join('\n');
- parser.push(manifest);
- _qunit2['default'].equal(parser.manifest.segments[1].cueIn, '', 'parser attached cue in tag');
- _qunit2['default'].equal(parser.manifest.segments[2].cueIn, '15', 'cue in with data');
- _qunit2['default'].equal(parser.manifest.segments[3].cueIn, '=abc', 'cue in without colon seperator');
- });
- _qunit2['default'].test('parses characteristics attribute', function () {
- var parser = new _src.Parser();
- var manifest = ['#EXTM3U', '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",CHARACTERISTICS="char",NAME="test"', '#EXT-X-STREAM-INF:BANDWIDTH=1,CODECS="mp4a.40.2, avc1.4d400d",SUBTITLES="subs"', 'index.m3u8'].join('\n');
- parser.push(manifest);
- _qunit2['default'].equal(parser.manifest.mediaGroups.SUBTITLES.subs.test.characteristics, 'char', 'parsed CHARACTERISTICS attribute');
- });
- _qunit2['default'].test('parses FORCED attribute', function () {
- var parser = new _src.Parser();
- var manifest = ['#EXTM3U', '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",CHARACTERISTICS="char",NAME="test",FORCED=YES', '#EXT-X-STREAM-INF:BANDWIDTH=1,CODECS="mp4a.40.2, avc1.4d400d",SUBTITLES="subs"', 'index.m3u8'].join('\n');
- parser.push(manifest);
- _qunit2['default'].ok(parser.manifest.mediaGroups.SUBTITLES.subs.test.forced, 'parsed FORCED attribute');
- });
- _qunit2['default'].module('m3u8s');
- _qunit2['default'].test('parses static manifests as expected', function () {
- var key = void 0;
- for (key in _testManifests2['default']) {
- if (_testExpected2['default'][key]) {
- var parser = new _src.Parser();
- parser.push(_testManifests2['default'][key]);
- _qunit2['default'].deepEqual(parser.manifest, _testExpected2['default'][key], key + '.m3u8 was parsed correctly');
- }
- }
- });
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
- },{"../src":1,"./test-expected.js":7,"./test-manifests.js":8}],7:[function(require,module,exports){
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports["default"] = {
- "absoluteUris": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "http://example.com/00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "https://example.com/00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "//example.com/00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "http://example.com/00004.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "allowCache": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 587500,
- "offset": 522828
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 713084,
- "offset": 1110328
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 476580,
- "offset": 1823412
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 535612,
- "offset": 2299992
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 207176,
- "offset": 2835604
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 455900,
- "offset": 3042780
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 657248,
- "offset": 3498680
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 571708,
- "offset": 4155928
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 485040,
- "offset": 4727636
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 709136,
- "offset": 5212676
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 730004,
- "offset": 5921812
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 456276,
- "offset": 6651816
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 468684,
- "offset": 7108092
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 444996,
- "offset": 7576776
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 331444,
- "offset": 8021772
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 44556,
- "offset": 8353216
- },
- "duration": 1.4167,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "allowCacheInvalid": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "alternateAudio": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- // TYPE
- AUDIO: {
- // GROUP-ID
- "audio": {
- // NAME
- "English": {
- language: 'eng',
- autoselect: true,
- "default": true,
- uri: "eng/prog_index.m3u8"
- },
- // NAME
- "Français": {
- language: "fre",
- autoselect: true,
- "default": false,
- uri: "fre/prog_index.m3u8"
- },
- // NAME
- "Espanol": {
- language: "sp",
- autoselect: true,
- "default": false,
- uri: "sp/prog_index.m3u8"
- }
- }
- },
- VIDEO: {},
- "CLOSED-CAPTIONS": {},
- SUBTITLES: {}
- },
- playlists: [{
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 195023,
- CODECS: "avc1.42e00a,mp4a.40.2",
- AUDIO: 'audio'
- },
- timeline: 0,
- uri: "lo/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 591680,
- CODECS: "avc1.42e01e,mp4a.40.2",
- AUDIO: 'audio'
- },
- timeline: 0,
- uri: "hi/prog_index.m3u8"
- }],
- segments: []
- },
- "alternateVideo": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- AUDIO: {
- aac: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "eng/prog_index.m3u8"
- }
- }
- },
- VIDEO: {
- "500kbs": {
- Angle1: {
- autoselect: true,
- "default": true
- },
- Angle2: {
- autoselect: true,
- "default": false,
- uri: "Angle2/500kbs/prog_index.m3u8"
- },
- Angle3: {
- autoselect: true,
- "default": false,
- uri: "Angle3/500kbs/prog_index.m3u8"
- }
- }
- },
- "CLOSED-CAPTIONS": {},
- SUBTITLES: {}
- },
- playlists: [{
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 754857,
- CODECS: "mp4a.40.2,avc1.4d401e",
- AUDIO: "aac",
- VIDEO: "500kbs"
- },
- timeline: 0,
- uri: "Angle1/500kbs/prog_index.m3u8"
- }],
- segments: []
- },
- "brightcove": {
- "allowCache": true,
- "playlists": [{
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 240000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 40000
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 440000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 1928000,
- "RESOLUTION": {
- "width": 960,
- "height": 540
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001"
- }],
- "discontinuityStarts": [],
- "mediaGroups": {
- "VIDEO": {},
- "AUDIO": {},
- "CLOSED-CAPTIONS": {},
- "SUBTITLES": {}
- },
- "segments": []
- },
- "byteRange": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 587500,
- "offset": 522828
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 713084,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video2.ts"
- }, {
- "byterange": {
- "length": 476580,
- "offset": 1823412
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 535612,
- "offset": 2299992
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 207176,
- "offset": 2835604
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 455900,
- "offset": 3042780
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 657248,
- "offset": 3498680
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 571708,
- "offset": 4155928
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 485040,
- "offset": 4727636
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 709136,
- "offset": 5212676
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 730004,
- "offset": 5921812
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 456276,
- "offset": 6651816
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 468684,
- "offset": 7108092
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 444996,
- "offset": 7576776
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 331444,
- "offset": 8021772
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 44556,
- "offset": 8353216
- },
- "duration": 1.4167,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "dateTime": {
- "allowCache": false,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "dateTimeString": "2016-06-22T09:20:16.166-04:00",
- "dateTimeObject": new Date("2016-06-22T09:20:16.166-04:00"),
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "disallowCache": {
- "allowCache": false,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "disc-sequence": {
- "allowCache": true,
- "mediaSequence": 0,
- "discontinuitySequence": 3,
- "segments": [{
- "duration": 10,
- "timeline": 3,
- "uri": "001.ts"
- }, {
- "duration": 19,
- "timeline": 3,
- "uri": "002.ts"
- }, {
- "discontinuity": true,
- "duration": 10,
- "timeline": 4,
- "uri": "003.ts"
- }, {
- "duration": 11,
- "timeline": 4,
- "uri": "004.ts"
- }],
- "targetDuration": 19,
- "endList": true,
- "discontinuityStarts": [2]
- },
- "discontinuity": {
- "allowCache": true,
- "mediaSequence": 0,
- "discontinuitySequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "001.ts"
- }, {
- "duration": 19,
- "timeline": 0,
- "uri": "002.ts"
- }, {
- "discontinuity": true,
- "duration": 10,
- "timeline": 1,
- "uri": "003.ts"
- }, {
- "duration": 11,
- "timeline": 1,
- "uri": "004.ts"
- }, {
- "discontinuity": true,
- "duration": 10,
- "timeline": 2,
- "uri": "005.ts"
- }, {
- "duration": 10,
- "timeline": 2,
- "uri": "006.ts"
- }, {
- "duration": 10,
- "timeline": 2,
- "uri": "007.ts"
- }, {
- "discontinuity": true,
- "duration": 10,
- "timeline": 3,
- "uri": "008.ts"
- }, {
- "duration": 16,
- "timeline": 3,
- "uri": "009.ts"
- }],
- "targetDuration": 19,
- "endList": true,
- "discontinuityStarts": [2, 4, 7]
- },
- "domainUris": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/subdir/00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/00004.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "empty": {
- "allowCache": true,
- "discontinuityStarts": [],
- "segments": []
- },
- "emptyAllowCache": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "emptyMediaSequence": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "emptyPlaylistType": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "emptyTargetDuration": {
- "allowCache": true,
- "playlists": [{
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 240000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 40000
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 440000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 1928000,
- "RESOLUTION": {
- "width": 960,
- "height": 540
- }
- },
- "timeline": 0,
- "uri": "http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001"
- }],
- "discontinuityStarts": [],
- "mediaGroups": {
- "VIDEO": {},
- "AUDIO": {},
- "CLOSED-CAPTIONS": {},
- "SUBTITLES": {}
- },
- "segments": []
- },
- "encrypted": {
- "allowCache": true,
- "mediaSequence": 7794,
- "discontinuitySequence": 0,
- "discontinuityStarts": [],
- "segments": [{
- "duration": 2.833,
- "timeline": 0,
- "key": {
- "method": "AES-128",
- "uri": "https://priv.example.com/key.php?r=52"
- },
- "uri": "http://media.example.com/fileSequence52-A.ts"
- }, {
- "duration": 15,
- "timeline": 0,
- "key": {
- "method": "AES-128",
- "uri": "https://priv.example.com/key.php?r=52"
- },
- "uri": "http://media.example.com/fileSequence52-B.ts"
- }, {
- "duration": 13.333,
- "timeline": 0,
- "key": {
- "method": "AES-128",
- "uri": "https://priv.example.com/key.php?r=52"
- },
- "uri": "http://media.example.com/fileSequence52-C.ts"
- }, {
- "duration": 15,
- "timeline": 0,
- "key": {
- "method": "AES-128",
- "uri": "https://priv.example.com/key.php?r=53"
- },
- "uri": "http://media.example.com/fileSequence53-A.ts"
- }, {
- "duration": 14,
- "timeline": 0,
- "key": {
- "method": "AES-128",
- "uri": "https://priv.example.com/key.php?r=54",
- "iv": new Uint32Array([0, 0, 331, 3063767524])
- },
- "uri": "http://media.example.com/fileSequence53-B.ts"
- }, {
- "duration": 15,
- "timeline": 0,
- "uri": "http://media.example.com/fileSequence53-B.ts"
- }],
- "targetDuration": 15
- },
- "event": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "EVENT",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "extXPlaylistTypeInvalidPlaylist": {
- "allowCache": true,
- "mediaSequence": 1,
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "extinf": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 587500,
- "offset": 522828
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 713084,
- "offset": 1110328
- },
- "duration": 5,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 476580,
- "offset": 1823412
- },
- "duration": 9.7,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 535612,
- "offset": 2299992
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 207176,
- "offset": 2835604
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 455900,
- "offset": 3042780
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 657248,
- "offset": 3498680
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 571708,
- "offset": 4155928
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 485040,
- "offset": 4727636
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 709136,
- "offset": 5212676
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 730004,
- "offset": 5921812
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 456276,
- "offset": 6651816
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 468684,
- "offset": 7108092
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 444996,
- "offset": 7576776
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 331444,
- "offset": 8021772
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 44556,
- "offset": 8353216
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "fmp4": {
- "allowCache": true,
- "mediaSequence": 1,
- "playlistType": "VOD",
- "targetDuration": 6,
- "discontinuitySequence": 0,
- "discontinuityStarts": [],
- "segments": [{
- "byterange": {
- "length": 5666510,
- "offset": 720
- },
- "duration": 6.006,
- "timeline": 0,
- "uri": "main.mp4",
- "map": {
- "byterange": {
- "length": 720,
- "offset": 0
- },
- "uri": "main.mp4"
- }
- }, {
- "byterange": {
- "length": 5861577,
- "offset": 5667230
- },
- "duration": 6.006,
- "timeline": 0,
- "uri": "main.mp4",
- "map": {
- "byterange": {
- "length": 720,
- "offset": 0
- },
- "uri": "main.mp4"
- }
- }],
- "endList": true
- },
- "headerOnly": {
- "allowCache": true,
- "discontinuityStarts": [],
- "segments": []
- },
- "invalidAllowCache": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "invalidMediaSequence": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "invalidPlaylistType": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "invalidTargetDuration": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 587500,
- "offset": 522828
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 713084,
- "offset": 1110328
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 476580,
- "offset": 1823412
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 535612,
- "offset": 2299992
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 207176,
- "offset": 2835604
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 455900,
- "offset": 3042780
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 657248,
- "offset": 3498680
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 571708,
- "offset": 4155928
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 485040,
- "offset": 4727636
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 709136,
- "offset": 5212676
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 730004,
- "offset": 5921812
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 456276,
- "offset": 6651816
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 468684,
- "offset": 7108092
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 444996,
- "offset": 7576776
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 331444,
- "offset": 8021772
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 44556,
- "offset": 8353216
- },
- "duration": 1.4167,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "liveMissingSegmentDuration": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }],
- "targetDuration": 8,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "liveStart30sBefore": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "001.ts"
- }, {
- "duration": 19,
- "timeline": 0,
- "uri": "002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "003.ts"
- }, {
- "duration": 11,
- "timeline": 0,
- "uri": "004.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "005.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "006.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "007.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "008.ts"
- }, {
- "duration": 16,
- "timeline": 0,
- "uri": "009.ts"
- }],
- "targetDuration": 10,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "manifestExtTTargetdurationNegative": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00001.ts"
- }],
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "manifestExtXEndlistEarly": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00004.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00005.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "manifestNoExtM3u": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "/test/ts-files/zencoder/gogo/00001.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "master-fmp4": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- AUDIO: {
- aud1: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "a1/prog_index.m3u8"
- }
- },
- aud2: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "a2/prog_index.m3u8"
- }
- },
- aud3: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "a3/prog_index.m3u8"
- }
- }
- },
- VIDEO: {},
- "CLOSED-CAPTIONS": {
- cc1: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- instreamId: "CC1"
- }
- }
- },
- SUBTITLES: {
- sub1: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: 's1/eng/prog_index.m3u8',
- forced: false
- }
- }
- }
- },
- playlists: [{
- attributes: {
- "AVERAGE-BANDWIDTH": "2165224",
- BANDWIDTH: 2215219,
- CODECS: "avc1.640020,mp4a.40.2",
- RESOLUTION: {
- width: 960,
- height: 540
- },
- "FRAME-RATE": "59.940",
- "CLOSED-CAPTIONS": "cc1",
- AUDIO: "aud1",
- SUBTITLES: "sub1"
- },
- timeline: 0,
- uri: "v4/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "7962844",
- "BANDWIDTH": 7976430,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,mp4a.40.2",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v8/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "6165024",
- "BANDWIDTH": 6181885,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,mp4a.40.2",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v7/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "4664459",
- "BANDWIDTH": 4682666,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,mp4a.40.2",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v6/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "3164759",
- "BANDWIDTH": 3170746,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640020,mp4a.40.2",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 720,
- "width": 1280
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v5/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "1262552",
- "BANDWIDTH": 1276223,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,mp4a.40.2",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 432,
- "width": 768
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v3/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "893243",
- "BANDWIDTH": 904744,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,mp4a.40.2",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 360,
- "width": 640
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v2/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud1",
- "AVERAGE-BANDWIDTH": "527673",
- "BANDWIDTH": 538201,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640015,mp4a.40.2",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 270,
- "width": 480
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v1/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "2390334",
- "BANDWIDTH": 2440329,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640020,ac-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 540,
- "width": 960
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v4/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "8187954",
- "BANDWIDTH": 8201540,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ac-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v8/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "6390134",
- "BANDWIDTH": 6406995,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ac-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v7/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "4889569",
- "BANDWIDTH": 4907776,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ac-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v6/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "3389869",
- "BANDWIDTH": 3395856,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640020,ac-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 720,
- "width": 1280
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v5/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "1487662",
- "BANDWIDTH": 1501333,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,ac-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 432,
- "width": 768
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v3/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "1118353",
- "BANDWIDTH": 1129854,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,ac-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 360,
- "width": 640
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v2/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud2",
- "AVERAGE-BANDWIDTH": "752783",
- "BANDWIDTH": 763311,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640015,ac-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 270,
- "width": 480
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v1/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "2198334",
- "BANDWIDTH": 2248329,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640020,ec-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 540,
- "width": 960
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v4/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "7995954",
- "BANDWIDTH": 8009540,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ec-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v8/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "6198134",
- "BANDWIDTH": 6214995,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ec-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v7/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "4697569",
- "BANDWIDTH": 4715776,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64002a,ec-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 1080,
- "width": 1920
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v6/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "3197869",
- "BANDWIDTH": 3203856,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640020,ec-3",
- "FRAME-RATE": "59.940",
- "RESOLUTION": {
- "height": 720,
- "width": 1280
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v5/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "1295662",
- "BANDWIDTH": 1309333,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,ec-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 432,
- "width": 768
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v3/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "926353",
- "BANDWIDTH": 937854,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.64001e,ec-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 360,
- "width": 640
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v2/prog_index.m3u8"
- }, {
- "attributes": {
- "AUDIO": "aud3",
- "AVERAGE-BANDWIDTH": "560783",
- "BANDWIDTH": 571311,
- "CLOSED-CAPTIONS": "cc1",
- "CODECS": "avc1.640015,ec-3",
- "FRAME-RATE": "29.970",
- "RESOLUTION": {
- "height": 270,
- "width": 480
- },
- "SUBTITLES": "sub1"
- },
- "timeline": 0,
- "uri": "v1/prog_index.m3u8"
- }],
- segments: []
- },
- "master": {
- "allowCache": true,
- "playlists": [{
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 240000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "media.m3u8"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 40000
- },
- "timeline": 0,
- "uri": "media1.m3u8"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 440000,
- "RESOLUTION": {
- "width": 396,
- "height": 224
- }
- },
- "timeline": 0,
- "uri": "media2.m3u8"
- }, {
- "attributes": {
- "PROGRAM-ID": 1,
- "BANDWIDTH": 1928000,
- "RESOLUTION": {
- "width": 960,
- "height": 540
- }
- },
- "timeline": 0,
- "uri": "media3.m3u8"
- }],
- "discontinuityStarts": [],
- "mediaGroups": {
- "VIDEO": {},
- "AUDIO": {},
- "CLOSED-CAPTIONS": {},
- "SUBTITLES": {}
- },
- segments: []
- },
- "media": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "media-00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "media-00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "media-00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "media-00004.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "mediaSequence": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "missingEndlist": {
- "allowCache": true,
- "mediaSequence": 0,
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "00002.ts"
- }],
- "targetDuration": 10,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "missingExtinf": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "missingMediaSequence": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "missingSegmentDuration": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 8,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "multipleAudioGroups": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- AUDIO: {
- "audio-lo": {
- "English": {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "englo/prog_index.m3u8"
- },
- "Français": {
- autoselect: true,
- "default": false,
- language: "fre",
- uri: "frelo/prog_index.m3u8"
- },
- "Espanol": {
- autoselect: true,
- "default": false,
- language: "sp",
- uri: "splo/prog_index.m3u8"
- }
- },
- "audio-hi": {
- "English": {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "eng/prog_index.m3u8"
- },
- "Français": {
- autoselect: true,
- "default": false,
- language: "fre",
- uri: "fre/prog_index.m3u8"
- },
- "Espanol": {
- autoselect: true,
- "default": false,
- language: "sp",
- uri: "sp/prog_index.m3u8"
- }
- }
- },
- VIDEO: {},
- "CLOSED-CAPTIONS": {},
- SUBTITLES: {}
- },
- playlists: [{
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 195023,
- CODECS: "mp4a.40.5",
- AUDIO: "audio-lo"
- },
- timeline: 0,
- uri: "lo/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 260000,
- CODECS: "avc1.42e01e,mp4a.40.2",
- AUDIO: "audio-lo"
- },
- timeline: 0,
- uri: "lo2/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 591680,
- CODECS: "mp4a.40.2, avc1.64001e",
- AUDIO: "audio-hi"
- },
- timeline: 0,
- uri: "hi/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 650000,
- CODECS: "avc1.42e01e,mp4a.40.2",
- AUDIO: "audio-hi"
- },
- timeline: 0,
- uri: "hi2/prog_index.m3u8"
- }],
- segments: []
- },
- "multipleAudioGroupsCombinedMain": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- AUDIO: {
- "audio-lo": {
- "English": {
- autoselect: true,
- "default": true,
- language: "eng"
- },
- "Français": {
- autoselect: true,
- "default": false,
- language: "fre",
- uri: "frelo/prog_index.m3u8"
- },
- "Espanol": {
- autoselect: true,
- "default": false,
- language: "sp",
- uri: "splo/prog_index.m3u8"
- }
- },
- "audio-hi": {
- "English": {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "eng/prog_index.m3u8"
- },
- "Français": {
- autoselect: true,
- "default": false,
- language: "fre",
- uri: "fre/prog_index.m3u8"
- },
- "Espanol": {
- autoselect: true,
- "default": false,
- language: "sp",
- uri: "sp/prog_index.m3u8"
- }
- }
- },
- VIDEO: {},
- "CLOSED-CAPTIONS": {},
- SUBTITLES: {}
- },
- playlists: [{
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 195023,
- CODECS: "mp4a.40.5",
- AUDIO: "audio-lo"
- },
- timeline: 0,
- uri: "lo/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 260000,
- CODECS: "avc1.42e01e,mp4a.40.2",
- AUDIO: "audio-lo"
- },
- timeline: 0,
- uri: "lo2/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 591680,
- CODECS: "mp4a.40.2, avc1.64001e",
- AUDIO: "audio-hi"
- },
- timeline: 0,
- uri: "hi/prog_index.m3u8"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 650000,
- CODECS: "avc1.42e01e,mp4a.40.2",
- AUDIO: "audio-hi"
- },
- timeline: 0,
- uri: "hi2/prog_index.m3u8"
- }],
- segments: []
- },
- "multipleTargetDurations": {
- "allowCache": true,
- "mediaSequence": 0,
- "targetDuration": 10,
- "segments": [{
- "uri": "001.ts",
- "timeline": 0
- }, {
- "uri": "002.ts",
- "duration": 9,
- "timeline": 0
- }, {
- "uri": "003.ts",
- "duration": 7,
- "timeline": 0
- }, {
- "uri": "004.ts",
- "duration": 10,
- "timeline": 0
- }],
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "multipleVideo": {
- allowCache: true,
- discontinuityStarts: [],
- mediaGroups: {
- AUDIO: {
- aac: {
- English: {
- autoselect: true,
- "default": true,
- language: "eng",
- uri: "eng/prog_index.m3u8"
- }
- }
- },
- VIDEO: {
- "200kbs": {
- Angle1: {
- autoselect: true,
- "default": true
- },
- Angle2: {
- autoselect: true,
- "default": false,
- uri: "Angle2/200kbs/prog_index.m3u8"
- },
- Angle3: {
- autoselect: true,
- "default": false,
- uri: "Angle3/200kbs/prog_index.m3u8"
- }
- },
- "500kbs": {
- Angle1: {
- autoselect: true,
- "default": true
- },
- Angle2: {
- autoselect: true,
- "default": false,
- uri: "Angle2/500kbs/prog_index.m3u8"
- },
- Angle3: {
- autoselect: true,
- "default": false,
- uri: "Angle3/500kbs/prog_index.m3u8"
- }
- }
- },
- "CLOSED-CAPTIONS": {},
- SUBTITLES: {}
- },
- playlists: [{
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 300000,
- CODECS: "mp4a.40.2,avc1.4d401e",
- AUDIO: "aac",
- VIDEO: "200kbs"
- },
- timeline: 0,
- uri: "Angle1/200kbs/prog_index.m3u"
- }, {
- attributes: {
- "PROGRAM-ID": 1,
- BANDWIDTH: 754857,
- CODECS: "mp4a.40.2,avc1.4d401e",
- AUDIO: "aac",
- VIDEO: "500kbs"
- },
- timeline: 0,
- uri: "Angle1/500kbs/prog_index.m3u8"
- }],
- segments: []
- },
- "negativeMediaSequence": {
- "allowCache": true,
- "mediaSequence": -11,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "playlist": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "byterange": {
- "length": 522828,
- "offset": 0
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 587500,
- "offset": 522828
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 713084,
- "offset": 1110328
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 476580,
- "offset": 1823412
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 535612,
- "offset": 2299992
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 207176,
- "offset": 2835604
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 455900,
- "offset": 3042780
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 657248,
- "offset": 3498680
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 571708,
- "offset": 4155928
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 485040,
- "offset": 4727636
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 709136,
- "offset": 5212676
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 730004,
- "offset": 5921812
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 456276,
- "offset": 6651816
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 468684,
- "offset": 7108092
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 444996,
- "offset": 7576776
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 331444,
- "offset": 8021772
- },
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }, {
- "byterange": {
- "length": 44556,
- "offset": 8353216
- },
- "duration": 1.4167,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "playlistMediaSequenceHigher": {
- "allowCache": true,
- "mediaSequence": 17,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "streamInfInvalid": {
- "allowCache": true,
- "playlists": [{
- "attributes": {
- "PROGRAM-ID": 1
- },
- "timeline": 0,
- "uri": "media.m3u8"
- }, {
- "timeline": 0,
- "uri": "media1.m3u8"
- }],
- "discontinuityStarts": [],
- "mediaGroups": {
- "VIDEO": {},
- "AUDIO": {},
- "CLOSED-CAPTIONS": {},
- "SUBTITLES": {}
- },
- "segments": []
- },
- "twoMediaSequences": {
- "allowCache": true,
- "mediaSequence": 11,
- "playlistType": "VOD",
- "segments": [{
- "duration": 6.64,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts"
- }, {
- "duration": 6.08,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts"
- }, {
- "duration": 6.6,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts"
- }, {
- "duration": 5,
- "timeline": 0,
- "uri": "/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts"
- }],
- "targetDuration": 8,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "versionInvalid": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "hls_450k_video.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "whiteSpace": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 10,
- "timeline": 0,
- "uri": "http://example.com/00001.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "https://example.com/00002.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "//example.com/00003.ts"
- }, {
- "duration": 10,
- "timeline": 0,
- "uri": "http://example.com/00004.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- },
- "zeroDuration": {
- "allowCache": true,
- "mediaSequence": 0,
- "playlistType": "VOD",
- "segments": [{
- "duration": 0.01,
- "timeline": 0,
- "uri": "http://example.com/00001.ts"
- }],
- "targetDuration": 10,
- "endList": true,
- "discontinuitySequence": 0,
- "discontinuityStarts": []
- }
- };
- },{}],8:[function(require,module,exports){
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports['default'] = {
- 'absoluteUris': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'http://example.com/00001.ts\n' + '#EXTINF:10,\n' + 'https://example.com/00002.ts\n' + '#EXTINF:10,\n' + '//example.com/00003.ts\n' + '#EXTINF:10,\n' + 'http://example.com/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'allowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'allowCacheInvalid': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:0\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'alternateAudio': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio"\n' + 'hi/prog_index.m3u8\n',
- 'alternateVideo': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/500kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/500kbs/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="500kbs",AUDIO="aac"\n' + 'Angle1/500kbs/prog_index.m3u8\n',
- 'brightcove': '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=40000\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001\n' + '\n',
- 'byteRange': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084\n' + 'hls_450k_video2.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'dateTime': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PROGRAM-DATE-TIME:2016-06-22T09:20:16.166-04:00\n' + '#EXT-X-ALLOW-CACHE:NO\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'disallowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:NO\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'disc-sequence': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-TARGETDURATION:19\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-DISCONTINUITY-SEQUENCE:3\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'discontinuity': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-TARGETDURATION:19\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '005.ts\n' + '#EXTINF:10,0\n' + '006.ts\n' + '#EXTINF:10,0\n' + '007.ts\n' + '#EXT-X-DISCONTINUITY\n' + '#EXTINF:10,0\n' + '008.ts\n' + '#EXTINF:16,0\n' + '009.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'domainUris': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/00001.ts\n' + '#EXTINF:10,\n' + '/subdir/00002.ts\n' + '#EXTINF:10,\n' + '/00003.ts\n' + '#EXTINF:10,\n' + '/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'empty': '\n',
- 'emptyAllowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'emptyMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'emptyPlaylistType': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'emptyTargetDuration': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686811001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=40000\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824683759001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824686593001&videoId=1824650741001\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'http://c.brightcove.com/services/mobile/streaming/index/rendition.m3u8?assetId=1824687660001&videoId=1824650741001\n' + '\n',
- 'encrypted': '#EXTM3U\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:7794\n' + '#EXT-X-TARGETDURATION:15\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52"\n' + '\n' + '#EXTINF:2.833,\n' + 'http://media.example.com/fileSequence52-A.ts\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence52-B.ts\n' + '#EXTINF:13.333,\n' + 'http://media.example.com/fileSequence52-C.ts\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=53"\n' + '\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence53-A.ts\n' + '\n' + '#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=54",IV=0x00000000000000000000014BB69D61E4\n' + '\n' + '#EXTINF:14.0,\n' + 'http://media.example.com/fileSequence53-B.ts\n' + '\n' + '#EXT-X-KEY:METHOD=NONE\n' + '\n' + '#EXTINF:15.0,\n' + 'http://media.example.com/fileSequence53-B.ts\n',
- 'event': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:EVENT\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'extXPlaylistTypeInvalidPlaylist': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:STRING\n' + '#EXT-X-MEDIA-SEQUENCE:1\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'extinf': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:;asljasdfii11)))00,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:5,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:9.7,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:22,\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'fmp4': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:6\n' + '#EXT-X-VERSION:7\n' + '#EXT-X-MEDIA-SEQUENCE:1\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-INDEPENDENT-SEGMENTS\n' + '#EXT-X-MAP:URI="main.mp4",BYTERANGE="720@0"\n' + '#EXTINF:6.00600, \n' + '#EXT-X-BYTERANGE:5666510@720\n' + 'main.mp4\n' + '#EXTINF:6.00600, \n' + '#EXT-X-BYTERANGE:5861577@5667230\n' + 'main.mp4\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'headerOnly': '#EXTM3U\n' + '\n',
- 'invalidAllowCache': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-ALLOW-CACHE:MAYBE\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'invalidMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:gobblegobble\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'invalidPlaylistType': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:asdRASDfasdR\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'invalidTargetDuration': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:NaN\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167, \n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'liveMissingSegmentDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '\n',
- 'liveStart30sBefore': '#EXTM3U\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,0\n' + '001.ts\n' + '#EXTINF:19,0\n' + '002.ts\n' + '#EXTINF:10,0\n' + '003.ts\n' + '#EXTINF:11,0\n' + '004.ts\n' + '#EXTINF:10,0\n' + '005.ts\n' + '#EXTINF:10,0\n' + '006.ts\n' + '#EXTINF:10,0\n' + '007.ts\n' + '#EXTINF:10,0\n' + '008.ts\n' + '#EXTINF:16,0\n' + '009.ts\n',
- 'manifestExtTTargetdurationNegative': '#EXTM3U\n' + '#ZEN-TOTAL-DURATION:50\n' + '#EXT-X-TARGETDURATION:-10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'manifestExtXEndlistEarly': '#EXTM3U\n' + '#ZEN-TOTAL-DURATION:50\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00003.ts\n' + '#EXT-X-ENDLIST\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00005.ts\n' + '\n' + '\n',
- 'manifestNoExtM3u': '#ZEN-TOTAL-DURATION:10\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/gogo/00001.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'master-fmp4': '#EXTM3U\n' + '#EXT-X-VERSION:6\n' + '#EXT-X-INDEPENDENT-SEGMENTS\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud1",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a1/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud2",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a2/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aud3",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="a3/prog_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="sub1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,FORCED=NO,URI="s1/eng/prog_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc1",NAME="English",LANGUAGE="eng",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"\n' + '\n' + '\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=163198,BANDWIDTH=166942,CODECS="avc1.64002a",RESOLUTION=1920x1080,URI="v6/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=131314,BANDWIDTH=139041,CODECS="avc1.640020",RESOLUTION=1280x720,URI="v5/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=100233,BANDWIDTH=101724,CODECS="avc1.640020",RESOLUTION=960x540,URI="v4/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=81002,BANDWIDTH=84112,CODECS="avc1.64001e",RESOLUTION=768x432,URI="v3/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=64987,BANDWIDTH=65835,CODECS="avc1.64001e",RESOLUTION=640x360,URI="v2/iframe_index.m3u8"\n' + '#EXT-X-I-FRAME-STREAM-INF:AVERAGE-BANDWIDTH=41547,BANDWIDTH=42106,CODECS="avc1.640015",RESOLUTION=480x270,URI="v1/iframe_index.m3u8"\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2165224,BANDWIDTH=2215219,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7962844,BANDWIDTH=7976430,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6165024,BANDWIDTH=6181885,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4664459,BANDWIDTH=4682666,CODECS="avc1.64002a,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3164759,BANDWIDTH=3170746,CODECS="avc1.640020,mp4a.40.2",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1262552,BANDWIDTH=1276223,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=893243,BANDWIDTH=904744,CODECS="avc1.64001e,mp4a.40.2",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=527673,BANDWIDTH=538201,CODECS="avc1.640015,mp4a.40.2",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud1",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2390334,BANDWIDTH=2440329,CODECS="avc1.640020,ac-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=8187954,BANDWIDTH=8201540,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6390134,BANDWIDTH=6406995,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4889569,BANDWIDTH=4907776,CODECS="avc1.64002a,ac-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3389869,BANDWIDTH=3395856,CODECS="avc1.640020,ac-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1487662,BANDWIDTH=1501333,CODECS="avc1.64001e,ac-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1118353,BANDWIDTH=1129854,CODECS="avc1.64001e,ac-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=752783,BANDWIDTH=763311,CODECS="avc1.640015,ac-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud2",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n' + '\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=2198334,BANDWIDTH=2248329,CODECS="avc1.640020,ec-3",RESOLUTION=960x540,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v4/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=7995954,BANDWIDTH=8009540,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v8/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=6198134,BANDWIDTH=6214995,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v7/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=4697569,BANDWIDTH=4715776,CODECS="avc1.64002a,ec-3",RESOLUTION=1920x1080,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v6/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=3197869,BANDWIDTH=3203856,CODECS="avc1.640020,ec-3",RESOLUTION=1280x720,FRAME-RATE=59.940,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v5/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=1295662,BANDWIDTH=1309333,CODECS="avc1.64001e,ec-3",RESOLUTION=768x432,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v3/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=926353,BANDWIDTH=937854,CODECS="avc1.64001e,ec-3",RESOLUTION=640x360,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:AVERAGE-BANDWIDTH=560783,BANDWIDTH=571311,CODECS="avc1.640015,ec-3",RESOLUTION=480x270,FRAME-RATE=29.970,CLOSED-CAPTIONS="cc1",AUDIO="aud3",SUBTITLES="sub1"\n' + 'v1/prog_index.m3u8\n' + '\n',
- 'master': '# A simple master playlist with multiple variant streams\n' + '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000,RESOLUTION=396x224\n' + 'media.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=40000\n' + 'media1.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000,RESOLUTION=396x224\n' + 'media2.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1928000,RESOLUTION=960x540\n' + 'media3.m3u8\n' + '\n',
- 'media': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media-00001.ts\n' + '#EXTINF:10,\n' + 'media-00002.ts\n' + '#EXTINF:10,\n' + 'media-00003.ts\n' + '#EXTINF:10,\n' + 'media-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'media1': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media1-00001.ts\n' + '#EXTINF:10,\n' + 'media1-00002.ts\n' + '#EXTINF:10,\n' + 'media1-00003.ts\n' + '#EXTINF:10,\n' + 'media1-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'media2': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media2-00001.ts\n' + '#EXTINF:10,\n' + 'media2-00002.ts\n' + '#EXTINF:10,\n' + 'media2-00003.ts\n' + '#EXTINF:10,\n' + 'media2-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'media3': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + 'media3-00001.ts\n' + '#EXTINF:10,\n' + 'media3-00002.ts\n' + '#EXTINF:10,\n' + 'media3-00003.ts\n' + '#EXTINF:10,\n' + 'media3-00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'mediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'missingEndlist': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '00001.ts\n' + '#EXTINF:10,\n' + '00002.ts\n' + '\n',
- 'missingExtinf': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:3\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10\n' + 'hls_450k_video.ts\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'missingMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'missingSegmentDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'multipleAudioGroups': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="englo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="frelo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="splo/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="mp4a.40.5", AUDIO="audio-lo"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=260000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-lo"\n' + 'lo2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="mp4a.40.2, avc1.64001e", AUDIO="audio-hi"\n' + 'hi/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=650000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-hi"\n' + 'hi2/prog_index.m3u8\n' + '\n',
- 'multipleAudioGroupsCombinedMain': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="frelo/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="splo/prog_index.m3u8"\n' + '\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"\n' + '\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="mp4a.40.5", AUDIO="audio-lo"\n' + 'lo/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=260000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-lo"\n' + 'lo2/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="mp4a.40.2, avc1.64001e", AUDIO="audio-hi"\n' + 'hi/prog_index.m3u8\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=650000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-hi"\n' + 'hi2/prog_index.m3u8\n' + '\n',
- 'multipleTargetDurations': '#EXTM3U\n' + '001.ts\n' + '#EXT-X-TARGETDURATION:9\n' + '002.ts\n' + '#EXTINF:7\n' + '003.ts\n' + '#EXT-X-TARGETDURATION:10\n' + '004.ts\n',
- 'multipleVideo': '#EXTM3U\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/200kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/200kbs/prog_index.m3u8"\n' + ' \n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO,URI="Angle2/500kbs/prog_index.m3u8"\n' + '#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO,URI="Angle3/500kbs/prog_index.m3u8"\n' + ' \n' + '#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="eng",NAME="English",AUTOSELECT=YES,DEFAULT=YES,URI="eng/prog_index.m3u8"\n' + ' \n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=300000,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="200kbs",AUDIO="aac"\n' + 'Angle1/200kbs/prog_index.m3u\n' + ' \n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e",VIDEO="500kbs",AUDIO="aac"\n' + 'Angle1/500kbs/prog_index.m3u8\n',
- 'negativeMediaSequence': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:-11\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'playlist': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:4\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10, \n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167, \n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'playlistMediaSequenceHigher': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:17\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'playlist_allow_cache_template': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:{{{version}}}\n' + '{{#if allowCache}}#EXT-X-ALLOW-CACHE:{{{allowCache}}}{{/if}}\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'playlist_byte_range_template': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:{{{version}}}\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + '{{#if byteRange}}#EXT-X-BYTERANGE:{{{byteRange}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:522828@0\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '{{#if byteRange1}}#EXT-X-BYTERANGE:{{{byteRange1}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:587500@522828\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:713084@1110328\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:476580@1823412\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:535612@2299992\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:207176@2835604\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:455900@3042780\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:657248@3498680\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:571708@4155928\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:485040@4727636\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:709136@5212676\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:730004@5921812\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:456276@6651816\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:468684@7108092\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:444996@7576776\n' + 'hls_450k_video.ts\n' + '#EXTINF:10,\n' + '#EXT-X-BYTERANGE:331444@8021772\n' + 'hls_450k_video.ts\n' + '#EXTINF:1.4167,\n' + '{{#if byteRange2}}#EXT-X-BYTERANGE:{{{byteRange2}}}{{/if}}\n' + '//#EXT-X-BYTERANGE:44556@8353216\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n',
- 'playlist_extinf_template': '#EXTM3U\n' + ' #EXT-X-TARGETDURATION:10\n' + ' #EXT-X-VERSION:{{{version}}}\n' + ' #EXT-X-MEDIA-SEQUENCE:0\n' + ' #EXT-X-PLAYLIST-TYPE:VOD\n' + ' {{#if extInf}}#EXTINF:{{{extInf}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:522828@0\n' + ' {{#if segment}}{{{segment}}}\n{{/if}}\n' + ' {{#if extInf1}}#EXTINF:{{{extInf1}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:587500@522828\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:713084@1110328\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:476580@1823412\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:535612@2299992\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:207176@2835604\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:455900@3042780\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:657248@3498680\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:571708@4155928\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:485040@4727636\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:709136@5212676\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:730004@5921812\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:456276@6651816\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:468684@7108092\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:444996@7576776\n' + ' hls_450k_video.ts\n' + ' #EXTINF:10,\n' + ' #EXT-X-BYTERANGE:331444@8021772\n' + ' hls_450k_video.ts\n' + ' {{#if extInf2}}#EXTINF:{{{extInf2}}}{{/if}}\n' + ' #EXT-X-BYTERANGE:44556@8353216\n' + ' hls_450k_video.ts\n' + ' #EXT-X-ENDLIST\n' + '\n',
- 'playlist_media_sequence_template': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '{{#if mediaSequence}}#EXT-X-MEDIA-SEQUENCE:{{{mediaSequence}}}{{/if}}\n' + '{{#if mediaSequence1}}#EXT-X-MEDIA-SEQUENCE:{{{mediaSequence2}}}{{/if}}\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'playlist_target_duration_template': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '{{#if targetDuration}}#EXT-X-TARGETDURATION:{{{targetDuration}}}{{/if}}\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'playlist_type_template': '#EXTM3U\n' + '{{#if playlistType}}#EXT-X-PLAYLIST-TYPE:{{{playlistType}}}{{/if}}\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00001.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00002.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00003.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00004.ts\n' + '#EXTINF:10,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00005.ts\n' + '#EXTINF:8,\n' + '/test/ts-files/zencoder/haze/Haze_Mantel_President_encoded_1200-00006.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'streamInfInvalid': '# A simple master playlist with multiple variant streams\n' + '#EXTM3U\n' + '#EXT-X-STREAM-INF:PROGRAM-ID=1\n' + 'media.m3u8\n' + '#EXT-X-STREAM-INF:\n' + 'media1.m3u8\n' + '\n',
- 'twoMediaSequences': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-MEDIA-SEQUENCE:11\n' + '#EXT-X-ALLOW-CACHE:YES\n' + '#EXT-X-TARGETDURATION:8\n' + '#EXTINF:6.640,{}\n' + '/test/ts-files/tvy7/8a5e2822668b5370f4eb1438b2564fb7ab12ffe1-hi720.ts\n' + '#EXTINF:6.080,{}\n' + '/test/ts-files/tvy7/56be1cef869a1c0cc8e38864ad1add17d187f051-hi720.ts\n' + '#EXTINF:6.600,{}\n' + '/test/ts-files/tvy7/549c8c77f55f049741a06596e5c1e01dacaa46d0-hi720.ts\n' + '#EXTINF:5.000,{}\n' + '/test/ts-files/tvy7/6cfa378684ffeb1c455a64dae6c103290a1f53d4-hi720.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'versionInvalid': '#EXTM3U\n' + '#EXT-X-TARGETDURATION:10\n' + '#EXT-X-VERSION:NaN\n' + '#EXT-X-MEDIA-SEQUENCE:0\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXTINF:10,\n' + 'hls_450k_video.ts\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'whiteSpace': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + ' \n' + '#EXTINF:10,\n' + 'http://example.com/00001.ts \n' + '#EXTINF:10,\n' + ' https://example.com/00002.ts\n' + '#EXTINF:10,\n' + ' //example.com/00003.ts \n' + '#EXTINF:10,\n' + ' http://example.com/00004.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n',
- 'zeroDuration': '#EXTM3U\n' + '#EXT-X-PLAYLIST-TYPE:VOD\n' + '#EXT-X-TARGETDURATION:10\n' + '\n' + '#EXTINF:0,\n' + 'http://example.com/00001.ts\n' + '#ZEN-TOTAL-DURATION:57.9911\n' + '#EXT-X-ENDLIST\n' + '\n'
- };
- },{}]},{},[6]);
|