From 69d1802cc9655cfed4df2c04f4614ae9eef2e20a Mon Sep 17 00:00:00 2001 From: John Regan Date: Sun, 26 Mar 2017 15:04:14 -0500 Subject: [PATCH 1/2] new feature: preview window --- .gitignore | 1 + README.md | 26 +++- app.lua | 155 ++++++++++++++++++++++-- bin/multistreamer.lua | 35 ++++++ config.lua.example | 4 + models/stream.lua | 11 +- multistreamer/chat_manager.lua | 3 + multistreamer/irc/server.lua | 5 + multistreamer/process_manager.lua | 183 +++++++++++++++++++++++++++++ multistreamer/websocket/server.lua | 29 +++-- res/nginx.conf | 30 ++++- sql/1489949143.sql | 3 + static/css/multistreamer.css | 4 +- static/img/novideo.jpg | Bin 0 -> 168005 bytes static/js/chat-client.js | 4 +- static/js/hls.min.js | 7 ++ views/metadata.etlua | 53 ++++++++- views/plain.etlua | 2 +- views/stream.etlua | 15 +++ 19 files changed, 534 insertions(+), 36 deletions(-) create mode 100644 multistreamer/process_manager.lua create mode 100644 sql/1489949143.sql create mode 100644 static/img/novideo.jpg create mode 100644 static/js/hls.min.js diff --git a/.gitignore b/.gitignore index 1e79da5..ee69b88 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ /static/favicon.ico /.lua-version *.swp +/local/ diff --git a/README.md b/README.md index 124c630..874a97a 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ I also have a YouTube video about installing this available here: https://youtu. + [Alternative: Install nginx with Lua and rtmp](#alternative-install-nginx-with-lua-and-rtmp) + [Setup database and user in Postgres](#setup-database-and-user-in-postgres) + [Setup Redis](#setup-redis) + + [Setup Sockexec](#setup-sockexec) + [Setup Authentication Server](#setup-authentication-server) + [Clone and setup](#clone-and-setup) + [Install Lua modules](#install-lua-modules) @@ -150,6 +151,16 @@ postgres=# \q I'm not going to write up instructions for setting up Redis - this is more of a checklist item. +### Setup Sockexec + +`multistreamer` uses the `lua-resty-exec` module for managing ffmpeg processes, +which requires a running instance of [`sockexec`](https://github.com/jprjr/sockexec). +The `sockexec` repo has instructions for installation - you can either compile from +source, or just download a static binary. + +Make sure you change `sockexec`'s default timeout value. The default is pretty +conservative (60 seconds). I'd recommend making it infinite (ie, `sockexec -t0 /tmp/exec.sock`). + ### Setup Authentication Server `multistreamer` doesn't handle its own authentication - instead, it will @@ -222,6 +233,7 @@ Each module has more details in the [wiki.](https://github.com/jprjr/multistream You'll need some Lua modules installed: +* lua-resty-exec * lua-resty-jit-uuid * lua-resty-string * lua-resty-http @@ -315,14 +327,20 @@ It's important to note that updating the web interface does *not* immediately change anything on the user's streaming services - it's saved for later, when the user starts pushing video. -When the user starts pushing video to the RTMP endpoint, `multistreamer` will -update each account as needed - like updating the Twitch's broadcast title -and game, or make a new Live Video for Facebook. It will then start relaying -video to the different accounts. +The user can setup a stream to either start pushing video to their streaming +services as soon as an incoming video stream is detected, or to wait until +they've had a chance to preview the stream. Either way, `multistreamer` will +update each account as needed just before it starts pushing video out - things +like updating the Twitch's broadcast title and game, or make a new Live Video +for Facebook. Once the user stops pushing video, `multistreamer` will take any needed shutdown/stop actions - like ending the Facebook Live Video. +I highly recommend that users browse each network's section within the +[Wiki](https://github.com/jprjr/multistreamer/wiki) - I tried to detail +each of the metadata settings and what they mean/do. + ### IRC Usage Users can connect to Multistreamer with an IRC client, and view their diff --git a/app.lua b/app.lua index cf07619..253595c 100644 --- a/app.lua +++ b/app.lua @@ -29,6 +29,7 @@ local len = string.len local insert = table.insert local sort = table.sort local streams_dict = ngx.shared.streams +local capture = ngx.location.capture local pid = ngx.worker.pid() @@ -178,6 +179,17 @@ app:match('metadata-edit', config.http_prefix .. '/metadata/:id', respond_to({ end self.chat_level = self.stream:check_chat(self.user) self.metadata_level = self.stream:check_meta(self.user) + + self.stream_status = streams_dict:get(self.stream.id) + if self.stream_status then + self.stream_status = from_json(self.stream_status) + else + self.stream_status = { + data_incoming = false, + data_pushing = false, + data_pulling = false, + } + end if self.metadata_level == 0 then return err_out(self,'Stream not found') end @@ -200,12 +212,35 @@ app:match('metadata-edit', config.http_prefix .. '/metadata/:id', respond_to({ if self.metadata_level < 2 then return err_out(self,'Nice try buddy') end + + if self.params['customPullBtn'] ~= nil then + self.stream_status.data_pulling = true + streams_dict:set(self.stream.id, to_json(self.stream_status)) + publish('process:start:pull', { + worker = pid, + id = self.stream.id, + }) + self.session.status_msg = { type = 'success', msg = 'Custom Puller Started' } + return { redirect_to = self:url_for('metadata-edit') .. self.stream.id } + end + + if self.params['customPullBtnStop'] ~= nil then + self.stream_status.data_pulling = false + streams_dict:set(self.stream.id, to_json(self.stream_status)) + publish('process:end:pull', { + id = self.stream.id, + }) + self.session.status_msg = { type = 'success', msg = 'Custom Puller Stopped' } + return { redirect_to = self:url_for('metadata-edit') .. self.stream.id } + end + if self.params.title then self.stream:set('title',self.params.title) end if self.params.description then self.stream:set('description',self.params.description) end + for _,account in pairs(self.accounts) do local ffmpeg_args = self.params['ffmpeg_args' .. '.' .. account.id] if ffmpeg_args and len(ffmpeg_args) > 0 then @@ -227,9 +262,39 @@ app:match('metadata-edit', config.http_prefix .. '/metadata/:id', respond_to({ end end end + publish('stream:update',self.stream) - self.session.status_msg = { type = 'success', msg = 'Settings saved' } + local success_msg = 'Settings saved' + + -- is there incoming data, and the user clicked the golivebutton? start the stream + if self.stream_status.data_incoming == true and self.stream_status.data_pushing == false and self.params['goLiveBtn'] ~= nil then + success_msg = 'Stream started' + self.stream_status.data_pushing = true + + for _,account in pairs(self.accounts) do + local sa = StreamAccount:find({stream_id = self.stream.id, account_id = account.id}) + local rtmp_url, err = account.network.publish_start(account:get_keystore(),sa:get_keystore()) + if (not rtmp_url) or err then + return err_out(self,err) + end + sa:update({rtmp_url = rtmp_url}) + end + + publish('process:start:push', { + worker = pid, + id = self.stream.id, + }) + + publish('stream:start', { + worker = pid, + id = self.stream.id, + status = self.stream_status, + }) + end + + streams_dict:set(self.stream.id, to_json(self.stream_status)) + self.session.status_msg = { type = 'success', msg = success_msg } return { redirect_to = self:url_for('metadata-edit') .. self.stream.id } end, })) @@ -244,21 +309,45 @@ app:match('publish-start',config.http_prefix .. '/on-publish', respond_to({ return plain_err_out(self,err) end - for _,v in pairs(sas) do - local account = v[1] - local sa = v[2] - local rtmp_url, err = account.network.publish_start(account:get_keystore(),sa:get_keystore()) - if (not rtmp_url) or err then - return plain_err_out(self,err) + local stream_status = streams_dict:get(stream.id) + if stream_status then + stream_status = from_json(stream_status) + else + stream_status = { + data_incoming = false, + data_pushing = false, + data_pulling = false, + } + end + + stream_status.data_incoming = true + streams_dict:set(stream.id, to_json(stream_status)) + + if stream.preview_required == 0 then + for _,v in pairs(sas) do + local account = v[1] + local sa = v[2] + local rtmp_url, err = account.network.publish_start(account:get_keystore(),sa:get_keystore()) + if (not rtmp_url) or err then + return plain_err_out(self,err) + end + sa:update({rtmp_url = rtmp_url}) end - sa:update({rtmp_url = rtmp_url}) + + stream_status.data_pushing = true + streams_dict:set(stream.id, to_json(stream_status)) + + publish('process:start:push', { + worker = pid, + id = stream.id, + }) + end - -- just going to ignore any errors - local ok, err = streams_dict:set(stream.id,true) publish('stream:start', { worker = pid, id = stream.id, + status = stream_status, }) return plain_err_out(self,'OK',200) @@ -298,9 +387,14 @@ app:post('publish-stop',config.http_prefix .. '/on-done',function(self) return plain_err_out(self,err) end + publish('process:end:push', { + id = stream.id, + }) + publish('stream:end', { id = stream.id, }) + streams_dict:set(stream.id,nil) for _,v in pairs(sas) do @@ -353,8 +447,13 @@ app:get('site-root', config.http_prefix .. '/', function(self) end for k,v in pairs(self.streams) do - local ok = streams_dict:get(v.id) - if ok then + local stream_status = streams_dict:get(v.id) + if stream_status then + stream_status = from_json(stream_status) + else + stream_status = { data_pushing = false } + end + if stream_status.data_pushing == true then v.live = true else v.live = false @@ -441,6 +540,38 @@ app:match('stream-chat', config.http_prefix .. '/stream/:id/chat', respond_to({ end, })) +app:match('stream-video', config.http_prefix .. '/stream/:id/video(/*)', respond_to({ + before = function(self) + local stream = Stream:find({ id = self.params.id }) + if not stream then + return plain_err_out(self, 'Stream not found') + end + local ok = streams_dict:get(stream.id) + if ok == nil or ok == 0 then + return plain_err_out(self, 'Stream not live', 404) + end + self.stream = stream + end, + GET = function(self) + local fn = self.params.splat + if not fn then + fn = 'index.m3u8' + end + local res = capture(config.http_prefix .. '/video_raw/' .. self.stream.uuid .. '/' .. fn) + if res then + if res.status == 302 then + return plain_err_out(self, 'Stream not live', 404) + end + return self:write({ + layout = 'plain', + content_type = res.header['content-type'], + status = res.status, + }, res.body) + end + return plain_err_out(self,'An error occured', 500) + end, +})) + app:match('stream-ws', config.http_prefix .. '/ws/:id',respond_to({ before = function(self) if not require_login(self) then diff --git a/bin/multistreamer.lua b/bin/multistreamer.lua index 8483f1c..5ff38dc 100755 --- a/bin/multistreamer.lua +++ b/bin/multistreamer.lua @@ -16,6 +16,7 @@ local insert = table.insert local script_path = posix.realpath(arg[0]) local streamer_dir = posix.dirname(posix.dirname(script_path)) +local bash_path = streamer_dir ..'/bin/multistreamer' posix.chdir(streamer_dir) local commands = { @@ -23,6 +24,7 @@ local commands = { ['initdb'] = 1, ['psql'] = 1, ['push'] = 1, -- internal command + ['pull'] = 1, -- internal command } local sql_files = { @@ -31,6 +33,7 @@ local sql_files = { [3] = streamer_dir .. '/sql/1485029477.sql', [4] = streamer_dir .. '/sql/1485036089.sql', [5] = streamer_dir .. '/sql/1485788609.sql', + [6] = streamer_dir .. '/sql/1489949143.sql', } if(not arg[1] or not commands[arg[1]]) then @@ -70,9 +73,14 @@ if(arg[1] == 'run') then print('Error: path to ffmpeg not set') exit(1) end + if not config.sockexec_path then + print('Error: path to sockexec socket not set') + exit(1) + end config.lua_bin = lua_bin config.script_path = script_path; + config.bash_path = bash_path; if not config.work_dir then config.work_dir = getenv('HOME') .. '/.multistreamer' @@ -183,6 +191,33 @@ elseif(arg[1] == 'push') then print(err) exit(1) +elseif(arg[1] == 'pull') then + if not arg[2] then + print('pull requires uuid argument') + exit(1) + end + + local shell = require'multistreamer.shell' + local StreamModel = require'models.stream' + local stream = StreamModel:find({uuid = arg[2]}) + local sas = stream:get_streams_accounts() + + local ffmpeg_args = { + '-v', + 'error', + } + + local args = shell.parse(stream.ffmpeg_pull_args) + for i,v in pairs(args) do + insert(ffmpeg_args,v) + end + insert(ffmpeg_args,'-f') + insert(ffmpeg_args,'flv') + insert(ffmpeg_args,config.private_rtmp_url ..'/'..config.rtmp_prefix..'/'..arg[2]) + local _, err = posix.exec(config.ffmpeg,ffmpeg_args) + print(err) + exit(1) + end diff --git a/config.lua.example b/config.lua.example index c0f847c..9d21a4d 100644 --- a/config.lua.example +++ b/config.lua.example @@ -140,6 +140,10 @@ config({'development','production'}, { -- defaults to $HOME/.multistreamer if not set -- work_dir = '/path/to/some/folder', + -- set the path to sockexec's socket + -- see https://github.com/jprjr/sockexec for installation details + -- sockexec_path = '/tmp/exec.sock', + }) diff --git a/models/stream.lua b/models/stream.lua index f9e034d..9573263 100644 --- a/models/stream.lua +++ b/models/stream.lua @@ -6,6 +6,7 @@ local SharedStream = require'models.shared_stream' local format = string.format local slugify = require('lapis.util').slugify local pairs = pairs +local db = require'lapis.db' local Stream = Model:extend('streams', { timestamp = true, @@ -113,6 +114,10 @@ function Stream:save_stream(user,stream,params) local stream = stream local slug = slugify(params.stream_name) local slug_stream = Stream:find({ user_id = user.id, slug = slug }) + params.preview_required = tonumber(params.preview_required) + if not params.ffmpeg_pull_args or params.ffmpeg_pull_args:len() == 0 then + params.ffmpeg_pull_args = db.NULL + end if not stream then if slug_stream then return false, 'Stream name conflicts with ' .. slug_stream.name @@ -120,7 +125,9 @@ function Stream:save_stream(user,stream,params) stream = self:create({ user_id = user.id, name = params.stream_name, - slug = slug + slug = slug, + preview_required = params.preview_required, + ffmpeg_pull_args = params.ffmpeg_pull_args, }) else if slug_stream and slug_stream.id ~= stream.id then @@ -129,6 +136,8 @@ function Stream:save_stream(user,stream,params) stream:update({ name = params.stream_name, slug = slug, + preview_required = params.preview_required, + ffmpeg_pull_args = params.ffmpeg_pull_args, }) end diff --git a/multistreamer/chat_manager.lua b/multistreamer/chat_manager.lua index 1154fef..33380a6 100644 --- a/multistreamer/chat_manager.lua +++ b/multistreamer/chat_manager.lua @@ -166,6 +166,9 @@ function ChatMgr:handleStreamStart(msg) if msg.worker ~= pid then return nil end + if msg.status.data_pushing ~= true then + return nil + end local stream = Stream:find({id = msg.id}) if not stream then diff --git a/multistreamer/irc/server.lua b/multistreamer/irc/server.lua index 2aff73b..684581d 100644 --- a/multistreamer/irc/server.lua +++ b/multistreamer/irc/server.lua @@ -340,6 +340,11 @@ function IRCServer:processWriterResult(update) end function IRCServer:processStreamStart(update) + + if update.status.data_pushing ~= true then + return nil + end + local stream = Stream:find({ id = update.id }) local sas = stream:get_streams_accounts() local user = stream:get_user() diff --git a/multistreamer/process_manager.lua b/multistreamer/process_manager.lua new file mode 100644 index 0000000..1a1db8c --- /dev/null +++ b/multistreamer/process_manager.lua @@ -0,0 +1,183 @@ +local ngx = ngx +local config = require'multistreamer.config' +local string = require'multistreamer.string' +local redis = require'multistreamer.redis' +local endpoint = redis.endpoint +local publish = redis.publish +local subscribe = redis.subscribe +local from_json = require('lapis.util').from_json +local to_json = require('lapis.util').to_json +local Stream = require'models.stream' +local Account = require'models.account' +local StreamAccount = require'models.stream_account' +local setmetatable = setmetatable +local insert = table.insert +local tonumber = tonumber +local pairs = pairs + +local exec = require'resty.exec' + +local ngx_err = ngx.ERR +local ngx_error = ngx.ERROR +local ngx_debug = ngx.DEBUG +local ngx_log = ngx.log +local ngx_exit = ngx.exit +local ngx_sleep = ngx.sleep + +local pid = ngx.worker.pid() +local kill = ngx.thread.kill +local spawn = ngx.thread.spawn +local streams_dict = ngx.shared.streams + +local ProcessMgr = {} +ProcessMgr.__index = ProcessMgr + +ProcessMgr.new = function() + local t = {} + t.pushers = {} + t.pullers = {} + t.messageFuncs = { + [endpoint('process:start:push')] = ProcessMgr.startPush, + [endpoint('process:end:push')] = ProcessMgr.endPush, + [endpoint('process:start:pull')] = ProcessMgr.startPull, + [endpoint('process:end:pull')] = ProcessMgr.endPull, + } + setmetatable(t,ProcessMgr) + return t +end + +function ProcessMgr:run() + local running = true + local ok, red = subscribe('process:start:push') + if not ok then + ngx_log(ngx_err,'[Process Manager] Unable to connect to redis: ' .. red) + ngx_exit(ngx_error) + end + subscribe('process:end:push',red) + subscribe('process:start:pull',red) + subscribe('process:end:pull',red) + + while(running) do + local res, err = red:read_reply() + if err and err ~= 'timeout' then + ngx_log(ngx_err,'[Process Manager] Redis Disconnected!') + ngx_exit(ngx_error) + end + if res then + local func = self.messageFuncs[res[2]] + if func then + func(self,from_json(res[3])) + end + end + end +end + +local function log_result(res, typ) + if not res or res.termsig ~= nil then + ngx_log(ngx_err,'[Process Manager] ' .. typ .. ' ended unexpectedly unexpectedly - check sockexec timeout value') + return + end + if res.exitcode ~= nil and res.exitcode > 0 then + ngx_log(ngx_err,'[Process Manager] '..typ..' ended with non-zero exit code') + if res.stderr then + ngx_log(ngx_err,'[Process Manager] stderr: ' .. res.stderr) + end + if res.stdout then + ngx_log(ngx_err,'[Process Manager] stdout: ' .. res.stdout) + end + end +end + +function ProcessMgr:startPush(msg) + if msg.worker ~= pid then + return nil + end + + local stream = Stream:find({id = msg.id}) + + if not stream then + return nil + end + + ngx_log(ngx_debug,'[Process Manager] Starting pusher') + + self.pushers[stream.id] = spawn(function() + local prog = exec.new(config.sockexec_path) + prog.timeout_fatal = false + while true do + local res = prog(bash_path,'-l',lua_bin,'-e',os.getenv('LAPIS_ENVIRONMENT'),'push',stream.uuid) + ngx_log(ngx_debug,'[Process Manager] Pusher ended') + log_result(res,'Pusher') + ngx_sleep(10) + end + end) + + return true +end + +function ProcessMgr:startPull(msg) + if msg.worker ~= pid then + return nil + end + + local stream = Stream:find({id = msg.id}) + + if not stream then + return nil + end + local stream_status = streams_dict:get(stream.id) + if stream_status then + stream_status = from_json(stream_status) + else + stream_status = { + data_pushing = false, + data_incoming = false, + data_pulling = true, + } + end + stream_status.data_pulling = true + streams_dict:set(stream.id,to_json(stream_status)) + + self.pullers[stream.id] = spawn(function() + local prog = exec.new(config.sockexec_path) + prog.timeout_fatal = false + local res = prog(bash_path,'-l',lua_bin,'-e',os.getenv('LAPIS_ENVIRONMENT'),'pull',stream.uuid) + log_result(res,'Puller') + + local stream_status = streams_dict:get(stream.id) + if stream_status then + stream_status = from_json(stream_status) + else + stream_status = { + data_pushing = false, + data_incoming = false, + data_pulling = false, + } + end + stream_status.data_pulling = false + streams_dict:set(stream.id,to_json(stream_status)) + end) + + return true +end + +function ProcessMgr:endPush(msg) + if not msg.id then return end + + if not self.pushers[msg.id] then return end + + kill(self.pushers[msg.id]) + + return true +end + +function ProcessMgr:endPull(msg) + if not msg.id then return end + + if not self.pullers[msg.id] then return end + + kill(self.pullers[msg.id]) + return true +end + +return ProcessMgr diff --git a/multistreamer/websocket/server.lua b/multistreamer/websocket/server.lua index 2154351..1008b41 100644 --- a/multistreamer/websocket/server.lua +++ b/multistreamer/websocket/server.lua @@ -92,9 +92,11 @@ function Server:redis_relay() msg.uuid = nil self.ws:send_text(to_json(msg)) elseif res[2] == endpoint('stream:start') and msg.id == self.stream.id then - self:send_stream_status(true) + self:send_stream_status(msg.status) + elseif res[2] == endpoint('stream:end') and msg.id == self.stream.id then - self:send_stream_status(false) + self:send_stream_status({data_pushing = false, data_pulling = false, data_incoming = false }) + elseif res[2] == endpoint('stream:update') and msg.id == self.stream.id then self.stream = Stream:find({ id = msg.id }) elseif res[2] == endpoint('stream:writerresult') @@ -140,11 +142,17 @@ function Server:websocket_relay() elseif typ == 'text' then local msg = from_json(data) if msg.type == 'status' then - local ok = streams:get(self.stream.id) - if not ok then - ok = false + local stream_status = streams:get(self.stream.id) + if stream_status then + stream_status = from_json(stream_status) + else + stream_status = { + data_pushing = false, + data_pulling = false, + data_incoming = false + } end - self:send_stream_status(ok) + self:send_stream_status(stream_status) elseif msg.type == 'text' or msg.type =='emote' then msg.stream_id = self.stream.id msg.uuid = self.uuid @@ -192,7 +200,7 @@ function Server:websocket_relay() return true, nil end -function Server:send_stream_status(ok) +function Server:send_stream_status(status) local msg = { ['type'] = 'status', ['accounts'] = { @@ -208,12 +216,13 @@ function Server:send_stream_status(ok) } } } - if not ok then - msg.status = 'end' + + msg.status = status + + if status.data_pushing == false then self.ws:send_text(to_json(msg)) return end - msg.status = 'live' local l_networks = {} local accounts = self.stream:get_accounts() diff --git a/res/nginx.conf b/res/nginx.conf index cfb9518..2e9079a 100644 --- a/res/nginx.conf +++ b/res/nginx.conf @@ -13,6 +13,7 @@ events { http { lua_socket_log_errors off; + root <%= streamer_dir %>/; resolver <%= dns_resolver %>; lua_ssl_trusted_certificate <%= ssl_trusted_certificate %>; @@ -34,16 +35,26 @@ http { image/svg+xml svg svgz; video/mp4 mp4; + application/vnd.apple.mpegurl m3u8; + video/mp2t ts; } init_worker_by_lua_block { + lua_bin = '<%= lua_bin %>'; + script_path = '<%= script_path %>'; + bash_path = '<%= bash_path %>'; + networks = require('multistreamer.networks') uuid = require'resty.jit-uuid' chatmgr = require('multistreamer.chat_manager').new() + processmgr = require('multistreamer.process_manager').new() uuid.seed() ngx.timer.at(0,function() chatmgr:run() end) + ngx.timer.at(0,function() + processmgr:run() + end) } server { @@ -57,8 +68,10 @@ http { } } - location <%= http_prefix %>/static/ { - alias <%= streamer_dir %>/static/; + location ~ <%= http_prefix %>/static/(.*) { + try_files /local/$1 /static/$1 =404; + log_not_found on; + #try_files local/$uri static/$uri =404; } location /favicon.ico { @@ -71,6 +84,11 @@ http { log_not_found off; access_log off; } + location /video_raw { + internal; + log_not_found off; + alias <%= work_dir %>/hls; + } } } @@ -84,13 +102,17 @@ rtmp { live on; record off; meta copy; + idle_streams on; on_publish <%= private_http_url .. http_prefix .. '/on-publish' %>; on_publish_done <%= private_http_url .. http_prefix .. '/on-done' %>; on_update <%= private_http_url .. http_prefix .. '/on-update' %>; - exec_push <%= lua_bin %> <%= script_path %> push $name; - exec_kill_signal term; + hls on; + hls_path <%= work_dir %>/hls; + hls_nested on; + hls_cleanup on; + hls_continuous off; } } diff --git a/sql/1489949143.sql b/sql/1489949143.sql new file mode 100644 index 0000000..4eb5c87 --- /dev/null +++ b/sql/1489949143.sql @@ -0,0 +1,3 @@ +alter table streams add column preview_required integer; +alter table streams add column ffmpeg_pull_args text; +update streams set preview_required = 0 where preview_required is null; diff --git a/static/css/multistreamer.css b/static/css/multistreamer.css index 6ed6874..d031647 100644 --- a/static/css/multistreamer.css +++ b/static/css/multistreamer.css @@ -262,4 +262,6 @@ svg.chaticon.youtube { svg.chaticon.irc { background-color: #6b6f75; } - +video { + width: 100%; +} diff --git a/static/img/novideo.jpg b/static/img/novideo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21b52cef4b46ef4d03ebc6e8ef6ab2ae8c135dd2 GIT binary patch literal 168005 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

U&-UaO{RmCDSl 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 z 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 literal 0 HcmV?d00001 diff --git a/static/js/chat-client.js b/static/js/chat-client.js index 66418b7..8c8f3fa 100644 --- a/static/js/chat-client.js +++ b/static/js/chat-client.js @@ -454,7 +454,7 @@ function start_chat(endpoint) { } } if(data.type == 'status') { - if(data.status === 'live') { + if(data.status.data_pushing === true) { live = true; updateAccountList(data.accounts); updateViewCountResult(); @@ -462,7 +462,7 @@ function start_chat(endpoint) { buildChatInput(null); } } - else if(data.status === 'end') { + else if(data.status.data_pushing === false) { live = false; updateAccountList(data.accounts); if(curInput === undefined || curAccount.id > 0) { diff --git a/static/js/hls.min.js b/static/js/hls.min.js new file mode 100644 index 0000000..63bc326 --- /dev/null +++ b/static/js/hls.min.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){var e;return function e(t,r,i){function a(s,o){if(!r[s]){if(!t[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[s]={exports:{}};t[s][0].call(d.exports,function(e){var r=t[s][1][e];return a(r?r:e)},d,d.exports,e,t,r,i)}return r[s].exports}for(var n="function"==typeof require&&require,s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.trace)),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function r(){this.removeListener(e,r),i||(i=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var i=!1;return r.listener=t,this.on(e,r),this},i.prototype.removeListener=function(e,t){var r,i,n,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],n=r.length,i=-1,r===t||a(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(o=n;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){i=o;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],a(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(t,r,i){!function(t){var a=/^([^#]*)(.*)$/,n=/^([^\?]*)(.*)$/,s=/^(([a-z]+:\/\/)?[^:\/]+(?::[0-9]+)?)?(\/?.*)$/i,o={buildAbsoluteURL:function(e,t){if(t=t.trim(),/^[a-z]+:/i.test(t))return t;var r=null,i=null,l=a.exec(t);l&&(i=l[2],t=l[1]);var u=n.exec(t);u&&(r=u[2],t=u[1]);var d=a.exec(e);d&&(e=d[1]);var f=n.exec(e);f&&(e=f[1]);var c=s.exec(e);if(!c)throw new Error("Error trying to parse base URL.");var h=c[2]||"",g=c[1]||"",v=c[3];0!==v.indexOf("/")&&""!==g&&(v="/"+v);var p=null;return p=/^\/\//.test(t)?h+o.buildAbsolutePath("",t.substring(2)):/^\//.test(t)?g+"/"+o.buildAbsolutePath("",t.substring(1)):o.buildAbsolutePath(g+v,t),r&&(p+=r),i&&(p+=i),p},buildAbsolutePath:function(e,t){for(var r,i,a=t,n="",s=e.replace(/[^\/]*$/,a.replace(/(\/|^)(?:\.?\/+)+/g,"$1")),o=0;i=s.indexOf("/../",o),i>-1;o=i+r)r=/^\/(?:\.\.\/)*/.exec(s.slice(i))[0].length,n=(n+s.substring(o,i)).replace(new RegExp("(?:\\/+[^\\/]*){0,"+(r-1)/3+"}$"),"/");return n+s.substr(o)}};"object"==typeof i&&"object"==typeof r?r.exports=o:"function"==typeof e&&e.amd?e([],function(){return o}):"object"==typeof i?i.URLToolkit=o:t.URLToolkit=o}(this)},{}],3:[function(e,t,r){var i=arguments[3],a=arguments[4],n=arguments[5],s=JSON.stringify;t.exports=function(e,t){function r(e){p[e]=!0;for(var t in a[e][1]){var i=a[e][1][t];p[i]||r(i)}}for(var o,l=Object.keys(n),u=0,d=l.length;u500*r.duration/o){var l=e.levels,d=Math.max(1,n.bw?n.bw/8:1e3*n.loaded/s),f=l[r.level],c=f.realBitrate?Math.max(f.realBitrate,f.bitrate):f.bitrate,g=n.total?n.total:Math.max(n.loaded,Math.round(r.duration*c/8)),p=t.currentTime,y=(g-n.loaded)/d,m=(h.default.bufferInfo(t,p,e.config.maxBufferHole).end-p)/o;if(m<2*r.duration/o&&y>m){var E=void 0,b=void 0;for(b=r.level-1;b>a;b--){var T=l[b].realBitrate?Math.max(l[b].realBitrate,l[b].bitrate):l[b].bitrate;if(E=r.duration*T/(6.4*d),E=i;u--){var d=l[u],f=d.details,c=f?f.totalduration/f.fragments.length:t,h=!!f&&f.live,g=void 0;g=u<=e?s*r:o*r;var p=l[u].realBitrate?Math.max(l[u].realBitrate,l[u].bitrate):l[u].bitrate,y=p*c/g;if(v.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+u+"/"+Math.round(g)+"/"+p+"/"+c+"/"+n+"/"+y),g>p&&(!y||h||y=0)return c;v.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,y=i.abrBandWidthUpFactor;if(0===f){var m=this.bitrateTestDelay;if(m){g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,v.logger.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=y=1}}return c=this._findBestLevel(s,o,d,a,t,f+g,p,y,r),Math.max(c,0)}}]),t}(f.default);r.default=m},{10:10,31:31,32:32,33:33,35:35,50:50}],6:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l=function(){function e(e,t){for(var r=0;r0&&e===-1?(R.logger.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=A.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=A.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=A.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=A.STOPPED}},{key:"tick",value:function(){this.ticks++,1===this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var e,t,r,i,a,n,s=this,l=this.hls,u=l.config,f=function(){switch(s.state){case A.ERROR:case A.PAUSED:case A.BUFFER_FLUSHING:break;case A.STARTING:s.state=A.WAITING_TRACK,s.loadedmetadata=!1;break;case A.IDLE:var o=s.tracks;if(!o)break;if(!s.media&&(s.startFragRequested||!u.startFragPrefetch))break;e=s.loadedmetadata?s.media.currentTime:s.nextLoadPosition;var f=s.mediaBuffer?s.mediaBuffer:s.media,h=c.default.bufferInfo(f,e,u.maxBufferHole),g=h.len,v=h.end,y=s.fragPrevious,m=u.maxMaxBufferLength,E=s.audioSwitch,b=s.trackId;if(gS||h.nextStart))return{v:void 0};R.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),s.media.currentTime=S+.05}if(r.initSegment&&!r.initSegment.data)w=r.initSegment;else if(v<=S){if(w=T[0],r.live&&w.loadIdx&&w.loadIdx===s.fragLoadIdx){var D=h.nextStart?h.nextStart:S;return R.logger.log("no alt audio available @currentTime:"+s.media.currentTime+", seeking @"+(D+.05)),s.media.currentTime=D+.05,{v:void 0}}}else!function(){var e=void 0,t=u.maxFragLookUpTolerance,i=y?T[y.sn-T[0].sn+1]:void 0,a=function(e){var r=Math.min(t,e.duration);return e.start+e.duration-r<=v?1:e.start-r>v&&e.start?-1:0};vL-t&&(t=0),e=i&&!a(i)?i:d.default.search(T,a)):e=T[_-1],e&&(w=e,S=e.start,y&&w.level===y.level&&w.sn===y.sn&&(w.snO&&Math.abs(s.fragLoadIdx-w.loadIdx)=a||n)&&(R.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),s.state=A.IDLE);break;case A.WAITING_INIT_PTS:case A.STOPPED:case A.FRAG_LOADING:case A.PARSING:case A.PARSED:case A.ENDED:}}();if("object"===(void 0===f?"undefined":o(f)))return f.v}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(R.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.tracks;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){this.state===A.ENDED&&(this.state=A.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaEnded",value:function(){this.startPosition=this.lastCurrentTime=0}},{key:"onAudioTracksUpdated",value:function(e){R.logger.log("audio tracks updated"),this.tracks=e.audioTracks}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url;this.trackId=e.id,this.state=A.IDLE,this.fragCurrent=null,this.state=A.PAUSED,this.waitingFragment=null,t?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=A.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()}},{key:"onAudioTrackLoaded",value:function(e){var t=e.details,r=e.id,i=this.tracks[r],a=t.totalduration,n=0;if(R.logger.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),t.live){var s=i.details;s&&t.fragments.length>0?(b.default.mergeDetails(s,t),n=t.fragments[0].start,t.PTSKnown?R.logger.log("live audio playlist sliding:"+n.toFixed(3)):R.logger.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,R.logger.log("live audio playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,!this.startFragRequested){if(this.startPosition===-1){var o=t.startTimeOffset;isNaN(o)?this.startPosition=0:(R.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o)}this.nextLoadPosition=this.startPosition}this.state===A.WAITING_TRACK&&(this.state=A.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===A.KEY_LOADING&&(this.state=A.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===A.FRAG_LOADING&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,u=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",d=this.stats=e.stats;if("initSegment"===o)this.state=A.IDLE,d.tparsed=d.tbuffered=performance.now(),a.initSegment.data=e.payload,this.hls.trigger(p.default.FRAG_BUFFERED,{stats:d,frag:t,id:"audio"}),this.tick();else{this.state=A.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new g.default(this.hls,"audio"));var f=this.initPTS[l],c=a.initSegment?a.initSegment.data:[];if(c||void 0!==f){this.pendingBuffering=!0,R.logger.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,c,u,null,t,n,!1,f)}else R.logger.log("unknown video PTS for continuity counter "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.state=A.WAITING_INIT_PTS}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===A.PARSING){var i=e.tracks,a=void 0;if(i.video&&delete i.video,a=i.audio){a.levelCodec="mp4a.40.2",a.id=e.id,this.hls.trigger(p.default.BUFFER_CODECS,i),R.logger.log("audio track:audio,container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var n=a.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(p.default.BUFFER_APPENDING,s))}this.tick()}}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===A.PARSING&&function(){var i=t.trackId,a=t.tracks[i],n=t.hls;isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),R.logger.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),b.default.updateFragPTSDTS(a.details,r.sn,e.startPTS,e.endPTS);var s=t.audioSwitch,o=t.media,l=!1;if(s&&o)if(o.readyState){var u=o.currentTime;R.logger.log("switching audio track : currentTime:"+u),u>=e.startPTS&&(R.logger.log("switching audio track : flushing all audio"),t.state=A.BUFFER_FLUSHING,n.trigger(p.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),l=!0,t.audioSwitch=!1,n.trigger(p.default.AUDIO_TRACK_SWITCHED,{id:i}))}else t.audioSwitch=!1,n.trigger(p.default.AUDIO_TRACK_SWITCHED,{id:i});var d=t.pendingData;t.audioSwitch||([e.data1,e.data2].forEach(function(t){t&&t.length&&d.push({type:e.type,data:t,parent:"audio",content:"data"})}),!l&&d.length&&(d.forEach(function(e){t.state===A.PARSING&&(t.pendingBuffering=!0,t.hls.trigger(p.default.BUFFER_APPENDING,e))}),t.pendingData=[],t.appended=!0)),t.tick()}()}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===A.PARSING&&(this.stats.tparsed=performance.now(),this.state=A.PARSED,this._checkAppendedParsed())}},{key:"onBufferCreated",value:function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0)}},{key:"onBufferAppended",value:function(e){if("audio"===e.parent){var t=this.state;t!==A.PARSING&&t!==A.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==A.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=performance.now(),r.trigger(p.default.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;R.logger.log("audio buffered : "+_.default.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(p.default.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=A.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case k.ErrorDetails.FRAG_LOAD_ERROR:case k.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!e.fatal){var r=this.fragLoadError;r?r++:r=1;var i=this.config;if(r<=i.fragLoadingMaxRetry){this.fragLoadError=r,t.loadCounter=0;var a=Math.min(Math.pow(2,r-1)*i.fragLoadingRetryDelay,i.fragLoadingMaxRetryTimeout);R.logger.warn("audioStreamController: frag loading failed, retry in "+a+" ms"),this.retryDate=performance.now()+a,this.state=A.FRAG_LOADING_WAITING_RETRY}else R.logger.error("audioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=A.ERROR}break;case k.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case k.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:case k.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:case k.ErrorDetails.KEY_LOAD_ERROR:case k.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==A.ERROR&&(this.state=e.fatal?A.ERROR:A.IDLE,R.logger.warn("audioStreamController: "+e.details+" while loading frag,switch to "+this.state+" state ..."));break;case k.ErrorDetails.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===A.PARSING||this.state===A.PARSED)){var n=this.mediaBuffer,s=this.media.currentTime;if(n&&c.default.isBuffered(n,s)&&c.default.isBuffered(n,s+.5)){var o=this.config;o.maxMaxBufferLength>=o.maxBufferLength&&(o.maxMaxBufferLength/=2,R.logger.warn("audio:reduce max buffer length to "+o.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*o.fragLoadingLoopThreshold),this.state=A.IDLE}else R.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=A.BUFFER_FLUSHING,this.hls.trigger(p.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}}},{key:"onBufferFlushed",value:function(){var e=this,t=this.pendingData;t&&t.length?(R.logger.log("appending pending audio data on Buffer Flushed"),t.forEach(function(t){e.hls.trigger(p.default.BUFFER_APPENDING,t)}),this.appended=!0,this.pendingData=[],this.state=A.PARSED):(this.state=A.IDLE,this.fragPrevious=null,this.tick())}},{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,R.logger.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}]),t}(m.default);r.default=S},{25:25,31:31,32:32,33:33,35:35,36:36,46:46,50:50,51:51}],7:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){this.updateTrack(this.trackId)}},{key:"onManifestLoading",value:function(){this.tracks=[],this.trackId=-1}},{key:"onManifestLoaded",value:function(e){ +var t=this,r=e.audioTracks||[],i=!1;this.tracks=r,this.hls.trigger(u.default.AUDIO_TRACKS_UPDATED,{audioTracks:r});var a=0;r.forEach(function(e){if(e.default)return t.audioTrack=a,void(i=!0);a++}),i===!1&&r.length&&(c.logger.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)}},{key:"onAudioTrackLoaded",value:function(e){e.id=0&&e=0&&e.1){var a=i.updating;try{i.abort()}catch(e){a=!0,c.logger.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(c.logger.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}}},{key:"onManifestParsed",value:function(e){var t=e.audio,r=e.video,i=0;e.altAudio&&(t||r)&&(i=(t?1:0)+(r?1:0),c.logger.log(i+" sourceBuffer(s) expected")),this.sourceBufferNb=i}},{key:"onMediaAttaching",value:function(e){var t=this.media=e.media;if(t){var r=this.mediaSource=new MediaSource;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),r.addEventListener("sourceopen",this.onmso),r.addEventListener("sourceended",this.onmse),r.addEventListener("sourceclose",this.onmsc),t.src=URL.createObjectURL(r)}}},{key:"onMediaDetaching",value:function(){c.logger.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){c.logger.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this.onmso),e.removeEventListener("sourceended",this.onmse),e.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this.media.src),this.media.removeAttribute("src"),this.media.load()),this.mediaSource=null,this.media=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(u.default.MEDIA_DETACHED)}},{key:"onMediaSourceOpen",value:function(){c.logger.log("media source opened"),this.hls.trigger(u.default.MEDIA_ATTACHED,{media:this.media});var e=this.mediaSource;e&&e.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()}},{key:"checkPendingTracks",value:function(){var e=this.pendingTracks,t=Object.keys(e).length;t&&(this.sourceBufferNb<=t||0===this.sourceBufferNb)&&(this.createSourceBuffers(e),this.pendingTracks={},this.doAppending())}},{key:"onMediaSourceClose",value:function(){c.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){c.logger.log("media source ended")}},{key:"onSBUpdateEnd",value:function(){if(this.audioTimestampOffset){var e=this.sourceBuffer.audio;c.logger.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+this.audioTimestampOffset),e.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var t=this.parent,r=this.segments.reduce(function(e,r){return r.parent===t?e+1:e},0);this.hls.trigger(u.default.BUFFER_APPENDED,{parent:t,pending:r}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()}},{key:"onSBUpdateError",value:function(e){c.logger.error("sourceBuffer error:"+e),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferReset",value:function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this.onsbue),r.removeEventListener("error",this.onsbe)}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}},{key:"onBufferCodecs",value:function(e){if(0===Object.keys(this.sourceBuffer).length){for(var t in e)this.pendingTracks[t]=e[t];var r=this.mediaSource;r&&"open"===r.readyState&&this.checkPendingTracks()}}},{key:"createSourceBuffers",value:function(e){var t=this.sourceBuffer,r=this.mediaSource;for(var i in e)if(!t[i]){var a=e[i],n=a.levelCodec||a.codec,s=a.container+";codecs="+n;c.logger.log("creating sourceBuffer("+s+")");try{var o=t[i]=r.addSourceBuffer(s);o.addEventListener("updateend",this.onsbue),o.addEventListener("error",this.onsbe),this.tracks[i]={codec:n,container:a.container},a.buffer=o}catch(e){c.logger.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(u.default.BUFFER_CREATED,{tracks:e})}},{key:"onBufferAppending",value:function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())}},{key:"onBufferAppendFail",value:function(e){c.logger.error("sourceBuffer error:",e.event),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferEos",value:function(e){var t=this.sourceBuffer,r=e.type;for(var i in t)r&&i!==r||t[i].ended||(t[i].ended=!0,c.logger.log(i+" sourceBuffer now EOS"));this.checkEos()}},{key:"checkEos",value:function(){var e=this.sourceBuffer,t=this.mediaSource;if(!t||"open"!==t.readyState)return void(this._needsEos=!1);for(var r in e){var i=e[r];if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}c.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){c.logger.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}},{key:"onBufferFlushing",value:function(e){this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}),this.flushBufferCounter=0,this.doFlush()}},{key:"onLevelUpdated",value:function(e){var t=e.details;0!==t.fragments.length&&(this._levelDuration=t.totalduration+t.fragments[0].start,this.updateMediaElementDuration())}},{key:"updateMediaElementDuration",value:function(){var e=this.media,t=this.mediaSource,r=this.sourceBuffer,i=this._levelDuration;if(null!==i&&e&&t&&r&&0!==e.readyState&&"open"===t.readyState){for(var a in r)if(r[a].updating)return;null===this._msDuration&&(this._msDuration=t.duration);var n=e.duration;(i>this._msDuration&&i>n||n===1/0||isNaN(n))&&(c.logger.log("Updating mediasource duration to "+i.toFixed(3)),this._msDuration=t.duration=i)}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r)t+=r[i].buffered.length}catch(e){c.logger.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(u.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var e=this.hls,t=this.sourceBuffer,r=this.segments;if(Object.keys(t).length){if(this.media.error)return this.segments=[],void c.logger.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(r&&r.length){var i=r.shift();try{var a=i.type,n=t[a];n?n.updating?r.unshift(i):(n.ended=!1,this.parent=i.parent,n.appendBuffer(i.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(t){c.logger.error("error while trying to append buffer:"+t.message),r.unshift(i);var s={type:h.ErrorTypes.MEDIA_ERROR,parent:i.parent};if(22===t.code)return this.segments=[],s.details=h.ErrorDetails.BUFFER_FULL_ERROR,s.fatal=!1,void e.trigger(u.default.ERROR,s);if(this.appendError?this.appendError++:this.appendError=1,s.details=h.ErrorDetails.BUFFER_APPEND_ERROR,this.appendError>e.config.appendErrorMaxRetry)return c.logger.log("fail "+e.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),r=[],s.fatal=!0,void e.trigger(u.default.ERROR,s);s.fatal=!1,e.trigger(u.default.ERROR,s)}}}}},{key:"flushBuffer",value:function(e,t,r){var i,a,n,s,o,l,u=this.sourceBuffer;if(Object.keys(u).length){if(c.logger.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+e+"/"+t),this.flushBufferCounter.5)return this.flushBufferCounter++,c.logger.log("flush "+d+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+this.media.currentTime),i.remove(o,l),!1}catch(e){c.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else c.logger.warn("abort flushing too many retries");c.logger.log("buffer flushed")}return!0}}]),t}(f.default);r.default=g},{31:31,32:32,33:33,50:50}],9:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}},{key:"getMaxLevel",value:function(e){var t=0,r=void 0,i=void 0,a=this.mediaWidth,n=this.mediaHeight,s=0,o=0;for(r=0;r<=e&&(i=this.levels[r],!this.isLevelRestricted(r))&&(t=r,s=i.width,o=i.height,!(a<=s||n<=o));r++);return t}},{key:"isLevelRestricted",value:function(e){return!(!this.restrictedLevels||this.restrictedLevels.indexOf(e)===-1)}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0,t=this.media;return t&&(e=t.width||t.clientWidth||t.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0,t=this.media;return t&&(e=t.height||t.clientHeight||t.offsetHeight,e*=this.contentScaleFactor),e}}]),t}(f.default);r.default=c},{32:32,33:33}],10:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r=this.minWeight_}},{key:"getEstimate",value:function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}},{key:"destroy",value:function(){}}]),e}();r.default=l},{49:49}],11:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&n>l.config.fpsDroppedMonitoringThreshold*s){var d=l.currentLevel;c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+d),d>0&&(l.autoLevelCapping===-1||l.autoLevelCapping>=d)&&(d-=1,l.trigger(u.default.FPS_DROP_LEVEL_CAPPING,{level:d,droppedLevel:l.currentLevel}),l.autoLevelCapping=d,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}}},{key:"checkFPSInterval",value:function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}}]),t}(f.default);r.default=h},{32:32,33:33,50:50}],12:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0})}else o.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:o.url,reason:"no level with compatible codecs found in manifest"})}},{key:"setLevelInternal",value:function(e){var t=this._levels,r=this.hls;if(e>=0&&e1&&a.loadErrore&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),e!==-1&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return this._manualLevel!==-1?this._manualLevel:this.hls.nextAutoLevel},set:function(e){this.level=e,this._manualLevel===-1&&(this.hls.nextAutoLevel=e)}}]),t}(f.default);r.default=p},{31:31,32:32,33:33,35:35,50:50}],13:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1&&(k.logger.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=R.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else k.logger.warn("cannot start loading as manifest not parsed yet"),this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED}},{key:"tick",value:function(){this.ticks++,1===this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){switch(this.state){case R.ERROR:break;case R.BUFFER_FLUSHING:this.fragLoadError=0;break;case R.IDLE:if(!this._doTickIdle())return;break;case R.WAITING_LEVEL:var e=this.levels[this.level];e&&e.details&&(this.state=R.IDLE);break;case R.FRAG_LOADING_WAITING_RETRY:var t=performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(k.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.ERROR:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"_doTickIdle",value:function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&!r&&(this.startFragRequested||!t.startFragPrefetch))return!0;var i=void 0;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a],s=n.bitrate,o=void 0;o=s?Math.max(8*t.maxBufferSize/s,t.maxBufferLength):t.maxBufferLength,o=Math.min(o,t.maxMaxBufferLength);var l=f.default.bufferInfo(this.mediaBuffer?this.mediaBuffer:r,i,t.maxBufferHole),u=l.len;if(u>=o)return!0;k.logger.trace("buffer length of "+u.toFixed(3)+" is below max of "+o.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var d=n.details;if(void 0===d||d.live&&this.levelLastLoaded!==a)return this.state=R.WAITING_LEVEL,!0;var c=this.fragPrevious;if(!d.live&&c&&c.sn===d.endSN&&r.duration-Math.max(l.end,c.start)<=Math.max(.2,c.duration/2)){var h={};return this.altAudio&&(h.type="video"),this.hls.trigger(v.default.BUFFER_EOS,h),this.state=R.ENDED,!0}return this._fetchPayloadOrEos(i,l,d)}},{key:"_fetchPayloadOrEos",value:function(e,t,r){var i=this.fragPrevious,a=this.level,n=r.fragments,s=n.length;if(0===s)return!1;var o=n[0].start,l=n[s-1].start+n[s-1].duration,u=t.end,d=void 0;if(r.initSegment&&!r.initSegment.data)d=r.initSegment;else if(r.live){var f=this.config.initialLiveManifestSize;if(sf&&(l.currentTime=f)}if(e.PTSKnown&&t>i&&l&&l.readyState)return null;if(this.startFragRequested&&!e.PTSKnown){if(a){var c=a.sn+1;c>=e.startSN&&c<=e.endSN&&(u=n[c-e.startSN],k.logger.log("live playlist, switching playlist, load frag with next SN: "+u.sn))}u||(u=n[Math.min(s-1,Math.round(s/2))],k.logger.log("live playlist, switching playlist, unknown, load middle frag : "+u.sn))}return u}},{key:"_findFragment",value:function(e,t,r,i,a,n,s){var o=this.hls.config,l=void 0,d=void 0,f=o.maxFragLookUpTolerance,c=t?i[t.sn-i[0].sn+1]:void 0,h=function(e){var t=Math.min(f,e.duration) +;return e.start+e.duration-t<=a?1:e.start-t>a&&e.start?-1:0};if(an-f&&(f=0),d=c&&!h(c)?c:u.default.search(i,h)):d=i[r-1],d){l=d;var g=l.sn-s.startSN,v=t&&l.level===t.level,p=i[g-1],y=i[g+1];if(v&&l.sn===t.sn)if(l.sno.maxBufferHole&&t.dropped&&g?(l=p,k.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),t.loadCounter--):(l=y,k.logger.log("SN just loaded, load next one: "+l.sn))}else l=null;else l.dropped&&!v&&(y&&y.backtracked?(k.logger.warn("Already backtracked from fragment "+(g+1)+", will not backtrack to fragment "+g+". Loading fragment "+(g+1)),l=y):(k.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),l.dropped=0,p&&p.loadCounter?(p.loadCounter--,l=p):l=null))}return l}},{key:"_loadFragmentOrKey",value:function(e,t,r,i,a){var n=this.hls,s=n.config;if(!e.decryptdata||null==e.decryptdata.uri||null!=e.decryptdata.key){if(k.logger.log("Loading "+e.sn+" of ["+r.startSN+" ,"+r.endSN+"],level "+t+", currentTime:"+i.toFixed(3)+",bufferEnd:"+a.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,e.loadCounter){e.loadCounter++;var o=s.fragLoadingLoopThreshold;if(e.loadCounter>o&&Math.abs(this.fragLoadIdx-e.loadIdx)t.endPTS?1:0})}},{key:"followingBufferedFrag",value:function(e){return e?this.getBufferedFrag(e.endPTS+.5):null}},{key:"_checkFragmentChanged",value:function(){var e,t,r=this.media;if(r&&r.readyState&&r.seeking===!1&&(t=r.currentTime,t>r.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=t),f.default.isBuffered(r,t)?e=this.getBufferedFrag(t):f.default.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(v.default.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(v.default.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}}},{key:"immediateLevelSwitch",value:function(){if(k.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e=this.media,t=void 0;e?(t=e.paused,e.pause()):t=!0,this.previouslyPaused=t}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}},{key:"immediateLevelSwitchEnd",value:function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,f.default.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var e=this.media;if(e&&e.readyState){var t=void 0,r=void 0,i=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,r=this.getBufferedFrag(e.currentTime),r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var a=this.hls.nextLoadLevel,n=this.levels[a],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.bitrate/(1e3*s)+1:0}if(i=this.getBufferedFrag(e.currentTime+t),i&&(i=this.followingBufferedFrag(i))){var o=this.fragCurrent;o&&o.loader&&o.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(i.startPTS,Number.POSITIVE_INFINITY)}}}},{key:"flushMainBuffer",value:function(e,t){this.state=R.BUFFER_FLUSHING;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(v.default.BUFFER_FLUSHING,r)}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0,e.backtracked=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){var e=this.media,t=e?e.currentTime:void 0,r=this.config;if(k.logger.log("media seeking to "+t.toFixed(3)),this.state===R.FRAG_LOADING){var i=this.mediaBuffer?this.mediaBuffer:e,a=f.default.bufferInfo(i,t,this.config.maxBufferHole),n=this.fragCurrent;if(0===a.len&&n){var s=r.maxFragLookUpTolerance,o=n.start-s,l=n.start+n.duration+s;tl?(n.loader&&(k.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=R.IDLE):k.logger.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===R.ENDED&&(this.state=R.IDLE);e&&(this.lastCurrentTime=t),this.state!==R.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*r.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=t),this.tick()}},{key:"onMediaSeeked",value:function(){k.logger.log("media seeked to "+this.media.currentTime.toFixed(3)),this.tick()}},{key:"onMediaEnded",value:function(){k.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){k.logger.log("trigger BUFFER_RESET"),this.hls.trigger(v.default.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0}},{key:"onManifestParsed",value:function(e){var t,r=!1,i=!1;e.levels.forEach(function(e){t=e.audioCodec,t&&(t.indexOf("mp4a.40.2")!==-1&&(r=!0),t.indexOf("mp4a.40.5")!==-1&&(i=!0))}),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&k.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=e.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var a=this.config;a.autoStartLoad&&this.hls.startLoad(a.startPosition)}},{key:"onLevelLoaded",value:function(e){var t=e.details,r=e.level,i=this.levels[r],a=t.totalduration,n=0;if(k.logger.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),this.levelLastLoaded=r,t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(n,s),t.PTSKnown?k.logger.log("live playlist sliding:"+n.toFixed(3)):k.logger.log("live playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,this.hls.trigger(v.default.LEVEL_UPDATED,{details:t,level:r}),this.startFragRequested===!1){if(this.startPosition===-1||this.lastCurrentTime===-1){var o=t.startTimeOffset;isNaN(o)?t.live?(this.startPosition=this.computeLivePosition(n,t),k.logger.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(o<0&&(k.logger.log("negative start time offset "+o+", count from end of last fragment"),o=n+a+o),k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_LEVEL&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"main"===r.type&&r.level===t.level&&r.sn===t.sn){var i=e.stats,a=this.levels[t.level],n=a.details;if(k.logger.log("Loaded "+t.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+t.level),this.bitrateTest=!1,this.stats=i,r.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=R.IDLE,this.startFragRequested=!1,i.tparsed=i.tbuffered=performance.now(),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else if("initSegment"===r.sn)this.state=R.IDLE,i.tparsed=i.tbuffered=performance.now(),n.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else{this.state=R.PARSING;var s=n.totalduration,o=t.level,l=t.sn,u=this.config.defaultAudioCodec||a.audioCodec;this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),void 0===u&&(u=this.lastAudioCodec),u&&(u=u.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,k.logger.log("Parsing "+l+" of ["+n.startSN+" ,"+n.endSN+"],level "+o+", cc "+t.cc);var d=this.demuxer;d||(d=this.demuxer=new h.default(this.hls,"main"));var f=this.media,c=f&&f.seeking,g=!c&&(n.PTSKnown||!n.live),p=n.initSegment?n.initSegment.data:[];d.push(e.payload,p,u,a.videoCodec,t,s,g,void 0)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i,a,n=e.tracks;if(n.audio&&this.altAudio&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),s=s.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&o.indexOf("firefox")===-1&&(s="mp4a.40.5"),o.indexOf("android")!==-1&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",k.logger.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}a=n.video,a&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(v.default.BUFFER_CODECS,n);for(i in n){a=n[i],k.logger.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===R.PARSING){var a=this.levels[this.level],n=r;if(isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped){if(!n.backtracked)return n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=R.IDLE,void this.tick();k.logger.warn("Already backtracked on this fragment, appending with the gap")}else n.backtracked=!1;var s=E.default.updateFragPTSDTS(a.details,n.sn,e.startPTS,e.endPTS,e.startDTS,e.endDTS),o=this.hls;o.trigger(v.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach(function(r){r&&r.length&&t.state===R.PARSING&&(t.appended=!0,t.pendingBuffering=!0,o.trigger(v.default.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))}),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url,r=e.id;if(!t){if(this.mediaBuffer!==this.media){k.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i.loader&&(k.logger.log("switching to main audio track, cancel main fragment load"),i.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.IDLE}var a=this.hls;a.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),a.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:r}),this.altAudio=!1}}},{key:"onAudioTrackSwitched",value:function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(k.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()}},{key:"onBufferCreated",value:function(e){var t=e.tracks,r=void 0,i=void 0,a=!1;for(var n in t){var s=t[n];"main"===s.id?(i=n,r=s,"video"===n&&(this.videoBuffer=t[n].buffer)):a=!0}a&&r?(k.logger.log("alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}},{key:"onBufferAppended",value:function(e){if("main"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){var e=this;if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var t=this.fragCurrent;t&&function(){var r=e.mediaBuffer?e.mediaBuffer:e.media;k.logger.log("main buffered : "+T.default.toString(r.buffered));var i=e._bufferedFrags.filter(function(e){return f.default.isBuffered(r,(e.startPTS+e.endPTS)/2)});i.push(t),e._bufferedFrags=i.sort(function(e,t){return e.startPTS-t.startPTS}),e.fragPrevious=t;var a=e.stats;a.tbuffered=performance.now(),e.fragLastKbps=Math.round(8*a.total/(a.tbuffered-a.tfirst)),e.hls.trigger(v.default.FRAG_BUFFERED,{stats:a,frag:t,id:"main"}),e.state=R.IDLE}(),this.tick()}}},{key:"onError",value:function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=this.media,i=r&&f.default.isBuffered(r,r.currentTime)&&f.default.isBuffered(r,r.currentTime+.5);switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:if(!e.fatal){var a=this.fragLoadError;a?a++:a=1;var n=this.config;if(a<=n.fragLoadingMaxRetry||i||t.autoLevel&&t.level){this.fragLoadError=a,t.loadCounter=0;var s=Math.min(Math.pow(2,a-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);k.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:e.fatal||(i?(this._reduceMaxBufferLength(t.duration),this.state=R.IDLE):t.autoLevel&&0!==t.level||(e.fatal=!0,this.state=R.ERROR));break;case _.ErrorDetails.LEVEL_LOAD_ERROR:case _.ErrorDetails.LEVEL_LOAD_TIMEOUT:this.state!==R.ERROR&&(e.fatal?(this.state=R.ERROR,k.logger.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):this.state===R.WAITING_LEVEL&&(this.state=R.IDLE));break;case _.ErrorDetails.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==R.PARSING&&this.state!==R.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=R.IDLE):(k.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}}},{key:"_reduceMaxBufferLength",value:function(e){var t=this.config;t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,k.logger.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*t.fragLoadingLoopThreshold)}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var t=e.currentTime,r=this.mediaBuffer?this.mediaBuffer:e,i=r.buffered;if(!this.loadedmetadata&&i.length){this.loadedmetadata=!0;var a=e.seeking?t:this.startPosition,n=f.default.isBuffered(r,a);t===a&&n||(k.logger.log("target start position:"+a),n||(a=i.start(0),k.logger.log("target start position not buffered, seek to buffered.start(0) "+a)),k.logger.log("adjust currentTime from "+t+" to "+a),e.currentTime=a)}else if(this.immediateSwitch)this.immediateLevelSwitchEnd();else{var s=f.default.bufferInfo(e,t,0),o=!(e.paused||e.ended||0===e.buffered.length),l=t!==this.lastCurrentTime,u=this.config;if(l)this.stallReported&&(k.logger.warn("playback not stuck anymore @"+t+", after "+Math.round(performance.now()-this.stalled)+"ms"),this.stallReported=!1),this.stalled=void 0,this.nudgeRetry=0;else if(o){var d=performance.now(),c=this.hls;if(this.stalled){var h=d-this.stalled,g=s.len,p=this.nudgeRetry||0;if(g<=.5&&h>1e3*u.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in low buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g}));var y=s.nextStart,m=y-t;if(y&&m0){this.nudgeRetry=++p;var E=p*u.nudgeOffset;k.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+y+" + nudge "+E),e.currentTime=y+E,this.stalled=void 0,c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:y+E-t})}}else if(g>.5&&h>1e3*u.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in high buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g})),this.stalled=void 0,this.nudgeRetry=++p,p"+e),this.hls.trigger(v.default.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}]),t}(y.default);r.default=A},{25:25,31:31,32:32,33:33,35:35,36:36,46:46,50:50,51:51}],14:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r-1&&this.vttFragQueues[this.currentTrackId].length){var e=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.hls.trigger(u.default.FRAG_LOADING,{frag:e})}}},{key:"onSubtitleFragProcessed",value:function(e){e.success&&this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn),this.currentlyProcessing=null,this.nextFrag()}},{key:"onError",value:function(e){var t=e.frag;t&&"subtitle"!==t.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())}},{key:"onSubtitleTracksUpdated",value:function(e){var t=this;c.logger.log("subtitle tracks updated"),this.tracks=e.subtitleTracks,this.clearVttFragQueues(),this.vttFragSNsProcessed={},this.tracks.forEach(function(e){t.vttFragSNsProcessed[e.id]=[]})}},{key:"onSubtitleTrackSwitch",value:function(e){this.currentTrackId=e.id,this.clearVttFragQueues()}},{key:"onSubtitleTrackLoaded",value:function(e){var t=this.vttFragSNsProcessed[e.id],r=this.vttFragQueues[e.id],i=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(e){return t.indexOf(e.sn)>-1},n=function(e){return r.some(function(t){return t.sn===e.sn})};e.details.fragments.forEach(function(t){a(t)||t.sn===i||n(t)||(t.trackId=e.id,r.push(t))}),this.nextFrag()}}]),t}(f.default);r.default=h},{32:32,33:33,50:50}],15:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r=0&&e0;)e.removeCue(e.cues[0])}function l(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}function u(e,t,r,i){return Math.min(t,i)-Math.max(e,r)}Object.defineProperty(r,"__esModule",{value:!0});var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f=function(){function e(e,t){for(var r=0;r=0&&(o[0]=Math.min(o[0],t),o[1]=Math.max(o[1],r),n=!0,l/(r-t)>.5))return}n||a.push([t,r]),this.Cues.newCue(this[e],t,r,i)}},{key:"onInitPtsFound",value:function(e){var t=this;void 0===this.initPTS&&(this.initPTS=e.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(e){t.onFragLoaded(e)}),this.unparsedVttFrags=[])}},{key:"getExistingTrack",value:function(e){var t=this.media;if(t)for(var r=0;r>>8^255&g^99,e[f]=g,t[g]=f;var v=d[f],p=d[v],y=d[p],m=257*d[g]^16843008*g;r[f]=m<<24|m>>>8,i[f]=m<<16|m>>>16,a[f]=m<<8|m>>>24,n[f]=m,m=16843009*y^65537*p^257*v^16843008*f,s[g]=m<<24|m>>>8,o[g]=m<<16|m>>>16,l[g]=m<<8|m>>>24,u[g]=m,f?(f=v^d[d[d[y^v]]],c^=d[d[c]]):f=c=1}}},{key:"expandKey",value:function(e){for(var t=this.uint8ArrayToUint32Array_(e),r=!0,i=0;i>8|e>>>24}},{key:"decrypt",value:function(e,t,r){for(var i,a,n=this.keySize+6,s=this.invKeySchedule,o=this.invSBox,l=this.invSubMix[0],u=this.invSubMix[1],d=this.invSubMix[2],f=this.invSubMix[3],c=this.uint8ArrayToUint32Array_(r),h=c[0],g=c[1],v=c[2],p=c[3],y=new Int32Array(e),m=new Int32Array(y.length),E=void 0,b=void 0,T=void 0,_=void 0,k=void 0,R=void 0,A=void 0,S=void 0,L=void 0,w=void 0,D=void 0,O=void 0;t>>24]^u[R>>16&255]^d[A>>8&255]^f[255&S]^s[i],b=l[R>>>24]^u[A>>16&255]^d[S>>8&255]^f[255&k]^s[i+1],T=l[A>>>24]^u[S>>16&255]^d[k>>8&255]^f[255&R]^s[i+2],_=l[S>>>24]^u[k>>16&255]^d[R>>8&255]^f[255&A]^s[i+3],k=E,R=b,A=T,S=_,i+=4;E=o[k>>>24]<<24^o[R>>16&255]<<16^o[A>>8&255]<<8^o[255&S]^s[i],b=o[R>>>24]<<24^o[A>>16&255]<<16^o[S>>8&255]<<8^o[255&k]^s[i+1],T=o[A>>>24]<<24^o[S>>16&255]<<16^o[k>>8&255]<<8^o[255&R]^s[i+2],_=o[S>>>24]<<24^o[k>>16&255]<<16^o[R>>8&255]<<8^o[255&A]^s[i+3],i+=3,m[t]=this.networkToHostOrderSwap(E^h),m[t+1]=this.networkToHostOrderSwap(_^g),m[t+2]=this.networkToHostOrderSwap(T^v),m[t+3]=this.networkToHostOrderSwap(b^p),h=L,g=w,v=D,p=O,t+=4}return m.buffer}},{key:"destroy",value:function(){this.key=void 0,this.keySize=void 0,this.ksRows=void 0,this.sBox=void 0,this.invSBox=void 0,this.subMix=void 0,this.invSubMix=void 0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.rcon=void 0}}]),e}();r.default=n},{}],19:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>>5,s-=h,s>0&&c+h+s<=v);)for(g=m+f*u,p={unit:e.subarray(c+h,c+h+s),pts:g,dts:g},a.samples.push(p),a.len+=s,c+=s+h,f++;c>>6)+1,o=(60&t[r+2])>>>2,o>h.length-1?void e.trigger(Event.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(u=(1&t[r+2])<<2,u|=(192&t[r+3])>>>6,i.logger.log("manifest codec:"+n+",ADTS data:type:"+s+",sampleingIndex:"+o+"["+h[o]+"Hz],channelConfig:"+u),/firefox/i.test(f)?o>=6?(s=5,d=new Array(4),l=o-3):(s=2,d=new Array(2),l=o):f.indexOf("android")!==-1?(s=2,d=new Array(2),l=o):(s=5,d=new Array(4),n&&(n.indexOf("mp4a.40.29")!==-1||n.indexOf("mp4a.40.5")!==-1)||!n&&o>=6?l=o-3:((n&&n.indexOf("mp4a.40.2")!==-1&&o>=6&&1===u||!n&&1===u)&&(s=2,d=new Array(2)),l=o)),d[0]=s<<3,d[0]|=(14&o)>>1,d[1]|=(1&o)<<7,d[1]|=u<<3,5===s&&(d[1]|=(14&l)>>1,d[2]=(1&l)<<7,d[2]|=8,d[3]=0),{config:d,samplerate:h[o],channelCount:u,codec:"mp4a.40."+s,manifestCodec:c})}};t.exports=n},{31:31,50:50}],23:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&null!=t&&null!=t.key&&"AES-128"===t.method){var g=this.decrypter;null==g&&(g=this.decrypter=new d.default(this.observer,this.config));var v,p=this;try{v=performance.now()}catch(e){v=Date.now()}g.decrypt(e,t.key.buffer,t.iv.buffer,function(e){var d;try{d=performance.now()}catch(e){d=Date.now()}p.observer.trigger(o.default.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:d}}),p.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)})}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)}},{key:"pushDecrypted",value:function(e,t,r,i,a,n,s,u,d,f,h,v){var y=this.demuxer;if(!y||s&&!this.probe(e)){var E=this.observer,T=this.typeSupported,_=this.config,k=[{demux:p.default,remux:m.default},{demux:c.default,remux:m.default},{demux:g.default,remux:b.default}];for(var R in k){var A=k[R],S=A.demux.probe;if(S(e)){var L=this.remuxer=new A.remux(E,_,T);y=new A.demux(E,L,_,T),this.probe=S;break}}if(!y)return void E.trigger(o.default.ERROR,{type:l.ErrorTypes.MEDIA_ERROR,details:l.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"no demux matching with content found"});this.demuxer=y}var w=this.remuxer;(s||u)&&(y.resetInitSegment(r,i,a,f),w.resetInitSegment()),s&&(y.resetTimeStamp(),w.resetTimeStamp(v)),"function"==typeof y.setDecryptData&&y.setDecryptData(t),y.append(e,n,d,h)}}]),e}();r.default=T},{19:19,21:21,28:28,30:30,31:31,33:33,43:43,44:44}],24:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var a=e(23),n=i(a),s=e(33),o=i(s),l=e(50),u=e(1),d=i(u),f=function(e){var t=new d.default;t.trigger=function(e){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i1?t-1:0),i=1;ie?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(e){var t=Math.min(this.bitsAvailable,e),r=this.word>>>32-t;return e>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=t,this.bitsAvailable>0?this.word<<=t:this.bytesAvailable>0&&this.loadWord(),t=e-t,t>0&&this.bitsAvailable?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(e){var t,r,i=8,a=8;for(t=0;t=8){var r=e.bin2str(t.subarray(4,8));return["moof","ftyp","styp"].indexOf(r)>=0}return!1}},{key:"bin2str",value:function(e){return String.fromCharCode.apply(null,e)}},{key:"findBox",value:function(t,r){var i,a,n,s,o,l=[];if(!r.length)return null;for(i=0;i1?i+a:t.byteLength,n===r[0]&&(1===r.length?l.push(t.subarray(i+8,s)):(o=e.findBox(t.subarray(i+8,s),r.slice(1)),o.length&&(l=l.concat(o)))),i=s;return l}},{key:"parseInitSegment",value:function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach(function(t){var i=e.findBox(t,["tkhd"])[0];if(i){var a=i[0],n=0===a?12:20,s=i[n]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3];s=s<0?4294967296+s:s;var o=e.findBox(t,["mdia","mdhd"])[0];if(o){a=o[0],n=0===a?12:20;var l=o[n]<<24|o[n+1]<<16|o[n+2]<<8|o[n+3],u=e.findBox(t,["mdia","hdlr"])[0];if(u){var d=e.bin2str(u.subarray(8,12)),f={soun:"audio",vide:"video"}[d];f&&(r[s]={timescale:l,type:f},r[f]={timescale:l,id:s})}}}}),r}},{key:"startDTS",value:function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map(function(r){return e.findBox(r,["tfhd"]).map(function(i){var a,n,s;return a=i[4]<<24|i[5]<<16|i[6]<<8|i[7],n=t[a].timescale||9e4,s=e.findBox(r,["tfdt"]).map(function(e){var t,r;return t=e[0],r=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(r*=Math.pow(2,32),r+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),r})[0],s=s||1/0,s/n})})),n=Math.min.apply(null,a),isFinite(n)?n:0}}]),e}();r.default=l},{33:33}],29:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r=e.length)return void r();if(!(e[t].unit.length<32)){var i=this.decrypter.isSync();if(this.decryptAacSample(e,t,r,i),!i)return}}}},{key:"getAvcEncryptedData",value:function(e){for(var t=16*Math.floor((e.length-48)/160)+16,r=new Int8Array(t),i=0,a=32;a<=e.length-16;a+=160,i+=16)r.set(e.subarray(a,a+16),i);return r}},{key:"getAvcDecryptedUnit",value:function(e,t){t=new Uint8Array(t);for(var r=0,i=32;i<=e.length-16;i+=160,r+=16)e.set(t.subarray(r,r+16),i);return e}},{key:"decryptAvcSample",value:function(e,t,r,i,a,n){var s=this.discardEPB(a.data),o=this.getAvcEncryptedData(s),l=this;this.decryptBuffer(o.buffer,function(o){a.data=l.getAvcDecryptedUnit(s,o),n||l.decryptAvcSamples(e,t,r+1,i)})}},{key:"decryptAvcSamples",value:function(e,t,r,i){for(;;t++,r=0){if(t>=e.length)return void i();for(var a=e[t].units;!(r>=a.length);r++){var n=a[r];if(!(n.length<=48||1!==n.type&&5!==n.type)){var s=this.decrypter.isSync();if(this.decryptAvcSample(e,t,r,i,n,s),!s)return}}}}}]),e}();r.default=l},{19:19}],30:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>4,o>1){if(l=a+5+e[a+4],l===a+188)continue}else l=a+4;switch(s){case E:n&&(k&&(d=w(k))&&D(d,!1),k={data:[],size:0}),k&&(k.data.push(e.subarray(l,a+188)),k.size+=a+188-l);break;case b:n&&(R&&(d=w(R))&&(y.isAAC?O(d):I(d)),R={data:[],size:0}),R&&(R.data.push(e.subarray(l,a+188)),R.size+=a+188-l);break;case T:n&&(A&&(d=w(A))&&P(d),A={data:[],size:0}),A&&(A.data.push(e.subarray(l,a+188)),A.size+=a+188-l);break;case 0:n&&(l+=e[l]+1),_=this._pmtId=S(e,l);break;case _:n&&(l+=e[l]+1);var C=L(e,l,this.typeSupported.mpeg===!0||this.typeSupported.mp3===!0,null!=this.sampleAes);E=C.avc,E>0&&(p.id=E),b=C.audio,b>0&&(y.id=b,y.isAAC=C.isAAC),T=C.id3,T>0&&(m.id=T),c&&!h&&(g.logger.log("reparse from beginning"),c=!1,a=-188),h=this.pmtParsed=!0;break;case 17:case 8191:break;default:c=!0}}else this.observer.trigger(u.default.ERROR,{type:v.ErrorTypes.MEDIA_ERROR,details:v.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});k&&(d=w(k))?(D(d,!0),p.pesData=null):p.pesData=k,R&&(d=w(R))?(y.isAAC?O(d):I(d),y.pesData=null):(R&&R.size&&g.logger.log("last AAC PES packet truncated,might overlap between fragments"),y.pesData=R),A&&(d=w(A))?(P(d),m.pesData=null):m.pesData=A,null==this.sampleAes?this.remuxer.remux(y,p,m,this._txtTrack,t,r,i):this.decryptAndRemux(y,p,m,this._txtTrack,t,r,i)}},{key:"decryptAndRemux",value:function(e,t,r,i,a,n,s){var o=this;e.samples&&e.isAAC?function(){var l=o;o.sampleAes.decryptAacSamples(e.samples,0,function(){l.decryptAndRemuxAvc(e,t,r,i,a,n,s)})}():this.decryptAndRemuxAvc(e,t,r,i,a,n,s)}},{key:"decryptAndRemuxAvc",value:function(e,t,r,i,a,n,s){var o=this;t.samples?function(){var l=o;o.sampleAes.decryptAvcSamples(t.samples,0,0,function(){l.remuxer.remux(e,t,r,i,a,n,s)})}():this.remuxer.remux(e,t,r,i,a,n,s)}},{key:"destroy",value:function(){this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){return(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(e,t,r,i){var a,n,s,o,l={audio:-1,avc:-1,id3:-1,isAAC:!0};for(a=(15&e[t+1])<<8|e[t+2],n=t+3+a-4,s=(15&e[t+10])<<8|e[t+11],t+=12+s;t1;){var c=new Uint8Array(f[0].length+f[1].length);c.set(f[0]),c.set(f[1],f[0].length),f[0]=c,f.splice(1,1)}if(t=f[0],i=(t[0]<<16)+(t[1]<<8)+t[2],1===i){if(a=(t[4]<<8)+t[5],a&&a>e.size-6)return null;r=t[7],192&r&&(o=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2,o>4294967295&&(o-=8589934592),64&r?(l=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,l>4294967295&&(l-=8589934592),o-l>54e5&&(g.logger.warn(Math.round((o-l)/9e4)+"s delta between PTS and DTS, align them"),o=l)):l=o),n=t[8],u=n+9,e.size-=u,s=new Uint8Array(e.size);for(var h=0,v=f.length;hp){u-=p;continue}t=t.subarray(u),p-=u,u=0}s.set(t,d),d+=p}return a&&(a-=n+3),{data:s,pts:o,dts:l,len:a}}return null}},{key:"pushAccesUnit",value:function(e,t){if(e.units.length&&e.frame){var r=t.samples,i=r.length;!this.config.forceKeyFrameOnDiscontinuity||e.key===!0||t.sps&&(i||this.contiguous)?(e.id=i,r.push(e)):t.dropped++}e.debug.length&&g.logger.log(e.pts+"/"+e.dts+":"+e.debug)}},{key:"_parseAVCPES",value:function(e,t){var r,i,a,n=this,s=this._avcTrack,o=this._parseAVCNALu(e.data),l=this.avcSample;e.data=null,o.forEach(function(t){switch(t.type){case 1:i=!0,l.frame=!0;var o=t.data;if(o.length>4){var u=new f.default(o).readSliceType();2!==u&&4!==u&&7!==u&&9!==u||(l.key=!0)}break;case 5:i=!0,l||(l=n.avcSample=n._createAVCSample(!0,e.pts,e.dts,"")),l.key=!0,l.frame=!0;break;case 6:i=!0,r=new f.default(n.discardEPB(t.data)),r.readUByte();for(var d=0,c=0,h=!1,g=0;!h&&r.bytesAvailable>1;){d=0;do g=r.readUByte(),d+=g;while(255===g);c=0;do g=r.readUByte(),c+=g;while(255===g);if(4===d&&0!==r.bytesAvailable){h=!0;if(181===r.readUByte()){if(49===r.readUShort()){if(1195456820===r.readUInt()){if(3===r.readUByte()){var v=r.readUByte(),p=r.readUByte(),y=31&v,m=[v,p];for(a=0;a0){if(t.pts>=e[r-1].pts)e.push(t);else for(var i=r-1;i>=0;i--)if(t.pts=0)i={data:e.subarray(c,s-u-1),type:n},f.push(i);else{var h=this._getLastNalUnit();if(h&&(d&&s<=4-d&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-d)),r=s-u-1,r>0)){var g=new Uint8Array(h.data.byteLength+r);g.set(h.data,0),g.set(e.subarray(0,r),h.data.byteLength),h.data=g}}s=0&&u>=0&&(i={data:e.subarray(c,o),type:n,state:u},f.push(i)),0===f.length){var v=this._getLastNalUnit();if(v){var p=new Uint8Array(v.data.byteLength+e.byteLength);p.set(v.data,0),p.set(e,v.data.byteLength),v.data=p}}return l.naluState=u,f}},{key:"discardEPB",value:function(e){for(var t,r,i=e.byteLength,a=[],n=1;n1&&(g.logger.log("AAC: align PTS for overlapping frames by "+Math.round((k-p)/90)),p=k)}for(;n+5>>5,r-=s,r>0&&n+s+r<=d);)for(l=p+a*i,f={unit:h.subarray(n+s,n+s+r),pts:l,dts:l},c.samples.push(f),c.len+=r,n+=r+s,a++;n0;)s+=t}},{key:"_onMpegFrame",value:function(e,t,r,i,a,n){var s=1152/r*1e3,o=n+a*s,l=this._audioTrack;l.config=[],l.channelCount=i,l.audiosamplerate=r,l.duration=this._duration,l.samples.push({unit:e,pts:o,dts:o}),l.len+=e.length}},{key:"_onMpegNoise",value:function(e){g.logger.warn("mpeg audio has noise: "+e.length+" bytes")}},{key:"_parseMpeg",value:function(e,t,r,i,a){var n=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],s=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3];if(t+2>r)return-1;if(255===e[t]||224===(224&e[t+1])){if(t+24>r)return-1;var o=e[t+1]>>3&3,l=e[t+1]>>1&3,u=e[t+2]>>4&15,d=e[t+2]>>2&3,f=!!(2&e[t+2]);if(1!==o&&0!==u&&15!==u&&3!==d){var c=3===o?3-l:3===l?3:4,h=1e3*n[14*c+u-1],g=3===o?0:2===o?1:2,v=s[3*g+d],p=f?1:0,y=e[t+3]>>6===3?1:2,m=3===l?(3===o?12:6)*h/v+p<<2:(3===o?144:72)*h/v+p|0;return t+m>r?-1:(this._onMpegFrame&&this._onMpegFrame(e.subarray(t,t+m),h,v,y,i,a),m)}}for(var E=t+2;E=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),e}();r.default=p},{22:22,26:26,29:29,31:31,33:33,50:50}],31:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",MUX_ERROR:"muxError",OTHER_ERROR:"otherError"},r.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",AUDIO_TRACK_LOAD_ERROR:"audioTrackLoadError",AUDIO_TRACK_LOAD_TIMEOUT:"audioTrackLoadTimeOut",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",REMUX_ALLOC_ERROR:"remuxAllocError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_ADD_CODEC_ERROR:"bufferAddCodecError",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",BUFFER_NUDGE_ON_STALL:"bufferNudgeOnStall",INTERNAL_EXCEPTION:"internalException",WEBVTT_EXCEPTION:"webVTTException"}},{}],32:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s=function(){function e(e,t){for(var r=0;r1?r-1:0),n=1;n=r.start(i)&&t<=r.end(i))return!0;return!1},bufferInfo:function(e,t,r){if(e){var i,a=e.buffered,n=[];for(i=0;id&&(l[u-1].end=e[o].end):l.push(e[o])}else l.push(e[o])}for(o=0,i=0,a=n=t;o=f&&t=0&&oe.endSN)return 0;if(o=t-e.startSN,l=e.fragments,u=l[o],!isNaN(u.startPTS)){var f=Math.abs(u.startPTS-r);isNaN(u.deltaPTS)?u.deltaPTS=f:u.deltaPTS=Math.max(f,u.deltaPTS),r=Math.min(r,u.startPTS),i=Math.max(i,u.endPTS),n=Math.min(n,u.startDTS),s=Math.max(s,u.endDTS)}var c=r-u.start;for(u.start=u.startPTS=r,u.endPTS=i,u.startDTS=n,u.endDTS=s,u.duration=i-r,d=o;d>0;d--)a.updatePTS(l,d,d-1);for(d=o;dt?a.start+a.duration:a.start-n.duration:r>t?(a.duration=s-a.start,a.duration<0&&i.logger.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!")):(n.duration=a.start-s,n.duration<0&&i.logger.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!"))}};t.exports=a},{50:50}],37:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};a(this,e);var i=e.DefaultConfig;if((r.liveSyncDurationCount||r.liveMaxLatencyDurationCount)&&(r.liveSyncDuration||r.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var n in i)n in r||(r[n]=i[n]);if(void 0!==r.liveMaxLatencyDurationCount&&r.liveMaxLatencyDurationCount<=r.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==r.liveMaxLatencyDuration&&(r.liveMaxLatencyDuration<=r.liveSyncDuration||void 0===r.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');(0,E.enableLogs)(r.debug),this.config=r,this._autoLevelCapping=-1;var s=this.observer=new T.default;s.trigger=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:-1;E.logger.log("startLoad("+e+")"),this.networkControllers.forEach(function(t){t.startLoad(e)})}},{key:"stopLoad",value:function(){E.logger.log("stopLoad"),this.networkControllers.forEach(function(e){e.stopLoad()})}},{key:"swapAudioCodec",value:function(){E.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){E.logger.log("recoverMediaError");var e=this.media;this.detachMedia(),this.attachMedia(e)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){E.logger.log("set currentLevel:"+e),this.loadLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){E.logger.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){E.logger.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){E.logger.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(e){E.logger.log("set startLevel:"+e);var t=this;e!==-1&&(e=Math.max(e,t.minAutoLevel)),t.levelController.startLevel=e}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){E.logger.log("set autoLevelCapping:"+e),this._autoLevelCapping=e}},{key:"autoLevelEnabled",get:function(){return this.levelController.manualLevel===-1}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var e=this,t=e.levels,r=e.config.minAutoBitrate,i=t?t.length:0,a=0;ar)return a}return 0}},{key:"maxAutoLevel",get:function(){var e=this,t=e.levels,r=e.autoLevelCapping;return r===-1&&t&&t.length?t.length-1:r}},{key:"nextAutoLevel",get:function(){var e=this;return Math.min(Math.max(e.abrController.nextAutoLevel,e.minAutoLevel),e.maxAutoLevel)},set:function(e){var t=this;t.abrController.nextAutoLevel=Math.max(t.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}}]),e}();r.default=k},{1:1,12:12,13:13,31:31,33:33,39:39,4:4,40:40,41:41,50:50}],38:[function(e,t,r){"use strict";t.exports=e(37).default},{37:37}],39:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r>8*(15-r)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,t){var r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new T,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=u.default.buildAbsoluteURL(this.baseurl,this.relurl)),this._url},set:function(e){this._url=e}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var e=this._byteRange=[];if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var r=this.lastByteRangeEndOffset;e[0]=r?r:0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),e}(),k=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,f.default.MANIFEST_LOADING,f.default.LEVEL_LOADING,f.default.AUDIO_TRACK_LOADING,f.default.SUBTITLE_TRACK_LOADING));return r.loaders={},r}return n(t,e),o(t,[{key:"destroy",value:function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy()}this.loaders={},h.default.prototype.destroy.call(this)}},{key:"onManifestLoading",value:function(e){this.load(e.url,{type:"manifest"})}},{key:"onLevelLoading",value:function(e){this.load(e.url,{type:"level",level:e.level,id:e.id})}},{key:"onAudioTrackLoading",value:function(e){this.load(e.url,{type:"audioTrack",id:e.id})}},{key:"onSubtitleTrackLoading",value:function(e){this.load(e.url,{type:"subtitleTrack",id:e.id})}},{key:"load",value:function(e,t){var r=this.loaders[t.type];if(r){var i=r.context;if(i&&i.url===e)return void y.logger.trace("playlist request ongoing");y.logger.warn("abort previous loader for type:"+t.type),r.abort()}var a=this.hls.config,n=void 0,s=void 0,o=void 0,l=void 0;"manifest"===t.type?(n=a.manifestLoadingMaxRetry,s=a.manifestLoadingTimeOut,o=a.manifestLoadingRetryDelay,l=a.manifestLoadingMaxRetryTimeout):(n=a.levelLoadingMaxRetry,s=a.levelLoadingTimeOut,o=a.levelLoadingRetryDelay,l=a.levelLoadingMaxRetryTimeout,y.logger.log("loading playlist for "+t.type+" "+(t.level||t.id))),r=this.loaders[t.type]=t.loader=void 0!==a.pLoader?new a.pLoader(a):new a.loader(a),t.url=e,t.responseType="";var u=void 0,d=void 0;u={timeout:s,maxRetry:n,retryDelay:o,maxRetryDelay:l},d={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},r.load(t,u,d)}},{key:"resolve",value:function(e,t){return u.default.buildAbsoluteURL(t,e)}},{key:"parseMasterPlaylist",value:function(e,t){var r=[],i=void 0;for(m.lastIndex=0;null!=(i=m.exec(e));){var a={},n=a.attrs=new p.default(i[1]);a.url=this.resolve(i[2],t);var s=n.decimalResolution("RESOLUTION");s&&(a.width=s.width,a.height=s.height),a.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),a.name=n.NAME;var o=n.CODECS;if(o){o=o.split(/[ ,]+/);for(var l=0;l2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}},{key:"parseLevelPlaylist",value:function(e,t,r,i){var a,n,s=0,o=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new T,d=0,f=null,c=new _;for(b.lastIndex=0;null!==(a=b.exec(e));){var h=a[1];if(h){c.duration=parseFloat(h);var g=(" "+a[2]).slice(1);c.title=g?g:null,c.tagList.push(g?["INF",h,g]:["INF",h])}else if(a[3]){if(!isNaN(c.duration)){var v=s++;c.type=i,c.start=o,c.levelkey=u,c.sn=v,c.level=r,c.cc=d,c.baseurl=t,c.relurl=(" "+a[3]).slice(1),l.fragments.push(c),f=c,o+=c.duration,c=new _}}else if(a[4]){if(c.rawByteRange=(" "+a[4]).slice(1),f){var m=f.byteRangeEndOffset;m&&(c.lastByteRangeEndOffset=m)}}else if(a[5])c.rawProgramDateTime=(" "+a[5]).slice(1),c.tagList.push(["PROGRAM-DATE-TIME",c.rawProgramDateTime]);else{for(a=a[0].match(/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/),n=1;n=0&&(u.method=S,u.baseuri=t,u.reluri=L,u.key=null,u.iv=w));break;case"START":var D=E,O=new p.default(D),I=O.decimalFloatingPoint("TIME-OFFSET");isNaN(I)||(l.startTimeOffset=I);break;case"MAP":var P=new p.default(E);c.relurl=P.URI,c.rawByteRange=P.BYTERANGE,c.baseurl=t,c.level=r,c.type=i,c.sn="initSegment",l.initSegment=c,c=new _;break;default:y.logger.warn("line parsed but not handled: "+a)}}}return c=f,c&&!c.relurl&&(l.fragments.pop(),o-=c.duration),l.totalduration=o,l.averagetargetduration=o/l.fragments.length,l.endSN=s-1,l}},{key:"loadsuccess",value:function(e,t,r){var i=e.data,a=e.url,n=r.type,s=r.id,o=r.level,l=this.hls;if(this.loaders[n]=void 0,void 0!==a&&0!==a.indexOf("data:")||(a=r.url),t.tload=performance.now(),0===i.indexOf("#EXTM3U"))if(i.indexOf("#EXTINF:")>0){var u="audioTrack"!==n&&"subtitleTrack"!==n,d=isNaN(o)?isNaN(s)?0:s:o,c=this.parseLevelPlaylist(i,a,d,"audioTrack"===n?"audio":"subtitleTrack"===n?"subtitle":"main");c.tload=t.tload,"manifest"===n&&l.trigger(f.default.MANIFEST_LOADED,{levels:[{url:a,details:c}],audioTracks:[],url:a,stats:t}),t.tparsed=performance.now(),c.targetduration?u?l.trigger(f.default.LEVEL_LOADED,{details:c,level:o||0,id:s||0,stats:t}):"audioTrack"===n?l.trigger(f.default.AUDIO_TRACK_LOADED,{details:c,id:s,stats:t}):"subtitleTrack"===n&&l.trigger(f.default.SUBTITLE_TRACK_LOADED,{details:c,id:s,stats:t}):l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"invalid targetduration"})}else{var h=this.parseMasterPlaylist(i,a);if(h.length){var v=this.parseMasterPlaylistMedia(i,a,"AUDIO"),p=this.parseMasterPlaylistMedia(i,a,"SUBTITLES");if(v.length){var m=!1;v.forEach(function(e){e.url||(m=!0)}),m===!1&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(y.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main"}))}l.trigger(f.default.MANIFEST_LOADED,{levels:h,audioTracks:v,subtitles:p,url:a,stats:t})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no level found in manifest"})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_ERROR,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,response:e,context:t})}},{key:"loadtimeout",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,context:t})}}]),t}(h.default);r.default=k},{2:2,31:31,32:32,33:33,45:45,50:50}],42:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r>24&255,t[1]=i>>16&255,t[2]=i>>8&255,t[3]=255&i,t.set(e,4),a=0,i=8;a>24&255,t>>16&255,t>>8&255,255&t,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trex(t[r]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){r*=t;var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,i)}},{key:"sdtp",value:function(t){var r,i,a=t.samples||[],n=new Uint8Array(4+a.length);for(i=0;i>>8&255),n.push(255&a),n=n.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&a),s=s.concat(Array.prototype.slice.call(i));var o=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n).concat([t.pps.length]).concat(s))),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,u>>8&255,255&u,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,f>>24,f>>16&255,f>>8&255,255&f])))}},{key:"esds",value:function(e){var t=e.config.length;return new Uint8Array([0,0,0,0,3,23+t,0,1,0,4,15+t,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([t]).concat(e.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.audiosamplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"mp3",value:function(t){var r=t.audiosamplerate;return e.box(e.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]))}},{key:"stsd",value:function(t){return"audio"===t.type?t.isAAC||"mp3"!==t.codec?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.mp3(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration*t.timescale,a=t.width,n=t.height;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,n>>8&255,255&n,0,0]))}},{key:"traf",value:function(t,r){var i=e.sdtp(t),a=t.id;return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a])),e.box(e.types.tfdt,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),e.trun(t,i.length+16+16+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(t){var r=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(t,r){var i,a,n,s,o,l,u=t.samples||[],d=u.length,f=12+16*d,c=new Uint8Array(f);for(r+=8+f,c.set([0,0,15,1,d>>>24&255,d>>>16&255,d>>>8&255,255&d,r>>>24&255,r>>>16&255,r>>>8&255,255&r],0),i=0;i>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,c)}},{key:"initSegment",value:function(t){e.types||e.init();var r,i=e.moov(t);return r=new Uint8Array(e.FTYP.byteLength+i.byteLength),r.set(e.FTYP),r.set(i,e.FTYP.byteLength),r}}]),e}();r.default=n},{}],43:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;rMath.pow(2,32)&&function(){var t=function e(t,r){return r?e(r,t%r):t};e.timescale=e.audiosamplerate/t(e.audiosamplerate,e.isAAC?1024:1152)}(),d.logger.log("audio mp4 timescale :"+e.timescale),e.isAAC||(f.mpeg?(g="audio/mpeg",e.codec=""):f.mp3&&(e.codec="mp3")),v.audio={container:g,codec:e.codec,initSegment:!e.isAAC&&f.mpeg?new Uint8Array:c.default.initSegment([e]),metadata:{channelCount:e.channelCount}},y&&(i=a=s[0].pts-l*r)),t.sps&&t.pps&&o.length&&(t.timescale=this.MP4_TIMESCALE,v.video={container:"video/mp4",codec:t.codec,initSegment:c.default.initSegment([t]),metadata:{width:t.width,height:t.height}},y&&(i=Math.min(i,o[0].pts-l*r),a=Math.min(a,o[0].dts-l*r),this.observer.trigger(u.default.INIT_PTS_FOUND,{initPTS:i}))),Object.keys(v).length?(n.trigger(u.default.FRAG_PARSING_INIT_SEGMENT,p),this.ISGenerated=!0,y&&(this._initPTS=i,this._initDTS=a)):n.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(e,t,r,i){var a,n,s,o,l,f,g,v=8,p=this.PES_TIMESCALE,y=this.PES2MP4SCALEFACTOR,m=e.samples,E=[],b=m.length,T=this._PTSNormalize,_=this._initDTS;m.sort(function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r?r:i?i:e.id-t.id});var k=m.reduce(function(e,t){return Math.max(Math.min(e,t.pts-t.dts),-18e3)},0);if(k<0){d.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(k/90)+" ms to overcome this issue");for(var R=0;R1?d.logger.log("AVC:"+L+" ms hole between fragments detected,filling it"):L<-1&&d.logger.log("AVC:"+-L+" ms overlapping between fragments detected"),l=A,m[0].dts=l+_,o=Math.max(o-L,A),m[0].pts=o+_,d.logger.log("Video/PTS/DTS adjusted: "+Math.round(o/90)+"/"+Math.round(l/90)+",delta:"+L+" ms")),S=m[m.length-1],g=Math.max(T(S.dts-_,A),0),f=Math.max(T(S.pts-_,A),0),f=Math.max(f,g);var w=navigator.vendor,D=navigator.userAgent,O=w&&w.indexOf("Apple")>-1&&D&&!D.match("CriOS");O&&(a=Math.round((g-l)/(y*(m.length-1))));for(var I=0,P=0,C=0;C0?j-1:j].dts;if($.stretchShortVideoTrack){var Z=$.maxBufferHole,ee=$.maxSeekHole,te=Math.floor(Math.min(Z,ee)*p),re=(i?o+i*p:this.nextAudioPts)-H.pts;re>te?(a=re-J,a<0&&(a=J),d.logger.log("It is approximately "+re/90+" ms to the next segment; using duration "+a/90+" ms for the last video frame.")):a=J}else a=J}a/=y,V=Math.round((H.pts-H.dts)/y)}E.push({size:W,duration:a,cts:V,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:H.key?2:1,isNonSync:H.key?0:1}})}this.nextAvcDts=g+a*y;var ie=e.dropped;if(e.len=0,e.nbNalu=0,e.dropped=0,E.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var ae=E[0].flags;ae.dependsOn=2,ae.isNonSync=0}e.samples=E,s=c.default.moof(e.sequenceNumber++,l/y,e),e.samples=[];var ne={data1:s,data2:n,startPTS:o/p,endPTS:(f+y*a)/p,startDTS:l/p,endDTS:this.nextAvcDts/p,type:"video",nb:E.length,dropped:ie};return this.observer.trigger(u.default.FRAG_PARSING_DATA,ne),ne}},{key:"remuxAudio",value:function(e,t,r,i){var a,n,s,l,f,g,v,p,y,m,E,b,T,_,k,R,A=this.PES_TIMESCALE,S=e.timescale,L=A/S,w=e.timescale*(e.isAAC?1024:1152)/e.audiosamplerate,D=w*L,O=this._PTSNormalize,I=this._initDTS,P=!e.isAAC&&this.typeSupported.mpeg,C=P?0:8,x=[],M=[];if(e.samples.sort(function(e,t){return e.pts-t.pts}),M=e.samples,R=this.nextAudioPts,r|=M.length&&R&&(Math.abs(t-R/A)<.1||Math.abs(M[0].pts-R-this._initDTS)<20*D),r||(R=t*A),i&&e.isAAC)for(var F=0,N=R;F=D&&N){var j=Math.round(G/D);d.logger.warn("Injecting "+j+" audio frame @ "+Math.round(N/90)/1e3+"s due to "+Math.round(G/90)+" ms gap.");for(var H=0;H0)Y=Math.round((b-R)/D),d.logger.log(V+" ms hole between AAC samples detected,filling it"),Y>0&&(_=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount),_||(_=l.subarray()),e.len+=Y*_.length);else if(V<-12){d.logger.log(-V+" ms overlapping between AAC samples detected, drop frame"),e.len-=l.byteLength;continue}b=T=R}if(v=Math.max(0,b),p=Math.max(0,T),!(e.len>0))return;var X=P?e.len:e.len+8;try{f=new Uint8Array(X)}catch(e){return void this.observer.trigger(u.default.ERROR,{type:h.ErrorTypes.MUX_ERROR,details:h.ErrorDetails.REMUX_ALLOC_ERROR,fatal:!1,bytes:X,reason:"fail allocating audio mdat "+X})}P||(a=new DataView(f.buffer),a.setUint32(0,X),f.set(c.default.types.mdat,4));for(var q=0;q=2&&(Q=x[$-2].duration,s.duration=Q),$){this.nextAudioPts=b+L*Q,e.len=0,e.samples=x,g=P?new Uint8Array:c.default.moof(e.sequenceNumber++,p/L,e),e.samples=[];var J={data1:g,data2:f,startPTS:v/A,endPTS:this.nextAudioPts/A,startDTS:p/A,endDTS:(T+L*Q)/A,type:"audio",nb:$};return this.observer.trigger(u.default.FRAG_PARSING_DATA,J),J}return null}},{key:"remuxEmptyAudio",value:function(e,t,r,i){var a=this.PES_TIMESCALE,n=e.timescale?e.timescale:e.audiosamplerate,s=a/n,l=this.nextAudioPts,u=(void 0!==l?l:i.startDTS*a)+this._initDTS,f=i.endDTS*a+this._initDTS,c=1024*s,h=Math.ceil((f-u)/c),g=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(d.logger.warn("remux empty Audio"),!g)return void d.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var v=[],p=0;p4294967296;)e+=r;return e}}]),e}();r.default=g},{31:31,33:33,34:34,42:42,50:50}],44:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"hexadecimalInteger",value:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(e){var t=n.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}}],[{key:"parseAttrList",value:function(e){var t,r={};for(s.lastIndex=0;null!==(t=s.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r}}]),e}();r.default=o},{}],46:[function(e,t,r){"use strict";var i={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){a=(r+i)/2|0,n=e[a];var s=t(n);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}};t.exports=i},{}],47:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r100&&(c.log("ERROR","Too large cursor position "+this.pos),this.pos=100)}},{key:"moveCursor",value:function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=s(e);if(this.pos>=100)return void c.log("ERROR","Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}},{key:"clearFromPos",value:function(e){var t;for(t=e;t<100;t++)this.chars[t].reset()}},{key:"clear",value:function(){this.clearFromPos(0),this.pos=0,this.currPenState.reset()}},{key:"clearToEndOfRow",value:function(){this.clearFromPos(this.pos)}},{key:"getTextString",value:function(){for(var e=[],t=!0,r=0;r<100;r++){var i=this.chars[r].uchar;" "!==i&&(t=!1),e.push(i)}return t?"":e.join("")}},{key:"setPenStyles",value:function(e){this.currPenState.setStyles(e),this.chars[this.pos].setPenState(this.currPenState)}}]),e}(),y=function(){function e(){i(this,e),this.rows=[];for(var t=0;t<15;t++)this.rows.push(new p);this.currRow=14,this.nrRollUpRows=null,this.reset()}return a(e,[{key:"reset",value:function(){for(var e=0;e<15;e++)this.rows[e].clear();this.currRow=14}},{key:"equals",value:function(e){for(var t=!0,r=0;r<15;r++)if(!this.rows[r].equals(e.rows[r])){t=!1;break}return t}},{key:"copy",value:function(e){for(var t=0;t<15;t++)this.rows[t].copy(e.rows[t])}},{key:"isEmpty",value:function(){for(var e=!0,t=0;t<15;t++)if(!this.rows[t].isEmpty()){e=!1;break}return e}},{key:"backSpace",value:function(){this.rows[this.currRow].backSpace()}},{key:"clearToEndOfRow",value:function(){this.rows[this.currRow].clearToEndOfRow()}},{key:"insertChar",value:function(e){this.rows[this.currRow].insertChar(e)}},{key:"setPen",value:function(e){this.rows[this.currRow].setPenStyles(e)}},{key:"moveCursor",value:function(e){this.rows[this.currRow].moveCursor(e)}},{key:"setCursor",value:function(e){c.log("INFO","setCursor: "+e),this.rows[this.currRow].setCursor(e)}},{key:"setPAC",value:function(e){c.log("INFO","pacData = "+JSON.stringify(e));var t=e.row-1;if(this.nrRollUpRows&&t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r}},{key:"getTextAndFormat",value:function(){return this.rows}}]),e}(),m=function(){function e(t,r){i(this,e),this.chNr=t,this.outputFilter=r,this.mode=null,this.verbose=0,this.displayedMemory=new y,this.nonDisplayedMemory=new y,this.lastOutputScreen=new y,this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return a(e,[{key:"reset",value:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[14],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null}},{key:"getHandler",value:function(){return this.outputFilter}},{key:"setHandler",value:function(e){this.outputFilter=e}},{key:"setPAC",value:function(e){this.writeScreen.setPAC(e)}},{key:"setBkgData",value:function(e){this.writeScreen.setBkgData(e)}},{key:"setMode",value:function(e){e!==this.mode&&(this.mode=e,c.log("INFO","MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}},{key:"insertChars",value:function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16,i=["white","green","blue","cyan","red","yellow","magenta"];t.foreground=i[r]}c.log("INFO","MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)}},{key:"outputDataUpdate",value:function(){var e=c.time;null!==e&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(e,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))}},{key:"cueSplitAtTime",value:function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}]),e}(),E=function(){function e(t,r,a){i(this,e),this.field=t||1,this.outputs=[r,a],this.channels=[new m(1,r),new m(2,a)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return a(e,[{key:"getHandler",value:function(e){return this.channels[e].getHandler()}},{key:"setHandler",value:function(e,t){this.channels[e].setHandler(t)}},{key:"addData",value:function(e,t){var r,i,a,n=!1;this.lastTime=e,c.setTime(e);for(var s=0;s ("+h([i,a])+")"),r=this.parseCmd(i,a),r||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a)))if(this.currChNr&&this.currChNr>=0){var o=this.channels[this.currChNr-1];o.insertChars(n)}else c.log("WARNING","No channel found yet. TEXT-MODE?");r?this.dataCounters.cmd+=2:n?this.dataCounters.char+=2:(this.dataCounters.other+=2,c.log("WARNING","Couldn't parse cleaned data "+h([i,a])+" orig: "+h([t[s],t[s+1]])))}else this.dataCounters.padding+=2}},{key:"parseCmd",value:function(e,t){var r=null,i=(20===e||28===e)&&32<=t&&t<=47,a=(23===e||31===e)&&33<=t&&t<=35;if(!i&&!a)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,c.log("DEBUG","Repeated command ("+h([e,t])+") is dropped"),!0;r=20===e||23===e?1:2;var n=this.channels[r-1];return 20===e||28===e?32===t?n.ccRCL():33===t?n.ccBS():34===t?n.ccAOF():35===t?n.ccAON():36===t?n.ccDER():37===t?n.ccRU(2):38===t?n.ccRU(3):39===t?n.ccRU(4):40===t?n.ccFON():41===t?n.ccRDC():42===t?n.ccTR():43===t?n.ccRTD():44===t?n.ccEDM():45===t?n.ccCR():46===t?n.ccENM():47===t&&n.ccEOC():n.ccTO(t-32),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"parseMidrow",value:function(e,t){var r=null;if((17===e||25===e)&&32<=t&&t<=47){if(r=17===e?1:2,r!==this.currChNr)return c.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[r-1].ccMIDROW(t),c.log("DEBUG","MIDROW ("+h([e,t])+")"),!0}return!1}},{key:"parsePAC",value:function(e,t){var r=null,i=null,a=(17<=e&&e<=23||25<=e&&e<=31)&&64<=t&&t<=127,n=(16===e||24===e)&&64<=t&&t<=95;if(!a&&!n)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;r=e<=23?1:2,i=64<=t&&t<=95?1===r?o[e]:u[e]:1===r?l[e]:d[e];var s=this.interpretPAC(i,t);return this.channels[r-1].setPAC(s),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"interpretPAC",value:function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1===(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i}},{key:"parseChars",value:function(e,t){var r=null,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),17<=a&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,c.log("INFO","Special char '"+s(n)+"' in channel "+r),i=[n]}else 32<=e&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var o=h(i);c.log("DEBUG","Char codes = "+o.join(",")),this.lastCmdA=null,this.lastCmdB=null}return i}},{key:"parseBackgroundAttributes",value:function(e,t){var r,i,a,n,s=(16===e||24===e)&&32<=t&&t<=47,o=(23===e||31===e)&&45<=t&&t<=47;return!(!s&&!o)&&(r={},16===e||24===e?(i=Math.floor((t-32)/2),r.background=f[i],t%2===1&&(r.background=r.background+"_semi")):45===t?r.background="transparent":(r.foreground="black",47===t&&(r.underline=!0)),a=e<24?1:2,n=this.channels[a-1],n.setBkgData(r),this.lastCmdA=null,this.lastCmdB=null,!0)}},{key:"reset",value:function(){for(var e=0;e=16?l--:l++,navigator.userAgent.match(/Firefox\//)?s.line=f+1:s.line=f>7?f-2:f+1,s.align="left",s.position=Math.max(0,Math.min(100,100*(l/32)+(navigator.userAgent.match(/Firefox\//)?50:0))),e.addCue(s)}}};t.exports=a},{53:53}],49:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r "+t}function n(e){var t=self.console[e];return t?function(){for(var r=arguments.length,i=Array(r),n=0;n1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");E=e,this.hasBeenReset=!0}})),Object.defineProperty(s,"positionAlign",r({},l,{get:function(){return b},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");b=r,this.hasBeenReset=!0}})),Object.defineProperty(s,"size",r({},l,{get:function(){return T},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");T=e,this.hasBeenReset=!0}})),Object.defineProperty(s,"align",r({},l,{get:function(){return _},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");_=r,this.hasBeenReset=!0}})),s.displayState=void 0,o)return s}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var a={"":!0,lr:!0,rl:!0},n={start:!0,middle:!0,end:!0,left:!0,right:!0};return i.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},i}()},{}],53:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new c,this.regionList=[]}function n(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}function s(){this.values=Object.create(null)}function o(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length){var o=s[0],l=s[1];t(o,l)}}}function l(e,t,r){function i(){var t=n(e);if(null===t)throw new Error("Malformed timestamp: "+u);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function a(e,t){var i=new s;o(e,function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",g,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",g,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",g,"end","left","right"])}},/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&h.line===-1&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",g);var n=i.get("position","auto");"auto"===n&&50===h.position&&(n="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=n}function l(){e=e.replace(/^\s+/,"")}var u=e;if(l(),t.startTime=i(),l(),"-->"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '-->'): "+u);e=e.substr(3),l(),t.endTime=i(),l(),a(e,t)}function u(e){return e.replace(//gi,"\n")}Object.defineProperty(r,"__esModule",{value:!0}),r.fixLineBreaks=void 0;var d=e(52),f=i(d),c=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};s.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100))&&(this.set(e,t),!0)}};var h=new f.default(0,0,0),g="middle"===h.align?"middle":"center";a.prototype={parse:function(e){function t(){var e=i.buffer,t=0;for(e=u(e);t")===-1){i.cue.id=a;continue}case"CUE":try{l(a,i.cue,i.regionList)}catch(e){i.cue=null,i.state="BADCUE";continue}i.state="CUETEXT";continue;case"CUETEXT":var d=a.indexOf("-->")!==-1;if(!a||d&&(s=!0)){i.oncue&&i.oncue(i.cue),i.cue=null,i.state="ID";continue}i.cue.text&&(i.cue.text+="\n"),i.cue.text+=a;continue;case"BADCUE":a||(i.state="ID");continue}}}catch(e){"CUETEXT"===i.state&&i.cue&&i.oncue&&i.oncue(i.cue),i.cue=null,i.state="INITIAL"===i.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},r.fixLineBreaks=u,r.default=a},{52:52}],54:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}var a=e(53),n=i(a),s=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;return isNaN(t)||isNaN(r)||isNaN(i)||isNaN(a)?-1:(t+=1e3*r,t+=6e4*i,t+=36e5*a)},o=function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,i=a,a=e[i.prevCC];e.presentationOffset=r},l={parse:function(e,t,r,i,a,l){var u=String.fromCharCode.apply(null,new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",f=0,c=0,h=0,g=[],v=void 0,p=!0,y=new n.default;y.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(c?a=r.ccOffset=t.start:o(r,i,h)),h&&!c&&(a=h+r.ccOffset-r.presentationOffset),e.startTime+=a-c,e.endTime+=a-c,e.text=decodeURIComponent(escape(e.text)),e.endTime>0&&g.push(e)},y.onparsingerror=function(e){v=e},y.onflush=function(){if(v&&l)return void l(v);a(g)},u.forEach(function(e){if(p){if(e.startsWith("X-TIMESTAMP-MAP=")){p=!1,e.substr(16).split(",").forEach(function(e){e.startsWith("LOCAL:")?d=e.substr(6):e.startsWith("MPEGTS:")&&(f=parseInt(e.substr(7)))});try{t=t<0?t+8589934592:t,f-=t,c=s(d)/1e3,h=f/9e4,c===-1&&(v=new Error("Malformed X-TIMESTAMP-MAP: "+e))}catch(t){v=new Error("Malformed X-TIMESTAMP-MAP: "+e)}return}""===e&&(p=!1)}y.parse(e+"\n")}),y.flush()}};t.exports=l},{53:53}],55:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(performance.now(),i.trequest)),4===r){var o=t.status;if(o>=200&&o<300){i.tload=Math.max(i.tfirst,performance.now());var l=void 0,u=void 0;"arraybuffer"===a.responseType?(l=t.response,u=l.byteLength):(l=t.responseText,u=l.length),i.loaded=i.total=u;var d={url:t.responseURL,data:l};this.callbacks.onSuccess(d,i,a)}else i.retry>=s.maxRetry||o>=400&&o<499?(n.logger.error(o+" while loading "+a.url),this.callbacks.onError({code:o,text:t.statusText},a)):(n.logger.warn(o+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,s.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),s.timeout)}},{key:"loadtimeout",value:function(){n.logger.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context)}},{key:"loadprogress",value:function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total);var r=this.callbacks.onProgress;r&&r(t,this.context,null)}}]),e}();r.default=s},{50:50}]},{},[38])(38)}); diff --git a/views/metadata.etlua b/views/metadata.etlua index ba16c7f..7da4939 100644 --- a/views/metadata.etlua +++ b/views/metadata.etlua @@ -1,3 +1,4 @@ +

Edit Metadata

<% if metadata_level == 2 then %> @@ -10,6 +11,26 @@
+
Stream Preview +
+
+ +
+<% if metadata_level == 2 then %> +
+<% if stream.ffmpeg_pull_args then %> +<% if stream_status.data_pulling then %> + +<% else %> + +<% end %> +<% end %> + +
+
+
+
value="<%= stream:get('title') %>"<% end %> <%= metadata_level < 2 and 'readonly' or '' %>/>
@@ -63,7 +84,7 @@ <% if metadata_level == 2 then %>
- +
<% end %>
@@ -112,3 +133,33 @@ function showStreamKey() { showBtn.onclick = showStreamKey; + + diff --git a/views/plain.etlua b/views/plain.etlua index 549ce0e..c65e5cf 100644 --- a/views/plain.etlua +++ b/views/plain.etlua @@ -1 +1 @@ -<% content_for('inner') %> +<% content_for('inner') -%> diff --git a/views/stream.etlua b/views/stream.etlua index 7245fc3..4053db9 100644 --- a/views/stream.etlua +++ b/views/stream.etlua @@ -9,6 +9,13 @@
value="<%= stream.name %>"<% end %> />
+
+ +
+ <% for i, account in pairs(accounts) do %>
@@ -16,6 +23,14 @@
<% end %> +
+
Advanced + +value="<%= stream.ffmpeg_pull_args %>"<% end %>/> +
+
+ +
From 4a9412ab1f814906e0d68af02b79fa98f8daf3eb Mon Sep 17 00:00:00 2001 From: John Regan Date: Sun, 26 Mar 2017 15:07:00 -0500 Subject: [PATCH 2/2] pull doesn't need stream_accounts --- bin/multistreamer.lua | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/multistreamer.lua b/bin/multistreamer.lua index 5ff38dc..2630350 100755 --- a/bin/multistreamer.lua +++ b/bin/multistreamer.lua @@ -200,7 +200,6 @@ elseif(arg[1] == 'pull') then local shell = require'multistreamer.shell' local StreamModel = require'models.stream' local stream = StreamModel:find({uuid = arg[2]}) - local sas = stream:get_streams_accounts() local ffmpeg_args = { '-v',