diff --git a/upload/source/function/function_attachment.php b/upload/source/function/function_attachment.php index c8f65f2a56c978718f942e638576190a6ffe757b..78990d3edc5437d611a1b56538af0782bc97cbd7 100644 --- a/upload/source/function/function_attachment.php +++ b/upload/source/function/function_attachment.php @@ -40,7 +40,7 @@ function attachtype($type, $returnval = 'html') { $typeid = 11; } elseif(preg_match("/flash|^(swf|fla|flv|swi)\t/", $type)) { $typeid = 10; - } elseif(preg_match("/audio|video|^(wav|mid|mp3|m3u|wma|asf|asx|vqf|mpg|mpeg|avi|wmv)\t/", $type)) { + } elseif(preg_match("/audio|video|^(wav|mid|mp3|m3u|wma|asf|asx|vqf|mpg|mpeg|avi|wmv|mov|mp4|m4a|m4v|3gp|ogv|ogg|webm|weba|aac|flac)\t/", $type)) { $typeid = 9; } elseif(preg_match("/real|^(ra|rm|rv)\t/", $type)) { $typeid = 8; diff --git a/upload/source/function/function_blog.php b/upload/source/function/function_blog.php index 3badf5acbcd8addf8016b15817a8a3dfa050466a..3f678b1b6aaac1fde97dbd08f98e3985720ea340 100644 --- a/upload/source/function/function_blog.php +++ b/upload/source/function/function_blog.php @@ -319,46 +319,14 @@ function blog_bbcode($message) { function blog_bbcode_callback_blog_flash_21($matches) { return blog_flash($matches[2], $matches[1]); } -function blog_flash($swf_url, $type='') { + +function blog_flash($url, $type='') { $width = '520'; $height = '390'; - preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.)[^\[\"']+/i", $swf_url, $matches); - $swf_url = $matches[0]; - if ($type == 'media') { - $html = ' - - - - '; - } elseif ($type == 'real') { - $html = ' - - - - - - '; - } elseif ($type == 'mp3') { - $swf_url = urlencode(str_replace('&', '&', $swf_url)); - $html = ' - - - - - - - - '; - - } else { - $extname = substr($swf_url, strrpos($swf_url, '.')+1); - $randomid = 'swf_'.random(3); - if($extname == 'swf') { - $html = ''; - } else { - $html = ''; - } - } - return $html; + preg_match("/((https?|ftp|gopher|news|telnet|rtsp|mms|callto|bctp|thunder|qqdl|synacast){1}:\/\/|www\.)[^\[\"']+/i", $url, $matches); + $url = $matches[0]; + $type = fileext($url); + $randomid = random(3); + return '
'.lang('template', 'parse_av_tips').'
'; } ?> \ No newline at end of file diff --git a/upload/source/function/function_discuzcode.php b/upload/source/function/function_discuzcode.php index 76d6ddf4a42e1065f38c2f4da98e87a2040a36b3..619e549aec091f9fa5548a1d1bc8b8c4c2ed4759 100644 --- a/upload/source/function/function_discuzcode.php +++ b/upload/source/function/function_discuzcode.php @@ -445,21 +445,9 @@ function parseaudio($url, $width = 400) { if(!in_array(strtolower(substr($url, 0, 6)), array('http:/', 'https:', 'ftp://', 'rtsp:/', 'mms://')) && !preg_match('/^static\//', $url) && !preg_match('/^data\//', $url)) { return dhtmlspecialchars($url); } - $ext = fileext($url); - switch($ext) { - case 'mp3': - $randomid = 'mp3_'.random(3); - return ''; - case 'wma': - case 'mid': - case 'wav': - return ''; - case 'ra': - case 'rm': - case 'ram': - $mediaid = 'media_'.random(3); - return ''; - } + $type = fileext($url); + $randomid = random(3); + return '
'.lang('template', 'parse_av_tips').'
'; } function parsemedia($params, $url) { @@ -476,39 +464,21 @@ function parsemedia($params, $url) { return $flv; } if(in_array(count($params), array(3, 4))) { - $type = $params[0]; - $url = htmlspecialchars(str_replace(array('<', '>'), '', str_replace('\\"', '\"', $url))); - switch($type) { - case 'mp3': - case 'wma': - case 'ra': - case 'ram': - case 'wav': - case 'mid': - return parseaudio($url, $width); - case 'rm': - case 'rmvb': - case 'rtsp': - $mediaid = 'media_'.random(3); - return '
'; - case 'flv': - $randomid = 'flv_'.random(3); - return ''; - case 'swf': - $randomid = 'swf_'.random(3); - return ''; - case 'asf': - case 'asx': - case 'wmv': - case 'mms': - case 'avi': - case 'mpg': - case 'mpeg': - return ''; - case 'mov': - return ''; - default: - return ''.$url.''; + $type = fileext($url); + $url = str_replace(array('<', '>'), '', str_replace('\\"', '\"', $url)); + if(in_array($params[0], array('rtsp', 'mms'))) { + $mediaid = 'media_'.random(3); + return $params[0] == 'rtsp' ? '
' : ''; + } + $audio = array('aac', 'flac', 'ogg', 'mp3', 'm4a', 'weba', 'wma', 'mid', 'wav', 'ra', 'ram'); + $video = array('rm', 'rmvb', 'flv', 'swf', 'asf', 'asx', 'wmv', 'avi', 'mpg', 'mpeg', 'mp4', 'm4v', '3gp', 'ogv', 'webm', 'mov'); + if (in_array($type, $audio)) { + return parseaudio($url, $width); + } else if (in_array($type, $video)) { + $randomid = random(3); + return '
'.lang('template', 'parse_av_tips').'
'; + } else { + return ''.$url.''; } } return; @@ -575,7 +545,7 @@ function parseflv($url, $width = 0, $height = 0) { $flv = addslashes($flv); $iframe = addslashes($iframe); $randomid = 'flv_'.random(3); - $enablemobile = $iframe ? 'mobileplayer() ? "" : ' : ''; + $enablemobile = $iframe ? 'detectHtml5Support() ? "" : ' : ''; return ''; } } else { diff --git a/upload/source/function/function_post.php b/upload/source/function/function_post.php index 961d911c0ac9111cf9e360cc69d467e6fb94207b..f516de6e7b9432f74baa4f71e8fbb47a7af37f01 100644 --- a/upload/source/function/function_post.php +++ b/upload/source/function/function_post.php @@ -89,22 +89,33 @@ function parseattachmedia($attach) { $attachurl = 'attach://'.$attach['aid'].'.'.$attach['ext']; switch(strtolower($attach['ext'])) { case 'mp3': + case 'm4a': case 'wma': case 'ra': case 'ram': case 'wav': case 'mid': + case 'ogg': + case 'aac': + case 'flac': + case 'weba': return '[audio]'.$attachurl.'[/audio]'; case 'wmv': case 'rm': case 'rmvb': case 'avi': case 'asf': + case 'asx': case 'mpg': case 'mpeg': case 'mov': case 'flv': case 'swf': + case 'mp4': + case 'm4v': + case '3gp': + case 'ogv': + case 'webm': return '[media='.$attach['ext'].',400,300]'.$attachurl.'[/media]'; default: return; diff --git a/upload/source/language/lang_template.php b/upload/source/language/lang_template.php index 91c18751f08b5285619704e0c70e8115bf385226..210c78192b31a292775965e244bd4d84c0bad9f0 100644 --- a/upload/source/language/lang_template.php +++ b/upload/source/language/lang_template.php @@ -132,6 +132,7 @@ $lang = array ( 'unselected' => '未选', 'imgcropper' => '裁切图片', 'imgcropper_crop' => '裁切', + 'parse_av_tips' => '如果无法播放,请点击此处在新窗口打开', 'preview_footertext' => '版权及页脚信息', 'preview_highlightlink' => '高亮链接', 'preview_lighttext' => '浅色文字', diff --git a/upload/source/module/forum/forum_attachment.php b/upload/source/module/forum/forum_attachment.php index ace6bdd650a61170d1e4d98b169ea2dd19a49313..e2ab564df717ce752fdb1381899a11e9e8b8d53e 100644 --- a/upload/source/module/forum/forum_attachment.php +++ b/upload/source/module/forum/forum_attachment.php @@ -202,12 +202,17 @@ if(!$requestmode) { } -$range = 0; -if($readmod == 4 && !empty($_SERVER['HTTP_RANGE'])) { - list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); +// 解析range的范围, readmod = 1 or 4的时候,支持range +// range传入有可能没有end,这时候要在获取了文件大小后,根据文件大小设置range_end +$range_start = 0; +$range_end = 0; +$has_range_header = false; +if(($readmod == 4 || $readmod == 1) && !empty($_SERVER['HTTP_RANGE'])) { + $has_range_header = true; + list($range_start, $range_end) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE']))); } -if(!$requestmode && !$range && empty($_GET['noupdate'])) { +if(!$requestmode && !$has_range_header && empty($_GET['noupdate'])) { if($_G['setting']['delayviewcount']) { $_G['forum_logfile'] = './data/cache/forum_attachviews_'.intval(getglobal('config/server/id')).'.log'; if(substr(TIMESTAMP, -1) == '0') { @@ -234,7 +239,11 @@ if($attach['remote'] && !$_G['setting']['ftp']['hideurl'] && $isimage) { dheader('location:'.$_G['setting']['ftp']['attachurl'].'forum/'.$attach['attachment']); } +// 获取支持h5媒体播放的mimetype,Safari要有mimetype和range支持才能正确播放 +$mimetype = ext_to_mimetype($attach['filename']); $filesize = !$attach['remote'] ? filesize($filename) : $attach['filesize']; +// 如果range_end没有传入,更新range_end +if ($has_range_header && !$range_end) $range_end = $filesize - 1; $attach['filename'] = '"'.(strtolower(CHARSET) == 'utf-8' && strexists($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? urlencode($attach['filename']) : $attach['filename']).'"'; dheader('Date: '.gmdate('D, d M Y H:i:s', $attach['dateline']).' GMT'); @@ -249,7 +258,7 @@ if($isimage && !empty($_GET['noupdate']) || !empty($_GET['request'])) { if($isimage) { dheader('Content-Type: image'); } else { - dheader('Content-Type: application/octet-stream'); + dheader('Content-Type: ' . $mimetype); } dheader('Content-Length: '.$filesize); @@ -272,17 +281,18 @@ if(!empty($xsendfile)) { } } -if($readmod == 4) { +// readmod = 1 or 4 的时候,支持Range +if (($readmod == 4) || ($readmod == 1)) { dheader('Accept-Ranges: bytes'); - if(!empty($_SERVER['HTTP_RANGE'])) { - $rangesize = ($filesize - $range) > 0 ? ($filesize - $range) : 0; + if($has_range_header) { + $rangesize = ($range_end - $range_start) >= 0 ? ($range_end - $range_start) + 1 : 0; dheader('Content-Length: '.$rangesize); dheader('HTTP/1.1 206 Partial Content'); - dheader('Content-Range: bytes='.$range.'-'.($filesize-1).'/'.($filesize)); + dheader('Content-Range: bytes '.$range_start.'-'.$range_end.'/'.($filesize)); } } -$attach['remote'] ? getremotefile($attach['attachment']) : getlocalfile($filename, $readmod, $range); +$attach['remote'] ? getremotefile($attach['attachment']) : getlocalfile($filename, $readmod, $range_start, $range_end); function getremotefile($file) { global $_G; @@ -301,14 +311,18 @@ function getremotefile($file) { return TRUE; } -function getlocalfile($filename, $readmod = 2, $range = 0) { +function getlocalfile($filename, $readmod = 2, $range_start = 0, $range_end = 0) { if($readmod == 1 || $readmod == 3 || $readmod == 4) { if($fp = @fopen($filename, 'rb')) { - @fseek($fp, $range); - if(function_exists('fpassthru') && ($readmod == 3 || $readmod == 4)) { + @fseek($fp, $range_start); + if(function_exists('fpassthru') && ($readmod == 3 || $readmod == 4) && ($range_end <= 0)) { @fpassthru($fp); } else { - echo @fread($fp, filesize($filename)); + if ($range_end > 0) { + send_file_by_chunk($fp, $range_end - $range_start + 1); + } else { + send_file_by_chunk($fp); + } } } @fclose($fp); @@ -318,6 +332,21 @@ function getlocalfile($filename, $readmod = 2, $range = 0) { @flush(); @ob_flush(); } +function send_file_by_chunk($fp, $limit = PHP_INT_MAX) { + static $CHUNK_SIZE = 64 * 1024; // 每次最大读 64KB + $count = 0; + while (!feof($fp)) { + $size_to_read = $CHUNK_SIZE; + if ($count + $size_to_read > $limit) $size_to_read = $limit - $count; + $buf = fread($fp, $size_to_read); + echo $buf; + flush(); + ob_flush(); + $count += sizeof($buf); + if ($count >= $limit) break; + } +} + function attachment_updateviews($logfile) { $viewlog = $viewarray = array(); $newlog = DISCUZ_ROOT.$logfile.random(6); @@ -338,4 +367,26 @@ function attachment_updateviews($logfile) { } } +function ext_to_mimetype($path) { + $ext = pathinfo($path, PATHINFO_EXTENSION); + $map = array( + 'aac' => 'audio/aac', + 'flac' => 'audio/flac', + 'mp3' => 'audio/mpeg', + 'm4a' => 'audio/mp4', + 'wav' => 'audio/wav', + 'ogg' => 'audio/ogg', + 'weba' => 'audio/webm', + 'flv' => 'video/x-flv', + 'mp4' => 'video/mp4', + 'm4v' => 'video/mp4', + '3gp' => 'video/3gpp', + 'ogv' => 'video/ogg', + 'webm' => 'video/webm' + ); + $mime = $map[$ext]; + if (!$mime) $mime = "application/octet-stream"; + return $mime; +} + ?> \ No newline at end of file diff --git a/upload/static/image/common/img_loader.gif b/upload/static/image/common/img_loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..e630040ee196ac0d183c468bc2014ecfa0a1a8b2 Binary files /dev/null and b/upload/static/image/common/img_loader.gif differ diff --git a/upload/static/js/common.js b/upload/static/js/common.js index 808ca3536d75d0073178de2fe635265bb138bbb1..69788a75dbb7f9ed1c6660368810e06a9f805582 100644 --- a/upload/static/js/common.js +++ b/upload/static/js/common.js @@ -1983,6 +1983,149 @@ function mobileplayer() { } } +function appendstyle(url) { + var link = document.createElement('link'); + link.type = 'text/css'; + link.rel = 'stylesheet'; + link.href = url; + var head = document.getElementsByTagName('head')[0]; + head.appendChild(link); +} + +function detectHtml5Support() { + return document.createElement("Canvas").getContext; +} + +function detectPlayer(randomid, ext, src, width, height) { + var h5_support = new Array('aac', 'flac', 'mp3', 'm4a', 'wav', 'flv', 'mp4', 'm4v', '3gp', 'ogv', 'ogg', 'weba', 'webm'); + var trad_support = new Array('mp3', 'wma', 'mid', 'wav', 'ra', 'ram', 'rm', 'rmvb', 'swf', 'asf', 'asx', 'wmv', 'avi', 'mpg', 'mpeg', 'mov'); + if (in_array(ext, h5_support) && detectHtml5Support()) { + html5Player(randomid, ext, src, width, height); + } else if (in_array(ext, trad_support)) { + tradionalPlayer(randomid, ext, src, width, height); + } else { + $(randomid).style.width = width + 'px'; + $(randomid).style.height = height + 'px'; + } +} + +function tradionalPlayer(randomid, ext, src, width, height) { + switch(ext) { + case 'mp3': + case 'wma': + case 'mid': + case 'wav': + height = 64; + html = ''; + break; + case 'ra': + case 'ram': + height = 32; + html = ''; + break; + case 'rm': + case 'rmvb': + html = '
'; + break; + case 'swf': + html = AC_FL_RunContent('width', width, 'height', height, 'allowNetworking', 'internal', 'allowScriptAccess', 'never', 'src', encodeURI(src), 'quality', 'high', 'bgcolor', '#ffffff', 'wmode', 'transparent', 'allowfullscreen', 'true'); + break; + case 'asf': + case 'asx': + case 'wmv': + case 'avi': + case 'mpg': + case 'mpeg': + html = ''; + break; + case 'mov': + html = ''; + break; + default: + break; + } + $(randomid).style.width = width + 'px'; + $(randomid).style.height = height + 'px'; + $(randomid + '_container').innerHTML = html; +} + +function html5Player(randomid, ext, src, width, height) { + switch (ext) { + case 'aac': + case 'flac': + case 'mp3': + case 'm4a': + case 'wav': + case 'ogg': + height = 66; + appendstyle(STATICURL + 'js/player/aplayer.min.css'); + appendscript(STATICURL + 'js/player/aplayer.min.js'); + html5APlayer(randomid, ext, src, width, height); + break; + case 'flv': + appendscript(STATICURL + 'js/player/flv.min.js'); + case 'mp4': + case 'm4v': + case '3gp': + case 'ogv': + case 'webm': + appendstyle(STATICURL + 'js/player/dplayer.min.css'); + appendscript(STATICURL + 'js/player/dplayer.min.js'); + html5DPlayer(randomid, ext, src, width, height); + break; + default: + break; + } + $(randomid).style.width = width + 'px'; + $(randomid).style.height = height + 'px'; +} + +function html5APlayer(randomid, ext, src, width, height) { + if (JSLOADED[STATICURL + 'js/player/aplayer.min.js']) { + window[randomid] = new APlayer({ + container: $(randomid + '_container'), + mini: false, + autoplay: false, + loop: 'all', + preload: 'none', + volume: 1, + mutex: true, + listFolded: true, + audio: [{ + name: ' ', + artist: ' ', + url: src, + }] + }); + } else { + setTimeout(function () { + html5APlayer(randomid, ext, src, width, height); + }, 50); + } +} + +function html5DPlayer(randomid, ext, src, width, height) { + if (JSLOADED[STATICURL + 'js/player/dplayer.min.js'] && (ext != 'flv' || JSLOADED[STATICURL + 'js/player/flv.min.js'])) { + window[randomid] = new DPlayer({ + container: $(randomid + '_container'), + autoplay: false, + loop: true, + screenshot: false, + hotkey: true, + preload: 'none', + volume: 1, + mutex: true, + listFolded: true, + video: { + url: src, + } + }); + } else { + setTimeout(function () { + html5DPlayer(randomid, ext, src, width, height); + }, 50); + } +} var BROWSER = {}; var USERAGENT = navigator.userAgent.toLowerCase(); diff --git a/upload/static/js/editor.js b/upload/static/js/editor.js index 4feba037f1abd945b7718166fcff362b77a0dc70..7e10eda8dc072d67321dad13d5e16c2d72086d84 100644 --- a/upload/static/js/editor.js +++ b/upload/static/js/editor.js @@ -1290,7 +1290,7 @@ function showEditorMenu(tag, params) { var posque = mediaUrl.lastIndexOf('?'); posque = posque === -1 ? mb_strlen(mediaUrl) : posque; var ext = mediaUrl.lastIndexOf('.') === -1 ? '' : mediaUrl.substring(mediaUrl.lastIndexOf('.') + 1, posque).toLowerCase(); - ext = in_array(ext, ['mp3', 'wma', 'ra', 'rm', 'ram', 'mid', 'asx', 'wmv', 'avi', 'mpg', 'mpeg', 'rmvb', 'asf', 'mov', 'flv', 'swf']) ? ext : 'x'; + ext = in_array(ext, ['mp3', 'wav', 'wma', 'ra', 'rm', 'ram', 'mid', 'asx', 'wmv', 'avi', 'mpg', 'mpeg', 'rmvb', 'asf', 'mov', 'flv', 'swf', 'mp4', 'm4a', 'm4v', '3gp', 'ogv', 'ogg', 'webm', 'weba', 'aac', 'flac']) ? ext : 'x'; if(ext == 'x') { if(/^mms:\/\//.test(mediaUrl)) { ext = 'mms'; diff --git a/upload/static/js/player/aplayer.min.css b/upload/static/js/player/aplayer.min.css new file mode 100644 index 0000000000000000000000000000000000000000..85dbeb4df71284273f3589b91dceb6c1d95d2819 --- /dev/null +++ b/upload/static/js/player/aplayer.min.css @@ -0,0 +1,3 @@ +.aplayer{background:#fff;font-family:Arial,Helvetica,sans-serif;margin:5px;box-shadow:0 2px 2px 0 rgba(0,0,0,.07),0 1px 5px 0 rgba(0,0,0,.1);border-radius:2px;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal;position:relative}.aplayer *{box-sizing:content-box}.aplayer svg{width:100%;height:100%}.aplayer svg circle,.aplayer svg path{fill:#fff}.aplayer.aplayer-withlist .aplayer-info{border-bottom:1px solid #e9e9e9}.aplayer.aplayer-withlist .aplayer-list{display:block}.aplayer.aplayer-withlist .aplayer-icon-order,.aplayer.aplayer-withlist .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu{display:inline}.aplayer.aplayer-withlrc .aplayer-pic{height:90px;width:90px}.aplayer.aplayer-withlrc .aplayer-info{margin-left:90px;height:90px;padding:10px 7px 0}.aplayer.aplayer-withlrc .aplayer-lrc{display:block}.aplayer.aplayer-narrow{width:66px}.aplayer.aplayer-narrow .aplayer-info,.aplayer.aplayer-narrow .aplayer-list{display:none}.aplayer.aplayer-narrow .aplayer-body,.aplayer.aplayer-narrow .aplayer-pic{height:66px;width:66px}.aplayer.aplayer-fixed{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;overflow:visible;max-width:400px;box-shadow:none}.aplayer.aplayer-fixed .aplayer-list{margin-bottom:65px;border:1px solid #eee;border-bottom:none}.aplayer.aplayer-fixed .aplayer-body{position:fixed;bottom:0;left:0;right:0;margin:0;z-index:99;background:#fff;padding-right:18px;transition:all .3s ease;max-width:400px}.aplayer.aplayer-fixed .aplayer-lrc{display:block;position:fixed;bottom:10px;left:0;right:0;margin:0;z-index:98;pointer-events:none;text-shadow:-1px -1px 0 #fff}.aplayer.aplayer-fixed .aplayer-lrc:after,.aplayer.aplayer-fixed .aplayer-lrc:before{display:none}.aplayer.aplayer-fixed .aplayer-info{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:0 0;transform-origin:0 0;transition:all .3s ease;border-bottom:none;border-top:1px solid #e9e9e9}.aplayer.aplayer-fixed .aplayer-info .aplayer-music{width:calc(100% - 105px)}.aplayer.aplayer-fixed .aplayer-miniswitcher{display:block}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-info{display:block;-webkit-transform:scaleX(0);transform:scaleX(0)}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-body{width:66px!important}.aplayer.aplayer-fixed.aplayer-narrow .aplayer-miniswitcher .aplayer-icon{-webkit-transform:rotateY(0);transform:rotateY(0)}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-lrc,.aplayer.aplayer-fixed .aplayer-icon-play{display:inline-block}.aplayer.aplayer-fixed .aplayer-icon-back,.aplayer.aplayer-fixed .aplayer-icon-forward,.aplayer.aplayer-fixed .aplayer-icon-menu,.aplayer.aplayer-fixed .aplayer-icon-play{position:absolute;bottom:27px;width:20px;height:20px}.aplayer.aplayer-fixed .aplayer-icon-back{right:75px}.aplayer.aplayer-fixed .aplayer-icon-play{right:50px}.aplayer.aplayer-fixed .aplayer-icon-forward{right:25px}.aplayer.aplayer-fixed .aplayer-icon-menu{right:0}.aplayer.aplayer-arrow .aplayer-icon-loop,.aplayer.aplayer-arrow .aplayer-icon-order,.aplayer.aplayer-mobile .aplayer-icon-volume-down{display:none}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-loading-icon{display:block}.aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.aplayer .aplayer-body{position:relative}.aplayer .aplayer-icon{width:15px;height:15px;border:none;background-color:transparent;outline:none;cursor:pointer;opacity:.8;vertical-align:middle;padding:0;font-size:12px;margin:0;display:inline-block}.aplayer .aplayer-icon path{transition:all .2s ease-in-out}.aplayer .aplayer-icon-back,.aplayer .aplayer-icon-forward,.aplayer .aplayer-icon-lrc,.aplayer .aplayer-icon-order,.aplayer .aplayer-icon-play{display:none}.aplayer .aplayer-icon-lrc-inactivity svg{opacity:.4}.aplayer .aplayer-icon-forward{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.aplayer .aplayer-lrc-content{display:none}.aplayer .aplayer-pic{position:relative;float:left;height:66px;width:66px;background-size:cover;background-position:50%;transition:all .3s ease;cursor:pointer}.aplayer .aplayer-pic:hover .aplayer-button{opacity:1}.aplayer .aplayer-pic .aplayer-button{position:absolute;border-radius:50%;opacity:.8;text-shadow:0 1px 1px rgba(0,0,0,.2);box-shadow:0 1px 1px rgba(0,0,0,.2);background:rgba(0,0,0,.2);transition:all .1s ease}.aplayer .aplayer-pic .aplayer-button path{fill:#fff}.aplayer .aplayer-pic .aplayer-hide{display:none}.aplayer .aplayer-pic .aplayer-play{width:26px;height:26px;border:2px solid #fff;bottom:50%;right:50%;margin:0 -15px -15px 0}.aplayer .aplayer-pic .aplayer-play svg{position:absolute;top:3px;left:4px;height:20px;width:20px}.aplayer .aplayer-pic .aplayer-pause{width:16px;height:16px;border:2px solid #fff;bottom:4px;right:4px}.aplayer .aplayer-pic .aplayer-pause svg{position:absolute;top:2px;left:2px;height:12px;width:12px}.aplayer .aplayer-info{margin-left:66px;padding:14px 7px 0 10px;height:66px;box-sizing:border-box}.aplayer .aplayer-info .aplayer-music{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;margin:0 0 13px 5px;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:default;padding-bottom:2px;height:20px}.aplayer .aplayer-info .aplayer-music .aplayer-title{font-size:14px}.aplayer .aplayer-info .aplayer-music .aplayer-author{font-size:12px;color:#666}.aplayer .aplayer-info .aplayer-controller{position:relative;display:flex}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap{margin:0 0 0 5px;padding:4px 0;cursor:pointer!important;flex:1}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap:hover .aplayer-bar .aplayer-played .aplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar{position:relative;height:2px;width:100%;background:#cdcdcd}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded{position:absolute;left:0;top:0;bottom:0;background:#aaa;height:2px;transition:all .5s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played{position:absolute;left:0;top:0;bottom:0;height:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:10px;width:10px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;-webkit-transform:scale(0);transform:scale(0)}.aplayer .aplayer-info .aplayer-controller .aplayer-time{position:relative;right:0;bottom:4px;height:17px;color:#999;font-size:11px;padding-left:7px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner{vertical-align:middle}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon{cursor:pointer;transition:all .2s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path{fill:#666}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop{margin-right:2px}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path{fill:#000}.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-menu,.aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-mode{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap{position:relative;display:inline-block;margin-left:3px;cursor:pointer!important}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap:hover .aplayer-volume-bar-wrap{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap{position:absolute;bottom:15px;right:-3px;width:25px;height:0;z-index:99;overflow:hidden;transition:all .2s ease-in-out}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap.aplayer-volume-bar-wrap-active{height:40px}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar{position:absolute;bottom:0;right:10px;width:5px;height:35px;background:#aaa;border-radius:2.5px;overflow:hidden}.aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar .aplayer-volume{position:absolute;bottom:0;right:0;width:5px;transition:all .1s ease}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon{display:none}.aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon svg{position:absolute;-webkit-animation:rotate 1s linear infinite;animation:rotate 1s linear infinite}.aplayer .aplayer-lrc{display:none;position:relative;height:30px;text-align:center;overflow:hidden;margin:-10px 0 7px}.aplayer .aplayer-lrc:before{top:0;height:10%;background:linear-gradient(180deg,#fff 0,hsla(0,0%,100%,0));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffffff",endColorstr="#00ffffff",GradientType=0)}.aplayer .aplayer-lrc:after,.aplayer .aplayer-lrc:before{position:absolute;z-index:1;display:block;overflow:hidden;width:100%;content:" "}.aplayer .aplayer-lrc:after{bottom:0;height:33%;background:linear-gradient(180deg,hsla(0,0%,100%,0) 0,hsla(0,0%,100%,.8));filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#00ffffff",endColorstr="#ccffffff",GradientType=0)}.aplayer .aplayer-lrc p{font-size:12px;color:#666;line-height:16px!important;height:16px!important;padding:0!important;margin:0!important;transition:all .5s ease-out;opacity:.4;overflow:hidden}.aplayer .aplayer-lrc p.aplayer-lrc-current{opacity:1;overflow:visible;height:auto!important;min-height:16px}.aplayer .aplayer-lrc.aplayer-lrc-hide{display:none}.aplayer .aplayer-lrc .aplayer-lrc-contents{width:100%;transition:all .5s ease-out;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:default}.aplayer .aplayer-list{overflow:auto;transition:all .5s ease;will-change:height;display:none;overflow:hidden}.aplayer .aplayer-list.aplayer-list-hide{max-height:0!important}.aplayer .aplayer-list ol{list-style-type:none;margin:0;padding:0;overflow-y:auto}.aplayer .aplayer-list ol::-webkit-scrollbar{width:5px}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb{border-radius:3px;background-color:#eee}.aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover{background-color:#ccc}.aplayer .aplayer-list ol li{position:relative;height:32px;line-height:32px;padding:0 15px;font-size:12px;border-top:1px solid #e9e9e9;cursor:pointer;transition:all .2s ease;overflow:hidden;margin:0}.aplayer .aplayer-list ol li:first-child{border-top:none}.aplayer .aplayer-list ol li:hover{background:#efefef}.aplayer .aplayer-list ol li.aplayer-list-light{background:#e9e9e9}.aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur{display:inline-block}.aplayer .aplayer-list ol li .aplayer-list-cur{display:none;width:3px;height:22px;position:absolute;left:0;top:5px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-index{color:#666;margin-right:12px;cursor:pointer}.aplayer .aplayer-list ol li .aplayer-list-author{color:#666;float:right;cursor:pointer}.aplayer .aplayer-notice{opacity:0;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);font-size:12px;border-radius:4px;padding:5px 10px;transition:all .3s ease-in-out;overflow:hidden;color:#fff;pointer-events:none;background-color:#f4f4f5;color:#909399}.aplayer .aplayer-miniswitcher{display:none;position:absolute;top:0;right:0;bottom:0;height:100%;background:#e6e6e6;width:18px;border-radius:0 2px 2px 0}.aplayer .aplayer-miniswitcher .aplayer-icon{height:100%;width:100%;-webkit-transform:rotateY(180deg);transform:rotateY(180deg);transition:all .3s ease}.aplayer .aplayer-miniswitcher .aplayer-icon path{fill:#666}.aplayer .aplayer-miniswitcher .aplayer-icon:hover path{fill:#000}@-webkit-keyframes aplayer-roll{0%{left:0}to{left:-100%}}@keyframes aplayer-roll{0%{left:0}to{left:-100%}}@-webkit-keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{0%{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}} + +/*# sourceMappingURL=aplayer.min.css.map*/ \ No newline at end of file diff --git a/upload/static/js/player/aplayer.min.css.map b/upload/static/js/player/aplayer.min.css.map new file mode 100644 index 0000000000000000000000000000000000000000..d63257ff0973d6dd46b1fa2d81209c1d395b64a6 --- /dev/null +++ b/upload/static/js/player/aplayer.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/./src/css/index.scss"],"names":[],"mappings":"AAAA,SACE,gBACA,uCACA,WACA,kEACA,kBACA,gBACA,yBACG,sBACC,qBACI,iBACR,mBACA,iBAAmB,CACnB,WACE,sBAAwB,CAC1B,aACE,WACA,WAAa,CACb,sCAEE,SAAW,CACf,wCACE,+BAAiC,CACnC,wCACE,aAAe,CAGjB,wJACE,cAAgB,CAClB,sCACE,YACA,UAAY,CACd,uCACE,iBACA,YACA,kBAAwB,CAC1B,sCACE,aAAe,CACjB,wBACE,UAAY,CAGZ,4EACE,YAAc,CAChB,2EAEE,YACA,UAAY,CAChB,uBACE,eACA,SACA,OACA,QACA,SACA,WACA,iBACA,gBACA,eAAiB,CACjB,qCACE,mBACA,sBACA,kBAAoB,CACtB,qCACE,eACA,SACA,OACA,QACA,SACA,WACA,gBACA,mBACA,wBACA,eAAiB,CACnB,oCACE,cACA,eACA,YACA,OACA,QACA,SACA,WACA,oBACA,4BAA8B,CAC9B,qFACE,YAAc,CAClB,qCACE,4BACQ,oBACR,6BACQ,qBACR,wBACA,mBACA,4BAA8B,CAC9B,oDACE,wBAA0B,CAC9B,6CACE,aAAe,CACjB,oDACE,cACA,4BACQ,mBAAqB,CAC/B,oDACE,oBAAuB,CACzB,0EACE,6BACQ,oBAAsB,CAChC,0KAIE,oBAAsB,CACxB,2KAIE,kBACA,YACA,WACA,WAAa,CACf,0CACE,UAAY,CACd,0CACE,UAAY,CACd,6CACE,UAAY,CACd,0CACE,OAAS,CAGb,uIAEE,YAAc,CAChB,iFACE,aAAe,CACjB,yHACE,2BACQ,kBAAoB,CAC9B,uBACE,iBAAmB,CACrB,uBACE,WACA,YACA,YACA,6BACA,aACA,eACA,WACA,sBACA,UACA,eACA,SACA,oBAAsB,CACtB,4BACE,8BAAgC,CACpC,+IAKE,YAAc,CAChB,0CACE,UAAa,CACf,+BACE,iCACQ,wBAA0B,CACpC,8BACE,YAAc,CAChB,sBACE,kBACA,WACA,YACA,WACA,sBACA,wBACA,wBACA,cAAgB,CAChB,4CACE,SAAW,CACb,sCACE,kBACA,kBACA,WACA,qCACA,oCACA,0BACA,uBAA0B,CAC1B,2CACE,SAAW,CACf,oCACE,YAAc,CAChB,oCACE,WACA,YACA,sBACA,WACA,UACA,sBAAwB,CACxB,wCACE,kBACA,QACA,SACA,YACA,UAAY,CAChB,qCACE,WACA,YACA,sBACA,WACA,SAAW,CACX,yCACE,kBACA,QACA,SACA,YACA,UAAY,CAClB,uBACE,iBACA,wBACA,YACA,qBAAuB,CACvB,sCACE,gBACA,mBACA,uBACA,oBACA,yBACG,sBACC,qBACI,iBACR,eACA,mBACA,WAAa,CACb,qDACE,cAAgB,CAClB,sDACE,eACA,UAAY,CAChB,2CACE,kBACA,YAAc,CACd,6DACE,iBACA,cACA,yBACA,MAAQ,CACR,+GACE,2BACQ,kBAAoB,CAC9B,0EACE,kBACA,WACA,WACA,kBAAoB,CACpB,0FACE,kBACA,OACA,MACA,SACA,gBACA,WACA,uBAA0B,CAC5B,0FACE,kBACA,OACA,MACA,SACA,UAAY,CACZ,yGACE,kBACA,MACA,UACA,gBACA,mBACA,YACA,WACA,kBACA,eACA,+BACA,2BACQ,kBAAoB,CACpC,yDACE,kBACA,QACA,WACA,YACA,WACA,eACA,gBAAkB,CAClB,6EACE,qBAAuB,CACzB,uEACE,eACA,uBAA0B,CAC1B,4EACE,SAAW,CACb,yFACE,gBAAkB,CACpB,kFACE,SAAW,CAKf,yRACE,YAAc,CAClB,gEACE,kBACA,qBACA,gBACA,wBAA2B,CAC3B,+FACE,WAAa,CACf,yFACE,kBACA,YACA,WACA,WACA,SACA,WACA,gBACA,8BAAgC,CAChC,wHACE,WAAa,CACf,6GACE,kBACA,SACA,WACA,UACA,YACA,gBACA,oBACA,eAAiB,CACjB,6HACE,kBACA,SACA,QACA,UACA,uBAA0B,CAClC,iEACE,YAAc,CACd,qEACE,kBACA,4CACQ,mCAAqC,CACrD,sBACE,aACA,kBACA,YACA,kBACA,gBACA,kBAAoB,CACpB,6BAEE,MAKA,WAEA,4DACA,iHAAsH,CACxH,yDAVE,kBAEA,UACA,cACA,gBACA,WAEA,WAAa,CAa6G,4BAR1H,SAKA,WAEA,0EACA,mHAAwH,CAC1H,wBACE,eACA,WACA,2BACA,sBACA,oBACA,mBACA,4BACA,WACA,eAAiB,CACjB,4CACE,UACA,iBACA,sBACA,eAAiB,CACrB,uCACE,YAAc,CAChB,4CACE,WACA,4BACA,yBACG,sBACC,qBACI,iBACR,cAAgB,CACpB,uBACE,cACA,wBACA,mBACA,aACA,eAAiB,CACjB,yCACE,sBAAyB,CAC3B,0BACE,qBACA,SACA,UACA,eAAiB,CACjB,6CACE,SAAW,CACb,mDACE,kBACA,qBAAuB,CACzB,yDACE,qBAAuB,CACzB,6BACE,kBACA,YACA,iBACA,eACA,eACA,6BACA,eACA,wBACA,gBACA,QAAU,CACV,yCACE,eAAiB,CACnB,mCACE,kBAAoB,CACtB,gDACE,kBAAoB,CACpB,kEACE,oBAAsB,CAC1B,+CACE,aACA,UACA,YACA,kBACA,OACA,QACA,cAAgB,CAClB,iDACE,WACA,kBACA,cAAgB,CAClB,kDACE,WACA,YACA,cAAgB,CACxB,yBACE,UACA,kBACA,QACA,SACA,uCACQ,+BACR,eACA,kBACA,iBACA,+BACA,gBACA,WACA,oBACA,yBACA,aAAe,CACjB,+BACE,aACA,kBACA,MACA,QACA,SACA,YACA,mBACA,WACA,yBAA2B,CAC3B,6CACE,YACA,WACA,kCACQ,0BACR,uBAA0B,CAC1B,kDACE,SAAW,CACb,wDACE,SAAW,CAEnB,gCACE,GACE,MAAQ,CACV,GACE,UAAY,CAAE,CAElB,wBACE,GACE,MAAQ,CACV,GACE,UAAY,CAAE,CAElB,0BACE,GACE,4BACQ,mBAAqB,CAC/B,GACE,gCACQ,uBAA0B,CAAE,CAExC,kBACE,GACE,4BACQ,mBAAqB,CAC/B,GACE,gCACQ,uBAA0B,CAAE,C","file":"APlayer.min.css","sourcesContent":[".aplayer {\n background: #fff;\n font-family: Arial, Helvetica, sans-serif;\n margin: 5px;\n box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.07), 0 1px 5px 0 rgba(0, 0, 0, 0.1);\n border-radius: 2px;\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n line-height: initial;\n position: relative; }\n .aplayer * {\n box-sizing: content-box; }\n .aplayer svg {\n width: 100%;\n height: 100%; }\n .aplayer svg path,\n .aplayer svg circle {\n fill: #fff; }\n .aplayer.aplayer-withlist .aplayer-info {\n border-bottom: 1px solid #e9e9e9; }\n .aplayer.aplayer-withlist .aplayer-list {\n display: block; }\n .aplayer.aplayer-withlist .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu {\n display: inline; }\n .aplayer.aplayer-withlist .aplayer-icon-order {\n display: inline; }\n .aplayer.aplayer-withlrc .aplayer-pic {\n height: 90px;\n width: 90px; }\n .aplayer.aplayer-withlrc .aplayer-info {\n margin-left: 90px;\n height: 90px;\n padding: 10px 7px 0 7px; }\n .aplayer.aplayer-withlrc .aplayer-lrc {\n display: block; }\n .aplayer.aplayer-narrow {\n width: 66px; }\n .aplayer.aplayer-narrow .aplayer-info {\n display: none; }\n .aplayer.aplayer-narrow .aplayer-list {\n display: none; }\n .aplayer.aplayer-narrow .aplayer-pic,\n .aplayer.aplayer-narrow .aplayer-body {\n height: 66px;\n width: 66px; }\n .aplayer.aplayer-fixed {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 99;\n overflow: visible;\n max-width: 400px;\n box-shadow: none; }\n .aplayer.aplayer-fixed .aplayer-list {\n margin-bottom: 65px;\n border: 1px solid #eee;\n border-bottom: none; }\n .aplayer.aplayer-fixed .aplayer-body {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 99;\n background: #fff;\n padding-right: 18px;\n transition: all 0.3s ease;\n max-width: 400px; }\n .aplayer.aplayer-fixed .aplayer-lrc {\n display: block;\n position: fixed;\n bottom: 10px;\n left: 0;\n right: 0;\n margin: 0;\n z-index: 98;\n pointer-events: none;\n text-shadow: -1px -1px 0 #fff; }\n .aplayer.aplayer-fixed .aplayer-lrc:before, .aplayer.aplayer-fixed .aplayer-lrc:after {\n display: none; }\n .aplayer.aplayer-fixed .aplayer-info {\n -webkit-transform: scaleX(1);\n transform: scaleX(1);\n -webkit-transform-origin: 0 0;\n transform-origin: 0 0;\n transition: all 0.3s ease;\n border-bottom: none;\n border-top: 1px solid #e9e9e9; }\n .aplayer.aplayer-fixed .aplayer-info .aplayer-music {\n width: calc(100% - 105px); }\n .aplayer.aplayer-fixed .aplayer-miniswitcher {\n display: block; }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-info {\n display: block;\n -webkit-transform: scaleX(0);\n transform: scaleX(0); }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {\n width: 66px !important; }\n .aplayer.aplayer-fixed.aplayer-narrow .aplayer-miniswitcher .aplayer-icon {\n -webkit-transform: rotateY(0);\n transform: rotateY(0); }\n .aplayer.aplayer-fixed .aplayer-icon-back,\n .aplayer.aplayer-fixed .aplayer-icon-play,\n .aplayer.aplayer-fixed .aplayer-icon-forward,\n .aplayer.aplayer-fixed .aplayer-icon-lrc {\n display: inline-block; }\n .aplayer.aplayer-fixed .aplayer-icon-back,\n .aplayer.aplayer-fixed .aplayer-icon-play,\n .aplayer.aplayer-fixed .aplayer-icon-forward,\n .aplayer.aplayer-fixed .aplayer-icon-menu {\n position: absolute;\n bottom: 27px;\n width: 20px;\n height: 20px; }\n .aplayer.aplayer-fixed .aplayer-icon-back {\n right: 75px; }\n .aplayer.aplayer-fixed .aplayer-icon-play {\n right: 50px; }\n .aplayer.aplayer-fixed .aplayer-icon-forward {\n right: 25px; }\n .aplayer.aplayer-fixed .aplayer-icon-menu {\n right: 0; }\n .aplayer.aplayer-mobile .aplayer-icon-volume-down {\n display: none; }\n .aplayer.aplayer-arrow .aplayer-icon-order,\n .aplayer.aplayer-arrow .aplayer-icon-loop {\n display: none; }\n .aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-loading-icon {\n display: block; }\n .aplayer.aplayer-loading .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .aplayer .aplayer-body {\n position: relative; }\n .aplayer .aplayer-icon {\n width: 15px;\n height: 15px;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n opacity: .8;\n vertical-align: middle;\n padding: 0;\n font-size: 12px;\n margin: 0;\n display: inline-block; }\n .aplayer .aplayer-icon path {\n transition: all .2s ease-in-out; }\n .aplayer .aplayer-icon-order,\n .aplayer .aplayer-icon-back,\n .aplayer .aplayer-icon-play,\n .aplayer .aplayer-icon-forward,\n .aplayer .aplayer-icon-lrc {\n display: none; }\n .aplayer .aplayer-icon-lrc-inactivity svg {\n opacity: 0.4; }\n .aplayer .aplayer-icon-forward {\n -webkit-transform: rotate(180deg);\n transform: rotate(180deg); }\n .aplayer .aplayer-lrc-content {\n display: none; }\n .aplayer .aplayer-pic {\n position: relative;\n float: left;\n height: 66px;\n width: 66px;\n background-size: cover;\n background-position: center;\n transition: all 0.3s ease;\n cursor: pointer; }\n .aplayer .aplayer-pic:hover .aplayer-button {\n opacity: 1; }\n .aplayer .aplayer-pic .aplayer-button {\n position: absolute;\n border-radius: 50%;\n opacity: 0.8;\n text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);\n background: rgba(0, 0, 0, 0.2);\n transition: all 0.1s ease; }\n .aplayer .aplayer-pic .aplayer-button path {\n fill: #fff; }\n .aplayer .aplayer-pic .aplayer-hide {\n display: none; }\n .aplayer .aplayer-pic .aplayer-play {\n width: 26px;\n height: 26px;\n border: 2px solid #fff;\n bottom: 50%;\n right: 50%;\n margin: 0 -15px -15px 0; }\n .aplayer .aplayer-pic .aplayer-play svg {\n position: absolute;\n top: 3px;\n left: 4px;\n height: 20px;\n width: 20px; }\n .aplayer .aplayer-pic .aplayer-pause {\n width: 16px;\n height: 16px;\n border: 2px solid #fff;\n bottom: 4px;\n right: 4px; }\n .aplayer .aplayer-pic .aplayer-pause svg {\n position: absolute;\n top: 2px;\n left: 2px;\n height: 12px;\n width: 12px; }\n .aplayer .aplayer-info {\n margin-left: 66px;\n padding: 14px 7px 0 10px;\n height: 66px;\n box-sizing: border-box; }\n .aplayer .aplayer-info .aplayer-music {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n margin: 0 0 13px 5px;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: default;\n padding-bottom: 2px;\n height: 20px; }\n .aplayer .aplayer-info .aplayer-music .aplayer-title {\n font-size: 14px; }\n .aplayer .aplayer-info .aplayer-music .aplayer-author {\n font-size: 12px;\n color: #666; }\n .aplayer .aplayer-info .aplayer-controller {\n position: relative;\n display: flex; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap {\n margin: 0 0 0 5px;\n padding: 4px 0;\n cursor: pointer !important;\n flex: 1; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap:hover .aplayer-bar .aplayer-played .aplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar {\n position: relative;\n height: 2px;\n width: 100%;\n background: #cdcdcd; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: #aaa;\n height: 2px;\n transition: all 0.5s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 2px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-bar-wrap .aplayer-bar .aplayer-played .aplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 10px;\n width: 10px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n -webkit-transform: scale(0);\n transform: scale(0); }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time {\n position: relative;\n right: 0;\n bottom: 4px;\n height: 17px;\n color: #999;\n font-size: 11px;\n padding-left: 7px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-time-inner {\n vertical-align: middle; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon {\n cursor: pointer;\n transition: all 0.2s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path {\n fill: #666; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-loop {\n margin-right: 2px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path {\n fill: #000; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon.aplayer-icon-menu {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-mode {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-time.aplayer-time-narrow .aplayer-icon-menu {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap {\n position: relative;\n display: inline-block;\n margin-left: 3px;\n cursor: pointer !important; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap:hover .aplayer-volume-bar-wrap {\n height: 40px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap {\n position: absolute;\n bottom: 15px;\n right: -3px;\n width: 25px;\n height: 0;\n z-index: 99;\n overflow: hidden;\n transition: all .2s ease-in-out; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap.aplayer-volume-bar-wrap-active {\n height: 40px; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar {\n position: absolute;\n bottom: 0;\n right: 10px;\n width: 5px;\n height: 35px;\n background: #aaa;\n border-radius: 2.5px;\n overflow: hidden; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-volume-wrap .aplayer-volume-bar-wrap .aplayer-volume-bar .aplayer-volume {\n position: absolute;\n bottom: 0;\n right: 0;\n width: 5px;\n transition: all 0.1s ease; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon {\n display: none; }\n .aplayer .aplayer-info .aplayer-controller .aplayer-loading-icon svg {\n position: absolute;\n -webkit-animation: rotate 1s linear infinite;\n animation: rotate 1s linear infinite; }\n .aplayer .aplayer-lrc {\n display: none;\n position: relative;\n height: 30px;\n text-align: center;\n overflow: hidden;\n margin: -10px 0 7px; }\n .aplayer .aplayer-lrc:before {\n position: absolute;\n top: 0;\n z-index: 1;\n display: block;\n overflow: hidden;\n width: 100%;\n height: 10%;\n content: ' ';\n background: linear-gradient(to bottom, white 0%, rgba(255, 255, 255, 0) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#00ffffff',GradientType=0 ); }\n .aplayer .aplayer-lrc:after {\n position: absolute;\n bottom: 0;\n z-index: 1;\n display: block;\n overflow: hidden;\n width: 100%;\n height: 33%;\n content: ' ';\n background: linear-gradient(to bottom, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.8) 100%);\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#ccffffff',GradientType=0 ); }\n .aplayer .aplayer-lrc p {\n font-size: 12px;\n color: #666;\n line-height: 16px !important;\n height: 16px !important;\n padding: 0 !important;\n margin: 0 !important;\n transition: all 0.5s ease-out;\n opacity: 0.4;\n overflow: hidden; }\n .aplayer .aplayer-lrc p.aplayer-lrc-current {\n opacity: 1;\n overflow: visible;\n height: initial !important;\n min-height: 16px; }\n .aplayer .aplayer-lrc.aplayer-lrc-hide {\n display: none; }\n .aplayer .aplayer-lrc .aplayer-lrc-contents {\n width: 100%;\n transition: all 0.5s ease-out;\n -webkit-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: default; }\n .aplayer .aplayer-list {\n overflow: auto;\n transition: all 0.5s ease;\n will-change: height;\n display: none;\n overflow: hidden; }\n .aplayer .aplayer-list.aplayer-list-hide {\n max-height: 0 !important; }\n .aplayer .aplayer-list ol {\n list-style-type: none;\n margin: 0;\n padding: 0;\n overflow-y: auto; }\n .aplayer .aplayer-list ol::-webkit-scrollbar {\n width: 5px; }\n .aplayer .aplayer-list ol::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background-color: #eee; }\n .aplayer .aplayer-list ol::-webkit-scrollbar-thumb:hover {\n background-color: #ccc; }\n .aplayer .aplayer-list ol li {\n position: relative;\n height: 32px;\n line-height: 32px;\n padding: 0 15px;\n font-size: 12px;\n border-top: 1px solid #e9e9e9;\n cursor: pointer;\n transition: all 0.2s ease;\n overflow: hidden;\n margin: 0; }\n .aplayer .aplayer-list ol li:first-child {\n border-top: none; }\n .aplayer .aplayer-list ol li:hover {\n background: #efefef; }\n .aplayer .aplayer-list ol li.aplayer-list-light {\n background: #e9e9e9; }\n .aplayer .aplayer-list ol li.aplayer-list-light .aplayer-list-cur {\n display: inline-block; }\n .aplayer .aplayer-list ol li .aplayer-list-cur {\n display: none;\n width: 3px;\n height: 22px;\n position: absolute;\n left: 0;\n top: 5px;\n cursor: pointer; }\n .aplayer .aplayer-list ol li .aplayer-list-index {\n color: #666;\n margin-right: 12px;\n cursor: pointer; }\n .aplayer .aplayer-list ol li .aplayer-list-author {\n color: #666;\n float: right;\n cursor: pointer; }\n .aplayer .aplayer-notice {\n opacity: 0;\n position: absolute;\n top: 50%;\n left: 50%;\n -webkit-transform: translate(-50%, -50%);\n transform: translate(-50%, -50%);\n font-size: 12px;\n border-radius: 4px;\n padding: 5px 10px;\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n pointer-events: none;\n background-color: #f4f4f5;\n color: #909399; }\n .aplayer .aplayer-miniswitcher {\n display: none;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n height: 100%;\n background: #e6e6e6;\n width: 18px;\n border-radius: 0 2px 2px 0; }\n .aplayer .aplayer-miniswitcher .aplayer-icon {\n height: 100%;\n width: 100%;\n -webkit-transform: rotateY(180deg);\n transform: rotateY(180deg);\n transition: all 0.3s ease; }\n .aplayer .aplayer-miniswitcher .aplayer-icon path {\n fill: #666; }\n .aplayer .aplayer-miniswitcher .aplayer-icon:hover path {\n fill: #000; }\n\n@-webkit-keyframes aplayer-roll {\n 0% {\n left: 0; }\n 100% {\n left: -100%; } }\n\n@keyframes aplayer-roll {\n 0% {\n left: 0; }\n 100% {\n left: -100%; } }\n\n@-webkit-keyframes rotate {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n\n@keyframes rotate {\n 0% {\n -webkit-transform: rotate(0);\n transform: rotate(0); }\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg); } }\n"],"sourceRoot":""} \ No newline at end of file diff --git a/upload/static/js/player/aplayer.min.js b/upload/static/js/player/aplayer.min.js new file mode 100644 index 0000000000000000000000000000000000000000..346234b7e3fa24a18ff08a605ddcd08dbf0c6e6b --- /dev/null +++ b/upload/static/js/player/aplayer.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("APlayer",[],t):"object"==typeof exports?exports.APlayer=t():e.APlayer=t()}(window,function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var a=t[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:i})},n.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=41)}([function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=/mobile/i.test(window.navigator.userAgent),a={secondToTime:function(e){var t=Math.floor(e/3600),n=Math.floor((e-3600*t)/60),i=Math.floor(e-3600*t-60*n);return(t>0?[t,n,i]:[n,i]).map(function(e){return e<10?"0"+e:""+e}).join(":")},getElementViewLeft:function(e){var t=e.offsetLeft,n=e.offsetParent,i=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==n&&n!==e;)t+=n.offsetLeft,n=n.offsetParent;else for(;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return t-i},getElementViewTop:function(e,t){for(var n,i=e.offsetTop,a=e.offsetParent;null!==a;)i+=a.offsetTop,a=a.offsetParent;return n=document.body.scrollTop+document.documentElement.scrollTop,t?i:i-n},isMobile:i,storage:{set:function(e,t){localStorage.setItem(e,t)},get:function(e){return localStorage.getItem(e)}},nameMap:{dragStart:i?"touchstart":"mousedown",dragMove:i?"touchmove":"mousemove",dragEnd:i?"touchend":"mouseup"},randomOrder:function(e){return function(e){for(var t=e.length-1;t>=0;t--){var n=Math.floor(Math.random()*(t+1)),i=e[n];e[n]=e[t],e[t]=i}return e}([].concat(function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t\n ',t+=r(n+s),t+='\n ',t+=r(e.name),t+='\n ',t+=r(e.artist),t+="\n\n"}),t}},function(e,t,n){"use strict";e.exports=n(15)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=g(n(33)),a=g(n(32)),r=g(n(31)),o=g(n(30)),s=g(n(29)),l=g(n(28)),u=g(n(27)),c=g(n(26)),p=g(n(25)),d=g(n(24)),h=g(n(23)),y=g(n(22)),f=g(n(21)),v=g(n(20)),m=g(n(19));function g(e){return e&&e.__esModule?e:{default:e}}var w={play:i.default,pause:a.default,volumeUp:r.default,volumeDown:o.default,volumeOff:s.default,orderRandom:l.default,orderList:u.default,menu:c.default,loopAll:p.default,loopOne:d.default,loopNone:h.default,loading:y.default,right:f.default,skip:v.default,lrc:m.default};t.default=w},function(e,t,n){"use strict";var i,a="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};i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":a(window))&&(i=window)}e.exports=i},function(e,t,n){"use strict";var i,a,r="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};void 0===(a="function"==typeof(i=function(){if("object"===("undefined"==typeof window?"undefined":r(window))&&void 0!==document.querySelectorAll&&void 0!==window.pageYOffset&&void 0!==history.pushState){var e=function(e,t,n,i){return n>i?t:e+(t-e)*((a=n/i)<.5?4*a*a*a:(a-1)*(2*a-2)*(2*a-2)+1);var a},t=function(t,n,i,a){n=n||500;var r=(a=a||window).scrollTop||window.pageYOffset;if("number"==typeof t)var o=parseInt(t);else var o=function(e,t){return"HTML"===e.nodeName?-t:e.getBoundingClientRect().top+t}(t,r);var s=Date.now(),l=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){window.setTimeout(e,15)};!function u(){var c=Date.now()-s;a!==window?a.scrollTop=e(r,o,c,n):window.scroll(0,e(r,o,c,n)),c>n?"function"==typeof i&&i(t):l(u)}()},n=function(e){if(!e.defaultPrevented){e.preventDefault(),location.hash!==this.hash&&window.history.pushState(null,null,this.hash);var n=document.getElementById(this.hash.substring(1));if(!n)return;t(n,500,function(e){location.replace("#"+e.id)})}};return document.addEventListener("DOMContentLoaded",function(){for(var e,t=document.querySelectorAll('a[href^="#"]:not([href="#"])'),i=t.length;e=t[--i];)e.addEventListener("click",n,!1)}),t}})?i.call(t,n,t,e):i)||(e.exports=a)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n1),n=0===this.audios.length;this.player.template.listOl.innerHTML+=(0,a.default)({theme:this.player.options.theme,audio:e,index:this.audios.length+1}),this.audios=this.audios.concat(e),t&&this.audios.length>1&&this.player.container.classList.add("aplayer-withlist"),this.player.randomOrder=r.default.randomOrder(this.audios.length),this.player.template.listCurs=this.player.container.querySelectorAll(".aplayer-list-cur"),this.player.template.listCurs[this.audios.length-1].style.backgroundColor=e.theme||this.player.options.theme,n&&("random"===this.player.options.order?this.switch(this.player.randomOrder[0]):this.switch(0))}},{key:"remove",value:function(e){if(this.player.events.trigger("listremove",{index:e}),this.audios[e])if(this.audios.length>1){var t=this.player.container.querySelectorAll(".aplayer-list li");t[e].remove(),this.audios.splice(e,1),this.player.lrc&&this.player.lrc.remove(e),e===this.index&&(this.audios[e]?this.switch(e):this.switch(e-1)),this.index>e&&this.index--;for(var n=e;nt&&!e.player.audio.paused&&(e.player.container.classList.remove("aplayer-loading"),i=!1),t=n)},100)}},{key:"enable",value:function(e){this["enable"+e+"Checker"]=!0,"fps"===e&&this.initfpsChecker()}},{key:"disable",value:function(e){this["enable"+e+"Checker"]=!1}},{key:"destroy",value:function(){var e=this;this.types.forEach(function(t){e["enable"+t+"Checker"]=!1,e[t+"Checker"]&&clearInterval(e[t+"Checker"])})}}]),e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n1?"one"===e.player.options.loop?(e.player.options.loop="none",e.player.template.loop.innerHTML=r.default.loopNone):"none"===e.player.options.loop?(e.player.options.loop="all",e.player.template.loop.innerHTML=r.default.loopAll):"all"===e.player.options.loop&&(e.player.options.loop="one",e.player.template.loop.innerHTML=r.default.loopOne):"one"===e.player.options.loop||"all"===e.player.options.loop?(e.player.options.loop="none",e.player.template.loop.innerHTML=r.default.loopNone):"none"===e.player.options.loop&&(e.player.options.loop="all",e.player.template.loop.innerHTML=r.default.loopAll)})}},{key:"initMenuButton",value:function(){var e=this;this.player.template.menu.addEventListener("click",function(){e.player.list.toggle()})}},{key:"initMiniSwitcher",value:function(){var e=this;this.player.template.miniSwitcher.addEventListener("click",function(){e.player.setMode("mini"===e.player.mode?"normal":"mini")})}},{key:"initSkipButton",value:function(){var e=this;this.player.template.skipBackButton.addEventListener("click",function(){e.player.skipBack()}),this.player.template.skipForwardButton.addEventListener("click",function(){e.player.skipForward()}),this.player.template.skipPlayButton.addEventListener("click",function(){e.player.toggle()})}},{key:"initLrcButton",value:function(){var e=this;this.player.template.lrcButton.addEventListener("click",function(){e.player.template.lrcButton.classList.contains("aplayer-icon-lrc-inactivity")?(e.player.template.lrcButton.classList.remove("aplayer-icon-lrc-inactivity"),e.player.lrc&&e.player.lrc.show()):(e.player.template.lrcButton.classList.add("aplayer-icon-lrc-inactivity"),e.player.lrc&&e.player.lrc.hide())})}}]),e}();t.default=s},function(e,t,n){var i=n(2);e.exports=function(e){"use strict";e=e||{};var t="",n=i.$each,a=e.lyrics,r=(e.$value,e.$index,i.$escape);return n(a,function(e,n){t+="\n \n"}),t}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:this.player.audio.currentTime;if(this.index>this.current.length-1||e=this.current[this.index+1][0])for(var t=0;t=this.current[t][0]&&(!this.current[t+1]||e=200&&n.status<300||304===n.status?t.parsed[e]=t.parse(n.responseText):(t.player.notice("LRC file request fails: status "+n.status),t.parsed[e]=[["00:00","Not available"]]),t.container.innerHTML=(0,o.default)({lyrics:t.parsed[e]}),t.update(0),t.current=t.parsed[e])};var i=this.player.list.audios[e].lrc;n.open("get",i,!0),n.send(null)}else this.player.list.audios[e].lrc?this.parsed[e]=this.parse(this.player.list.audios[e].lrc):this.parsed[e]=[["00:00","Not available"]];this.container.innerHTML=(0,o.default)({lyrics:this.parsed[e]}),this.update(0),this.current=this.parsed[e]}},{key:"parse",value:function(e){if(e){for(var t=(e=e.replace(/([^\]^\n])\[/g,function(e,t){return t+"\n["})).split("\n"),n=[],i=t.length,a=0;a/g,"").replace(/^\s+|\s+$/g,"");if(r)for(var s=r.length,l=0;l]/;a.$escape=function(e){return function(e){var t=""+e,n=r.exec(t);if(!n)return e;var i="",a=void 0,o=void 0,s=void 0;for(a=n.index,o=0;a\n \n
',t+=s.play,t+='
\n \n \n
\n
\n\n
\n
\n
\n'):(t+='\n
\n
\n
',t+=s.play,t+='
\n
\n
\n
\n No audio\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n ',t+=s.loading,t+='\n \n
\n
\n
\n
\n \n 00:00 / 00:00\n \n \n ',t+=s.skip,t+='\n \n \n ',t+=s.play,t+='\n \n \n ',t+=s.skip,t+='\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n '},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t,n){"use strict";var i,a,r=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function l(e){if(i===setTimeout)return setTimeout(e,0);if((i===o||!i)&&setTimeout)return i=setTimeout,setTimeout(e,0);try{return i(e,0)}catch(t){try{return i.call(null,e,0)}catch(t){return i.call(this,e,0)}}}!function(){try{i="function"==typeof setTimeout?setTimeout:o}catch(e){i=o}try{a="function"==typeof clearTimeout?clearTimeout:s}catch(e){a=s}}();var u,c=[],p=!1,d=-1;function h(){p&&u&&(p=!1,u.length?c=u.concat(c):d=-1,c.length&&y())}function y(){if(!p){var e=l(h);p=!0;for(var t=c.length;t;){for(u=c,c=[];++d1)for(var n=1;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(35),t.setImmediate=setImmediate,t.clearImmediate=clearImmediate},function(e,t,n){"use strict";(function(t){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},i=setTimeout;function a(){}function r(e){if(!(this instanceof r))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],c(e,this)}function o(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,r._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var i;try{i=n(e._value)}catch(e){return void l(t.promise,e)}s(t.promise,i)}else(1===e._state?s:l)(t.promise,e._value)})):e._deferreds.push(t)}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":n(t))||"function"==typeof t)){var i=t.then;if(t instanceof r)return e._state=3,e._value=t,void u(e);if("function"==typeof i)return void c((a=i,o=t,function(){a.apply(o,arguments)}),e)}e._state=1,e._value=t,u(e)}catch(t){l(e,t)}var a,o}function l(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&r._immediateFn(function(){e._handled||r._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;t1&&this.container.classList.add("aplayer-withlist"),r.default.isMobile&&this.container.classList.add("aplayer-mobile"),this.arrow=this.container.offsetWidth<=300,this.arrow&&this.container.classList.add("aplayer-arrow"),this.container=this.options.container,2===this.options.lrcType||!0===this.options.lrcType)for(var n=this.container.getElementsByClassName("aplayer-lrc-content"),i=0;i1?(e.notice("An audio error has occurred, player will skip forward in 2 seconds."),t=setTimeout(function(){e.skipForward(),e.paused||e.play()},2e3)):1===e.list.audios.length&&e.notice("An audio error has occurred.")}),this.events.on("listswitch",function(){t&&clearTimeout(t)}),this.on("ended",function(){"none"===e.options.loop?"list"===e.options.order?e.list.index0&&void 0!==arguments[0]?arguments[0]:this.list.audios[this.list.index].theme||this.options.theme,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.list.index;(!(arguments.length>2&&void 0!==arguments[2])||arguments[2])&&this.list.audios[t]&&(this.list.audios[t].theme=e),this.template.listCurs[t]&&(this.template.listCurs[t].style.backgroundColor=e),t===this.list.index&&(this.template.pic.style.backgroundColor=e,this.template.played.style.background=e,this.template.thumb.style.background=e,this.template.volume.style.background=e)}},{key:"seek",value:function(e){e=Math.max(e,0),e=Math.min(e,this.duration),this.audio.currentTime=e,this.bar.set("played",e/this.duration,"width"),this.template.ptime.innerHTML=r.default.secondToTime(e)}},{key:"setUIPlaying",value:function(){var e=this;if(this.paused&&(this.paused=!1,this.template.button.classList.remove("aplayer-play"),this.template.button.classList.add("aplayer-pause"),this.template.button.innerHTML="",setTimeout(function(){e.template.button.innerHTML=o.default.pause},100),this.template.skipPlayButton.innerHTML=o.default.pause),this.timer.enable("loading"),this.options.mutex)for(var t=0;t=.95?this.template.volumeButton.innerHTML=o.default.volumeUp:this.volume()>0?this.template.volumeButton.innerHTML=o.default.volumeDown:this.template.volumeButton.innerHTML=o.default.volumeOff}},{key:"volume",value:function(e,t){return e=parseFloat(e),isNaN(e)||(e=Math.max(e,0),e=Math.min(e,1),this.bar.set("volume",e,"height"),t||this.storage.set("volume",e),this.audio.volume=e,this.audio.muted&&(this.audio.muted=!1),this.switchVolumeIcon()),this.audio.muted?0:this.audio.volume}},{key:"on",value:function(e,t){this.events.on(e,t)}},{key:"toggle",value:function(){this.template.button.classList.contains("aplayer-play")?this.play():this.template.button.classList.contains("aplayer-pause")&&this.pause()}},{key:"switchAudio",value:function(e){this.list.switch(e)}},{key:"addAudio",value:function(e){this.list.add(e)}},{key:"removeAudio",value:function(e){this.list.remove(e)}},{key:"destroy",value:function(){m.splice(m.indexOf(this),1),this.pause(),this.container.innerHTML="",this.audio.src="",this.timer.destroy(),this.events.trigger("destroy")}},{key:"setMode",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"normal";this.mode=e,"mini"===e?this.container.classList.add("aplayer-narrow"):"normal"===e&&this.container.classList.remove("aplayer-narrow")}},{key:"notice",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2e3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8;this.template.notice.innerHTML=e,this.template.notice.style.opacity=i,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("noticeshow",{text:e}),n&&(this.noticeTime=setTimeout(function(){t.template.notice.style.opacity=0,t.events.trigger("noticehide")},n))}},{key:"prevIndex",value:function(){if(!(this.list.audios.length>1))return 0;if("list"===this.options.order)return this.list.index-1<0?this.list.audios.length-1:this.list.index-1;if("random"===this.options.order){var e=this.randomOrder.indexOf(this.list.index);return 0===e?this.randomOrder[this.randomOrder.length-1]:this.randomOrder[e-1]}}},{key:"nextIndex",value:function(){if(!(this.list.audios.length>1))return 0;if("list"===this.options.order)return(this.list.index+1)%this.list.audios.length;if("random"===this.options.order){var e=this.randomOrder.indexOf(this.list.index);return e===this.randomOrder.length-1?this.randomOrder[0]:this.randomOrder[e+1]}}},{key:"skipBack",value:function(){this.list.switch(this.prevIndex())}},{key:"skipForward",value:function(){this.list.switch(this.nextIndex())}},{key:"duration",get:function(){return isNaN(this.audio.duration)?0:this.audio.duration}}],[{key:"version",get:function(){return"1.10.1"}}]),e}();t.default=g},,function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(40);var i,a=n(38),r=(i=a)&&i.__esModule?i:{default:i};console.log("\n %c APlayer v1.10.1 af84efb %c http://aplayer.js.org \n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;"),t.default=r.default}]).default}); +//# sourceMappingURL=aplayer.min.js.map \ No newline at end of file diff --git a/upload/static/js/player/aplayer.min.js.map b/upload/static/js/player/aplayer.min.js.map new file mode 100644 index 0000000000000000000000000000000000000000..5144f3f0d684ff0be8798323938527fddfb42f69 --- /dev/null +++ b/upload/static/js/player/aplayer.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./src/js/utils.js","webpack://[name]/./src/template/list-item.art","webpack://[name]/./node_modules/art-template/lib/runtime.js","webpack://[name]/./src/js/icons.js","webpack://[name]/(webpack)/buildin/global.js","webpack://[name]/./node_modules/smoothscroll/smoothscroll.js","webpack://[name]/./src/js/list.js","webpack://[name]/./src/js/events.js","webpack://[name]/./src/js/timer.js","webpack://[name]/./src/js/controller.js","webpack://[name]/./src/template/lrc.art","webpack://[name]/./src/js/lrc.js","webpack://[name]/./src/js/storage.js","webpack://[name]/./src/js/bar.js","webpack://[name]/./node_modules/detect-node/index.js","webpack://[name]/./node_modules/art-template/lib/compile/runtime.js","webpack://[name]/./src/template/player.art","webpack://[name]/./src/js/template.js","webpack://[name]/./src/js/options.js","webpack://[name]/./src/assets/lrc.svg","webpack://[name]/./src/assets/skip.svg","webpack://[name]/./src/assets/right.svg","webpack://[name]/./src/assets/loading.svg","webpack://[name]/./src/assets/loop-none.svg","webpack://[name]/./src/assets/loop-one.svg","webpack://[name]/./src/assets/loop-all.svg","webpack://[name]/./src/assets/menu.svg","webpack://[name]/./src/assets/order-list.svg","webpack://[name]/./src/assets/order-random.svg","webpack://[name]/./src/assets/volume-off.svg","webpack://[name]/./src/assets/volume-down.svg","webpack://[name]/./src/assets/volume-up.svg","webpack://[name]/./src/assets/pause.svg","webpack://[name]/./src/assets/play.svg","webpack://[name]/./node_modules/process/browser.js","webpack://[name]/./node_modules/setimmediate/setImmediate.js","webpack://[name]/./node_modules/timers-browserify/main.js","webpack://[name]/./node_modules/promise-polyfill/lib/index.js","webpack://[name]/./src/js/player.js","webpack://[name]/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","r","value","n","__esModule","object","property","prototype","hasOwnProperty","p","s","isMobile","test","navigator","userAgent","utils","secondToTime","second","hour","Math","floor","min","sec","map","num","join","getElementViewLeft","element","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","document","body","scrollLeft","documentElement","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","getElementViewTop","noScrollTop","elementScrollTop","actualTop","offsetTop","scrollTop","storage","set","key","localStorage","setItem","getItem","nameMap","dragStart","dragMove","dragEnd","randomOrder","length","arr","randomIndex","random","itemAtIndex","shuffle","concat","Array","isArray","arr2","from","_toConsumableArray","item","default","$each","$imports","audio","$data","$escape","$value","$index","theme","index","$$out","artist","_play2","_interopRequireDefault","_pause2","_volumeUp2","_volumeDown2","_volumeOff2","_orderRandom2","_orderList2","_menu2","_loopAll2","_loopOne2","_loopNone2","_loading2","_right2","_skip2","_lrc2","obj","Icons","play","pause","volumeUp","volumeDown","volumeOff","orderRandom","orderList","menu","loopAll","loopOne","loopNone","loading","right","skip","lrc","g","_typeof","Symbol","iterator","constructor","this","Function","eval","e","undefined","__WEBPACK_AMD_DEFINE_RESULT__","__WEBPACK_AMD_DEFINE_FACTORY__","querySelectorAll","pageYOffset","history","pushState","position","start","end","elapsed","duration","t","smoothScroll","el","callback","context","parseInt","nodeName","getBoundingClientRect","top","getTop","clock","Date","now","requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","fn","setTimeout","step","scroll","linkHandler","ev","defaultPrevented","preventDefault","location","hash","node","getElementById","substring","replace","id","addEventListener","a","internal","_createClass","defineProperties","target","props","descriptor","writable","Constructor","protoProps","staticProps","_listItem2","_utils2","_smoothscroll2","List","player","instance","TypeError","_classCallCheck","audios","options","bindEvents","_this","template","list","tagName","toUpperCase","parentElement","audioIndex","getElementsByClassName","innerHTML","switch","toggle","events","trigger","classList","remove","listOl","add","contains","show","hide","toString","title","author","cover","pic","type","wasSingle","wasEmpty","container","listCurs","style","backgroundColor","order","splice","textContent","clear","backgroundImage","light","setAudio","update","dtime","src","bar","Events","audioEvents","playerEvents","push","data","indexOf","console","error","Timer","oRequestAnimationFrame","msRequestAnimationFrame","types","init","forEach","_this2","lastPlayPos","currentPlayPos","bufferingDetected","loadingChecker","setInterval","enableloadingChecker","currentTime","paused","initfpsChecker","_this3","clearInterval","_icons2","Controller","initPlayButton","initPlayBar","initOrderButton","initLoopButton","initMenuButton","initVolumeButton","initMiniSwitcher","initSkipButton","initLrcButton","thumbMove","percentage","clientX","changedTouches","barWrap","clientWidth","max","ptime","thumbUp","removeEventListener","seek","disableTimeupdate","volumeButton","muted","switchVolumeIcon","volume","clientY","volumeBar","fixed","clientHeight","volumeBarWrap","_this4","_this5","loop","_this6","_this7","miniSwitcher","setMode","mode","_this8","skipBackButton","skipBack","skipForwardButton","skipForward","skipPlayButton","_this9","lrcButton","lyrics","_lrc","Lrc","async","parsed","lrcWrap","arguments","transform","webkitTransform","getElementsByTagName","xhr","XMLHttpRequest","onreadystatechange","readyState","status","parse","responseText","notice","apiurl","open","send","lrc_s","lyric","match","p1","split","lyricLen","lrcTimes","lrcText","timeLen","j","oneTime","exec","lrcTime","filter","sort","b","_utils","Storage","storageName","JSON","stringify","Bar","elements","played","loaded","direction","parseFloat","global","process","detectNode","runtime","create","ESCAPE_REG","content","html","regexResult","result","lastIndex","char","charCodeAt","xmlEscape","len","_i","getObject","listFolded","listMaxHeight","include","icons","_player2","Template","querySelector","info","time","button","thumb","defaultOption","mini","narrow","autoplay","mutex","lrcType","showlrc","preload","listmaxheight","music","defaultKey","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","run","marker","runClearTimeout","Item","array","noop","nextTick","args","apply","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","setImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","getPrototypeOf","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","event","port2","createElement","script","removeChild","appendChild","source","slice","attachEvent","task","clearImmediate","self","Timeout","clearFn","_id","_clearFn","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","setTimeoutFunc","Promise","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","reject","promise","resolve","newValue","then","finale","thisArg","_unhandledRejectionFn","done","reason","ex","prom","all","remaining","res","val","race","values","err","warn","_promisePolyfill2","_options2","_template2","_bar2","_storage2","_controller2","_timer2","_events2","_list2","instances","APlayer","playedPromise","arrow","offsetWidth","lrcEle","width","display","controller","timer","initAudio","_loop","setUIPlaying","setUIPaused","buffered","skipTime","nextIndex","hls","destroy","customAudioType","url","Hls","isSupported","loadSource","attachMedia","canPlayType","color","background","enable","playPromise","catch","disable","nostorage","isNaN","text","opacity","noticeTime","prevIndex","_player","log"],"mappings":"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","file":"APlayer.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"APlayer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"APlayer\"] = factory();\n\telse\n\t\troot[\"APlayer\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 41);\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\nvar isMobile = /mobile/i.test(window.navigator.userAgent);\nvar utils = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var hour = Math.floor(second / 3600);\n var min = Math.floor((second - hour * 3600) / 60);\n var sec = Math.floor(second - hour * 3600 - min * 60);\n return (hour > 0 ? [\n hour,\n min,\n sec\n ] : [\n min,\n sec\n ]).map(add0).join(':');\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getElementViewTop: function getElementViewTop(element, noScrollTop) {\n var actualTop = element.offsetTop;\n var current = element.offsetParent;\n var elementScrollTop = 0;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return noScrollTop ? actualTop : actualTop - elementScrollTop;\n },\n isMobile: isMobile,\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n },\n nameMap: {\n dragStart: isMobile ? 'touchstart' : 'mousedown',\n dragMove: isMobile ? 'touchmove' : 'mousemove',\n dragEnd: isMobile ? 'touchend' : 'mouseup'\n },\n randomOrder: function randomOrder(length) {\n function shuffle(arr) {\n for (var i = arr.length - 1; i >= 0; i--) {\n var randomIndex = Math.floor(Math.random() * (i + 1));\n var itemAtIndex = arr[randomIndex];\n arr[randomIndex] = arr[i];\n arr[i] = itemAtIndex;\n }\n return arr;\n }\n return shuffle([].concat(_toConsumableArray(Array(length))).map(function (item, i) {\n return i;\n }));\n }\n};\nexports.default = utils;","{{each audio}}\n
  • \n \n {{ $index + index }}\n {{ $value.name }}\n {{ $value.artist }}\n
  • \n{{/each}}","'use strict';\nmodule.exports = require('./compile/runtime');","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _play = require('../assets/play.svg');\nvar _play2 = _interopRequireDefault(_play);\nvar _pause = require('../assets/pause.svg');\nvar _pause2 = _interopRequireDefault(_pause);\nvar _volumeUp = require('../assets/volume-up.svg');\nvar _volumeUp2 = _interopRequireDefault(_volumeUp);\nvar _volumeDown = require('../assets/volume-down.svg');\nvar _volumeDown2 = _interopRequireDefault(_volumeDown);\nvar _volumeOff = require('../assets/volume-off.svg');\nvar _volumeOff2 = _interopRequireDefault(_volumeOff);\nvar _orderRandom = require('../assets/order-random.svg');\nvar _orderRandom2 = _interopRequireDefault(_orderRandom);\nvar _orderList = require('../assets/order-list.svg');\nvar _orderList2 = _interopRequireDefault(_orderList);\nvar _menu = require('../assets/menu.svg');\nvar _menu2 = _interopRequireDefault(_menu);\nvar _loopAll = require('../assets/loop-all.svg');\nvar _loopAll2 = _interopRequireDefault(_loopAll);\nvar _loopOne = require('../assets/loop-one.svg');\nvar _loopOne2 = _interopRequireDefault(_loopOne);\nvar _loopNone = require('../assets/loop-none.svg');\nvar _loopNone2 = _interopRequireDefault(_loopNone);\nvar _loading = require('../assets/loading.svg');\nvar _loading2 = _interopRequireDefault(_loading);\nvar _right = require('../assets/right.svg');\nvar _right2 = _interopRequireDefault(_right);\nvar _skip = require('../assets/skip.svg');\nvar _skip2 = _interopRequireDefault(_skip);\nvar _lrc = require('../assets/lrc.svg');\nvar _lrc2 = _interopRequireDefault(_lrc);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nvar Icons = {\n play: _play2.default,\n pause: _pause2.default,\n volumeUp: _volumeUp2.default,\n volumeDown: _volumeDown2.default,\n volumeOff: _volumeOff2.default,\n orderRandom: _orderRandom2.default,\n orderList: _orderList2.default,\n menu: _menu2.default,\n loopAll: _loopAll2.default,\n loopOne: _loopOne2.default,\n loopNone: _loopNone2.default,\n loading: _loading2.default,\n right: _right2.default,\n skip: _skip2.default,\n lrc: _lrc2.default\n};\nexports.default = Icons;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar g;\ng = function () {\n return this;\n}();\ntry {\n g = g || Function('return this')() || (1, eval)('this');\n} catch (e) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object')\n g = window;\n}\nmodule.exports = g;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\n(function (root, smoothScroll) {\n 'use strict';\n if (typeof define === 'function' && define.amd) {\n define(smoothScroll);\n } else if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) === 'object' && (typeof module === 'undefined' ? 'undefined' : _typeof(module)) === 'object') {\n module.exports = smoothScroll();\n } else {\n root.smoothScroll = smoothScroll();\n }\n}(undefined, function () {\n 'use strict';\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object')\n return;\n if (document.querySelectorAll === void 0 || window.pageYOffset === void 0 || history.pushState === void 0) {\n return;\n }\n var getTop = function getTop(element, start) {\n if (element.nodeName === 'HTML')\n return -start;\n return element.getBoundingClientRect().top + start;\n };\n var easeInOutCubic = function easeInOutCubic(t) {\n return t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n };\n var position = function position(start, end, elapsed, duration) {\n if (elapsed > duration)\n return end;\n return start + (end - start) * easeInOutCubic(elapsed / duration);\n };\n var smoothScroll = function smoothScroll(el, duration, callback, context) {\n duration = duration || 500;\n context = context || window;\n var start = context.scrollTop || window.pageYOffset;\n if (typeof el === 'number') {\n var end = parseInt(el);\n } else {\n var end = getTop(el, start);\n }\n var clock = Date.now();\n var requestAnimationFrame = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (fn) {\n window.setTimeout(fn, 15);\n };\n var step = function step() {\n var elapsed = Date.now() - clock;\n if (context !== window) {\n context.scrollTop = position(start, end, elapsed, duration);\n } else {\n window.scroll(0, position(start, end, elapsed, duration));\n }\n if (elapsed > duration) {\n if (typeof callback === 'function') {\n callback(el);\n }\n } else {\n requestAnimationFrame(step);\n }\n };\n step();\n };\n var linkHandler = function linkHandler(ev) {\n if (!ev.defaultPrevented) {\n ev.preventDefault();\n if (location.hash !== this.hash)\n window.history.pushState(null, null, this.hash);\n var node = document.getElementById(this.hash.substring(1));\n if (!node)\n return;\n smoothScroll(node, 500, function (el) {\n location.replace('#' + el.id);\n });\n }\n };\n document.addEventListener('DOMContentLoaded', function () {\n var internal = document.querySelectorAll('a[href^=\"#\"]:not([href=\"#\"])'), a;\n for (var i = internal.length; a = internal[--i];) {\n a.addEventListener('click', linkHandler, false);\n }\n });\n return smoothScroll;\n}));","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _listItem = require('../template/list-item.art');\nvar _listItem2 = _interopRequireDefault(_listItem);\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _smoothscroll = require('smoothscroll');\nvar _smoothscroll2 = _interopRequireDefault(_smoothscroll);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar List = function () {\n function List(player) {\n _classCallCheck(this, List);\n this.player = player;\n this.index = 0;\n this.audios = this.player.options.audio;\n this.bindEvents();\n }\n _createClass(List, [\n {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this = this;\n this.player.template.list.addEventListener('click', function (e) {\n var target = void 0;\n if (e.target.tagName.toUpperCase() === 'LI') {\n target = e.target;\n } else {\n target = e.target.parentElement;\n }\n var audioIndex = parseInt(target.getElementsByClassName('aplayer-list-index')[0].innerHTML) - 1;\n if (audioIndex !== _this.index) {\n _this.switch(audioIndex);\n _this.player.play();\n } else {\n _this.player.toggle();\n }\n });\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.events.trigger('listshow');\n this.player.template.list.classList.remove('aplayer-list-hide');\n this.player.template.listOl.scrollTop = this.index * 33;\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.events.trigger('listhide');\n this.player.template.list.classList.add('aplayer-list-hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (!this.player.template.list.classList.contains('aplayer-list-hide')) {\n this.hide();\n } else {\n this.show();\n }\n }\n },\n {\n key: 'add',\n value: function add(audios) {\n this.player.events.trigger('listadd', { audios: audios });\n if (Object.prototype.toString.call(audios) !== '[object Array]') {\n audios = [audios];\n }\n audios.map(function (item) {\n item.name = item.name || item.title || 'Audio name';\n item.artist = item.artist || item.author || 'Audio artist';\n item.cover = item.cover || item.pic;\n item.type = item.type || 'normal';\n return item;\n });\n var wasSingle = !(this.audios.length > 1);\n var wasEmpty = this.audios.length === 0;\n this.player.template.listOl.innerHTML += (0, _listItem2.default)({\n theme: this.player.options.theme,\n audio: audios,\n index: this.audios.length + 1\n });\n this.audios = this.audios.concat(audios);\n if (wasSingle && this.audios.length > 1) {\n this.player.container.classList.add('aplayer-withlist');\n }\n this.player.randomOrder = _utils2.default.randomOrder(this.audios.length);\n this.player.template.listCurs = this.player.container.querySelectorAll('.aplayer-list-cur');\n this.player.template.listCurs[this.audios.length - 1].style.backgroundColor = audios.theme || this.player.options.theme;\n if (wasEmpty) {\n if (this.player.options.order === 'random') {\n this.switch(this.player.randomOrder[0]);\n } else {\n this.switch(0);\n }\n }\n }\n },\n {\n key: 'remove',\n value: function remove(index) {\n this.player.events.trigger('listremove', { index: index });\n if (this.audios[index]) {\n if (this.audios.length > 1) {\n var list = this.player.container.querySelectorAll('.aplayer-list li');\n list[index].remove();\n this.audios.splice(index, 1);\n this.player.lrc && this.player.lrc.remove(index);\n if (index === this.index) {\n if (this.audios[index]) {\n this.switch(index);\n } else {\n this.switch(index - 1);\n }\n }\n if (this.index > index) {\n this.index--;\n }\n for (var i = index; i < list.length; i++) {\n list[i].getElementsByClassName('aplayer-list-index')[0].textContent = i;\n }\n if (this.audios.length === 1) {\n this.player.container.classList.remove('aplayer-withlist');\n }\n this.player.template.listCurs = this.player.container.querySelectorAll('.aplayer-list-cur');\n } else {\n this.clear();\n }\n }\n }\n },\n {\n key: 'switch',\n value: function _switch(index) {\n this.player.events.trigger('listswitch', { index: index });\n if (typeof index !== 'undefined' && this.audios[index]) {\n this.index = index;\n var audio = this.audios[this.index];\n this.player.template.pic.style.backgroundImage = audio.cover ? 'url(\\'' + audio.cover + '\\')' : '';\n this.player.theme(this.audios[this.index].theme || this.player.options.theme, this.index, false);\n this.player.template.title.innerHTML = audio.name;\n this.player.template.author.innerHTML = audio.artist ? ' - ' + audio.artist : '';\n var light = this.player.container.getElementsByClassName('aplayer-list-light')[0];\n if (light) {\n light.classList.remove('aplayer-list-light');\n }\n this.player.container.querySelectorAll('.aplayer-list li')[this.index].classList.add('aplayer-list-light');\n (0, _smoothscroll2.default)(this.index * 33, 500, null, this.player.template.listOl);\n this.player.setAudio(audio);\n this.player.lrc && this.player.lrc.switch(this.index);\n this.player.lrc && this.player.lrc.update(0);\n if (this.player.duration !== 1) {\n this.player.template.dtime.innerHTML = _utils2.default.secondToTime(this.player.duration);\n }\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.player.events.trigger('listclear');\n this.index = 0;\n this.player.container.classList.remove('aplayer-withlist');\n this.player.pause();\n this.audios = [];\n this.player.lrc && this.player.lrc.clear();\n this.player.audio.src = '';\n this.player.template.listOl.innerHTML = '';\n this.player.template.pic.style.backgroundImage = '';\n this.player.theme(this.player.options.theme, this.index, false);\n this.player.template.title.innerHTML = 'No audio';\n this.player.template.author.innerHTML = '';\n this.player.bar.set('loaded', 0, 'width');\n this.player.template.dtime.innerHTML = _utils2.default.secondToTime(0);\n }\n }\n ]);\n return List;\n}();\nexports.default = List;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.audioEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'destroy',\n 'listshow',\n 'listhide',\n 'listadd',\n 'listremove',\n 'listswitch',\n 'listclear',\n 'noticeshow',\n 'noticehide',\n 'lrcshow',\n 'lrchide'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, data) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](data);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.audioEvents.indexOf(name) !== -1) {\n return 'audio';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nexports.default = Events;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Timer = function () {\n function Timer(player) {\n _classCallCheck(this, Timer);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = ['loading'];\n this.init();\n }\n _createClass(Timer, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.types.forEach(function (item) {\n _this['init' + item + 'Checker']();\n });\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this2 = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this2.enableloadingChecker) {\n currentPlayPos = _this2.player.audio.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this2.player.audio.paused) {\n _this2.player.container.classList.add('aplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this2.player.audio.paused) {\n _this2.player.container.classList.remove('aplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n this['enable' + type + 'Checker'] = true;\n if (type === 'fps') {\n this.initfpsChecker();\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n this['enable' + type + 'Checker'] = false;\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n var _this3 = this;\n this.types.forEach(function (item) {\n _this3['enable' + item + 'Checker'] = false;\n _this3[item + 'Checker'] && clearInterval(_this3[item + 'Checker']);\n });\n }\n }\n ]);\n return Timer;\n}();\nexports.default = Timer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Controller = function () {\n function Controller(player) {\n _classCallCheck(this, Controller);\n this.player = player;\n this.initPlayButton();\n this.initPlayBar();\n this.initOrderButton();\n this.initLoopButton();\n this.initMenuButton();\n if (!_utils2.default.isMobile) {\n this.initVolumeButton();\n }\n this.initMiniSwitcher();\n this.initSkipButton();\n this.initLrcButton();\n }\n _createClass(Controller, [\n {\n key: 'initPlayButton',\n value: function initPlayButton() {\n var _this = this;\n this.player.template.pic.addEventListener('click', function () {\n _this.player.toggle();\n });\n }\n },\n {\n key: 'initPlayBar',\n value: function initPlayBar() {\n var _this2 = this;\n var thumbMove = function thumbMove(e) {\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this2.player.template.barWrap)) / _this2.player.template.barWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this2.player.bar.set('played', percentage, 'width');\n _this2.player.lrc && _this2.player.lrc.update(percentage * _this2.player.duration);\n _this2.player.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this2.player.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this2.player.template.barWrap)) / _this2.player.template.barWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this2.player.bar.set('played', percentage, 'width');\n _this2.player.seek(_this2.player.bar.get('played', 'width') * _this2.player.duration);\n _this2.player.disableTimeupdate = false;\n };\n this.player.template.barWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n _this2.player.disableTimeupdate = true;\n document.addEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n });\n }\n },\n {\n key: 'initVolumeButton',\n value: function initVolumeButton() {\n var _this3 = this;\n this.player.template.volumeButton.addEventListener('click', function () {\n if (_this3.player.audio.muted) {\n _this3.player.audio.muted = false;\n _this3.player.switchVolumeIcon();\n _this3.player.bar.set('volume', _this3.player.volume(), 'height');\n } else {\n _this3.player.audio.muted = true;\n _this3.player.switchVolumeIcon();\n _this3.player.bar.set('volume', 0, 'height');\n }\n });\n var thumbMove = function thumbMove(e) {\n var percentage = 1 - ((e.clientY || e.changedTouches[0].clientY) - _utils2.default.getElementViewTop(_this3.player.template.volumeBar, _this3.player.options.fixed)) / _this3.player.template.volumeBar.clientHeight;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this3.player.volume(percentage);\n };\n var thumbUp = function thumbUp(e) {\n _this3.player.template.volumeBarWrap.classList.remove('aplayer-volume-bar-wrap-active');\n document.removeEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n var percentage = 1 - ((e.clientY || e.changedTouches[0].clientY) - _utils2.default.getElementViewTop(_this3.player.template.volumeBar, _this3.player.options.fixed)) / _this3.player.template.volumeBar.clientHeight;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this3.player.volume(percentage);\n };\n this.player.template.volumeBarWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n _this3.player.template.volumeBarWrap.classList.add('aplayer-volume-bar-wrap-active');\n document.addEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n });\n }\n },\n {\n key: 'initOrderButton',\n value: function initOrderButton() {\n var _this4 = this;\n this.player.template.order.addEventListener('click', function () {\n if (_this4.player.options.order === 'list') {\n _this4.player.options.order = 'random';\n _this4.player.template.order.innerHTML = _icons2.default.orderRandom;\n } else if (_this4.player.options.order === 'random') {\n _this4.player.options.order = 'list';\n _this4.player.template.order.innerHTML = _icons2.default.orderList;\n }\n });\n }\n },\n {\n key: 'initLoopButton',\n value: function initLoopButton() {\n var _this5 = this;\n this.player.template.loop.addEventListener('click', function () {\n if (_this5.player.list.audios.length > 1) {\n if (_this5.player.options.loop === 'one') {\n _this5.player.options.loop = 'none';\n _this5.player.template.loop.innerHTML = _icons2.default.loopNone;\n } else if (_this5.player.options.loop === 'none') {\n _this5.player.options.loop = 'all';\n _this5.player.template.loop.innerHTML = _icons2.default.loopAll;\n } else if (_this5.player.options.loop === 'all') {\n _this5.player.options.loop = 'one';\n _this5.player.template.loop.innerHTML = _icons2.default.loopOne;\n }\n } else {\n if (_this5.player.options.loop === 'one' || _this5.player.options.loop === 'all') {\n _this5.player.options.loop = 'none';\n _this5.player.template.loop.innerHTML = _icons2.default.loopNone;\n } else if (_this5.player.options.loop === 'none') {\n _this5.player.options.loop = 'all';\n _this5.player.template.loop.innerHTML = _icons2.default.loopAll;\n }\n }\n });\n }\n },\n {\n key: 'initMenuButton',\n value: function initMenuButton() {\n var _this6 = this;\n this.player.template.menu.addEventListener('click', function () {\n _this6.player.list.toggle();\n });\n }\n },\n {\n key: 'initMiniSwitcher',\n value: function initMiniSwitcher() {\n var _this7 = this;\n this.player.template.miniSwitcher.addEventListener('click', function () {\n _this7.player.setMode(_this7.player.mode === 'mini' ? 'normal' : 'mini');\n });\n }\n },\n {\n key: 'initSkipButton',\n value: function initSkipButton() {\n var _this8 = this;\n this.player.template.skipBackButton.addEventListener('click', function () {\n _this8.player.skipBack();\n });\n this.player.template.skipForwardButton.addEventListener('click', function () {\n _this8.player.skipForward();\n });\n this.player.template.skipPlayButton.addEventListener('click', function () {\n _this8.player.toggle();\n });\n }\n },\n {\n key: 'initLrcButton',\n value: function initLrcButton() {\n var _this9 = this;\n this.player.template.lrcButton.addEventListener('click', function () {\n if (_this9.player.template.lrcButton.classList.contains('aplayer-icon-lrc-inactivity')) {\n _this9.player.template.lrcButton.classList.remove('aplayer-icon-lrc-inactivity');\n _this9.player.lrc && _this9.player.lrc.show();\n } else {\n _this9.player.template.lrcButton.classList.add('aplayer-icon-lrc-inactivity');\n _this9.player.lrc && _this9.player.lrc.hide();\n }\n });\n }\n }\n ]);\n return Controller;\n}();\nexports.default = Controller;","{{each lyrics}}\n {{$value[1]}}

    \n{{/each}}","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _lrc = require('../template/lrc.art');\nvar _lrc2 = _interopRequireDefault(_lrc);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Lrc = function () {\n function Lrc(options) {\n _classCallCheck(this, Lrc);\n this.container = options.container;\n this.async = options.async;\n this.player = options.player;\n this.parsed = [];\n this.index = 0;\n this.current = [];\n }\n _createClass(Lrc, [\n {\n key: 'show',\n value: function show() {\n this.player.events.trigger('lrcshow');\n this.player.template.lrcWrap.classList.remove('aplayer-lrc-hide');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.events.trigger('lrchide');\n this.player.template.lrcWrap.classList.add('aplayer-lrc-hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.player.template.lrcWrap.classList.contains('aplayer-lrc-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n },\n {\n key: 'update',\n value: function update() {\n var currentTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.player.audio.currentTime;\n if (this.index > this.current.length - 1 || currentTime < this.current[this.index][0] || !this.current[this.index + 1] || currentTime >= this.current[this.index + 1][0]) {\n for (var i = 0; i < this.current.length; i++) {\n if (currentTime >= this.current[i][0] && (!this.current[i + 1] || currentTime < this.current[i + 1][0])) {\n this.index = i;\n this.container.style.transform = 'translateY(' + -this.index * 16 + 'px)';\n this.container.style.webkitTransform = 'translateY(' + -this.index * 16 + 'px)';\n this.container.getElementsByClassName('aplayer-lrc-current')[0].classList.remove('aplayer-lrc-current');\n this.container.getElementsByTagName('p')[i].classList.add('aplayer-lrc-current');\n }\n }\n }\n }\n },\n {\n key: 'switch',\n value: function _switch(index) {\n var _this = this;\n if (!this.parsed[index]) {\n if (!this.async) {\n if (this.player.list.audios[index].lrc) {\n this.parsed[index] = this.parse(this.player.list.audios[index].lrc);\n } else {\n this.parsed[index] = [[\n '00:00',\n 'Not available'\n ]];\n }\n } else {\n this.parsed[index] = [[\n '00:00',\n 'Loading'\n ]];\n var xhr = new XMLHttpRequest();\n xhr.onreadystatechange = function () {\n if (index === _this.player.list.index && xhr.readyState === 4) {\n if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n _this.parsed[index] = _this.parse(xhr.responseText);\n } else {\n _this.player.notice('LRC file request fails: status ' + xhr.status);\n _this.parsed[index] = [[\n '00:00',\n 'Not available'\n ]];\n }\n _this.container.innerHTML = (0, _lrc2.default)({ lyrics: _this.parsed[index] });\n _this.update(0);\n _this.current = _this.parsed[index];\n }\n };\n var apiurl = this.player.list.audios[index].lrc;\n xhr.open('get', apiurl, true);\n xhr.send(null);\n }\n }\n this.container.innerHTML = (0, _lrc2.default)({ lyrics: this.parsed[index] });\n this.update(0);\n this.current = this.parsed[index];\n }\n },\n {\n key: 'parse',\n value: function parse(lrc_s) {\n if (lrc_s) {\n lrc_s = lrc_s.replace(/([^\\]^\\n])\\[/g, function (match, p1) {\n return p1 + '\\n[';\n });\n var lyric = lrc_s.split('\\n');\n var lrc = [];\n var lyricLen = lyric.length;\n for (var i = 0; i < lyricLen; i++) {\n var lrcTimes = lyric[i].match(/\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/g);\n var lrcText = lyric[i].replace(/.*\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/g, '').replace(/<(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?>/g, '').replace(/^\\s+|\\s+$/g, '');\n if (lrcTimes) {\n var timeLen = lrcTimes.length;\n for (var j = 0; j < timeLen; j++) {\n var oneTime = /\\[(\\d{2}):(\\d{2})(\\.(\\d{2,3}))?]/.exec(lrcTimes[j]);\n var min2sec = oneTime[1] * 60;\n var sec2sec = parseInt(oneTime[2]);\n var msec2sec = oneTime[4] ? parseInt(oneTime[4]) / ((oneTime[4] + '').length === 2 ? 100 : 1000) : 0;\n var lrcTime = min2sec + sec2sec + msec2sec;\n lrc.push([\n lrcTime,\n lrcText\n ]);\n }\n }\n }\n lrc = lrc.filter(function (item) {\n return item[1];\n });\n lrc.sort(function (a, b) {\n return a[0] - b[0];\n });\n return lrc;\n } else {\n return [];\n }\n }\n },\n {\n key: 'remove',\n value: function remove(index) {\n this.parsed.splice(index, 1);\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.parsed = [];\n this.container.innerHTML = '';\n }\n }\n ]);\n return Lrc;\n}();\nexports.default = Lrc;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Storage = function () {\n function Storage(player) {\n _classCallCheck(this, Storage);\n this.storageName = player.options.storageName;\n this.data = JSON.parse(_utils2.default.storage.get(this.storageName));\n if (!this.data) {\n this.data = {};\n }\n this.data.volume = this.data.volume || player.options.volume;\n }\n _createClass(Storage, [\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName, JSON.stringify(this.data));\n }\n }\n ]);\n return Storage;\n}();\nexports.default = Storage;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volume;\n this.elements.played = template.played;\n this.elements.loaded = template.loaded;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type, direction) {\n return parseFloat(this.elements[type].style[direction]) / 100;\n }\n }\n ]);\n return Bar;\n}();\nexports.default = Bar;","'use strict';\nmodule.exports = false;\ntry {\n module.exports = Object.prototype.toString.call(global.process) === '[object process]';\n} catch (e) {\n}","'use strict';\nvar detectNode = require('detect-node');\nvar runtime = Object.create(detectNode ? global : window);\nvar ESCAPE_REG = /[\"&'<>]/;\nruntime.$escape = function (content) {\n return xmlEscape(toString(content));\n};\nruntime.$each = function (data, callback) {\n if (Array.isArray(data)) {\n for (var i = 0, len = data.length; i < len; i++) {\n callback(data[i], i);\n }\n } else {\n for (var _i in data) {\n callback(data[_i], _i);\n }\n }\n};\nfunction toString(value) {\n if (typeof value !== 'string') {\n if (value === undefined || value === null) {\n value = '';\n } else if (typeof value === 'function') {\n value = toString(value.call(value));\n } else {\n value = JSON.stringify(value);\n }\n }\n return value;\n}\n;\nfunction xmlEscape(content) {\n var html = '' + content;\n var regexResult = ESCAPE_REG.exec(html);\n if (!regexResult) {\n return content;\n }\n var result = '';\n var i = void 0, lastIndex = void 0, char = void 0;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34:\n char = '"';\n break;\n case 38:\n char = '&';\n break;\n case 39:\n char = ''';\n break;\n case 60:\n char = '<';\n break;\n case 62:\n char = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) {\n result += html.substring(lastIndex, i);\n }\n lastIndex = i + 1;\n result += char;\n }\n if (lastIndex !== i) {\n return result + html.substring(lastIndex, i);\n } else {\n return result;\n }\n}\n;\nmodule.exports = runtime;","{{ if !options.fixed }}\n
    \n
    \n
    {{@ icons.play }}
    \n
    \n
    \n
    \n No audio\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{@ icons.loading }}\n \n
    \n
    \n
    \n
    \n \n 00:00 / 00:00\n \n \n {{@ icons.skip }}\n \n \n {{@ icons.play }}\n \n \n {{@ icons.skip }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{ include './list-item.art' getObject({\n theme: options.theme,\n audio: options.audio,\n index: 1\n }) }}\n \n
    \n{{ else }}\n
    \n \n {{ include './list-item.art' getObject({\n theme: options.theme,\n audio: options.audio,\n index: 1\n }) }}\n \n
    \n
    \n
    \n
    {{@ icons.play }}
    \n
    \n
    \n
    \n No audio\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n {{@ icons.loading }}\n \n
    \n
    \n
    \n
    \n \n 00:00 / 00:00\n \n \n {{@ icons.skip }}\n \n \n {{@ icons.play }}\n \n \n {{@ icons.skip }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n{{/if}}","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _player = require('../template/player.art');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.randomOrder = options.randomOrder;\n this.init();\n }\n _createClass(Template, [{\n key: 'init',\n value: function init() {\n var cover = '';\n if (this.options.audio.length) {\n if (this.options.order === 'random') {\n cover = this.options.audio[this.randomOrder[0]].cover;\n } else {\n cover = this.options.audio[0].cover;\n }\n }\n this.container.innerHTML = (0, _player2.default)({\n options: this.options,\n icons: _icons2.default,\n cover: cover,\n getObject: function getObject(obj) {\n return obj;\n }\n });\n this.lrc = this.container.querySelector('.aplayer-lrc-contents');\n this.lrcWrap = this.container.querySelector('.aplayer-lrc');\n this.ptime = this.container.querySelector('.aplayer-ptime');\n this.info = this.container.querySelector('.aplayer-info');\n this.time = this.container.querySelector('.aplayer-time');\n this.barWrap = this.container.querySelector('.aplayer-bar-wrap');\n this.button = this.container.querySelector('.aplayer-button');\n this.body = this.container.querySelector('.aplayer-body');\n this.list = this.container.querySelector('.aplayer-list');\n this.listOl = this.container.querySelector('.aplayer-list ol');\n this.listCurs = this.container.querySelectorAll('.aplayer-list-cur');\n this.played = this.container.querySelector('.aplayer-played');\n this.loaded = this.container.querySelector('.aplayer-loaded');\n this.thumb = this.container.querySelector('.aplayer-thumb');\n this.volume = this.container.querySelector('.aplayer-volume');\n this.volumeBar = this.container.querySelector('.aplayer-volume-bar');\n this.volumeButton = this.container.querySelector('.aplayer-time button');\n this.volumeBarWrap = this.container.querySelector('.aplayer-volume-bar-wrap');\n this.loop = this.container.querySelector('.aplayer-icon-loop');\n this.order = this.container.querySelector('.aplayer-icon-order');\n this.menu = this.container.querySelector('.aplayer-icon-menu');\n this.pic = this.container.querySelector('.aplayer-pic');\n this.title = this.container.querySelector('.aplayer-title');\n this.author = this.container.querySelector('.aplayer-author');\n this.dtime = this.container.querySelector('.aplayer-dtime');\n this.notice = this.container.querySelector('.aplayer-notice');\n this.miniSwitcher = this.container.querySelector('.aplayer-miniswitcher');\n this.skipBackButton = this.container.querySelector('.aplayer-icon-back');\n this.skipForwardButton = this.container.querySelector('.aplayer-icon-forward');\n this.skipPlayButton = this.container.querySelector('.aplayer-icon-play');\n this.lrcButton = this.container.querySelector('.aplayer-icon-lrc');\n }\n }]);\n return Template;\n}();\nexports.default = Template;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.default = function (options) {\n var defaultOption = {\n container: options.element || document.getElementsByClassName('aplayer')[0],\n mini: options.narrow || options.fixed || false,\n fixed: false,\n autoplay: false,\n mutex: true,\n lrcType: options.showlrc || options.lrc || 0,\n preload: 'auto',\n theme: '#b7daff',\n loop: 'all',\n order: 'list',\n volume: 0.7,\n listFolded: options.fixed,\n listMaxHeight: options.listmaxheight || '250px',\n audio: options.music || [],\n storageName: 'aplayer-setting'\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (Object.prototype.toString.call(options.audio) !== '[object Array]') {\n options.audio = [options.audio];\n }\n options.audio.map(function (item) {\n item.name = item.name || item.title || 'Audio name';\n item.artist = item.artist || item.author || 'Audio artist';\n item.cover = item.cover || item.pic;\n item.type = item.type || 'normal';\n return item;\n });\n if (options.audio.length <= 1 && options.loop === 'one') {\n options.loop = 'all';\n }\n return options;\n};","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","'use strict';\nvar process = module.exports = {};\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n}());\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = '';\nprocess.versions = {};\nfunction noop() {\n}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n return [];\n};\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};","'use strict';\n(function (global, undefined) {\n 'use strict';\n if (global.setImmediate) {\n return;\n }\n var nextHandle = 1;\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n function setImmediate(callback) {\n if (typeof callback !== 'function') {\n callback = new Function('' + callback);\n }\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n function runIfPresent(handle) {\n if (currentlyRunningATask) {\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n function canUsePostMessage() {\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n global.postMessage('', '*');\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n function installPostMessageImplementation() {\n var messagePrefix = 'setImmediate$' + Math.random() + '$';\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n if (global.addEventListener) {\n global.addEventListener('message', onGlobalMessage, false);\n } else {\n global.attachEvent('onmessage', onGlobalMessage);\n }\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, '*');\n };\n }\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function registerImmediate(handle) {\n var script = doc.createElement('script');\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n if ({}.toString.call(global.process) === '[object process]') {\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n installMessageChannelImplementation();\n } else if (doc && 'onreadystatechange' in doc.createElement('script')) {\n installReadyStateChangeImplementation();\n } else {\n installSetTimeoutImplementation();\n }\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === 'undefined' ? typeof global === 'undefined' ? undefined : global : self));","'use strict';\nvar apply = Function.prototype.apply;\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function () {\n};\nTimeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n};\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\nrequire('setimmediate');\nexports.setImmediate = setImmediate;\nexports.clearImmediate = clearImmediate;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar setTimeoutFunc = setTimeout;\nfunction noop() {\n}\nfunction bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n}\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n}\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\nfunction resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n}\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\nPromise.prototype['finally'] = function (callback) {\n var constructor = this.constructor;\n return this.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n return constructor.reject(reason);\n });\n });\n};\nPromise.all = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\nPromise.resolve = function (value) {\n if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n};\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\nPromise._immediateFn = typeof setImmediate === 'function' && function (fn) {\n setImmediate(fn);\n} || function (fn) {\n setTimeoutFunc(fn, 0);\n};\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n};\nmodule.exports = Promise;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _promisePolyfill = require('promise-polyfill');\nvar _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _options = require('./options');\nvar _options2 = _interopRequireDefault(_options);\nvar _template = require('./template');\nvar _template2 = _interopRequireDefault(_template);\nvar _bar = require('./bar');\nvar _bar2 = _interopRequireDefault(_bar);\nvar _storage = require('./storage');\nvar _storage2 = _interopRequireDefault(_storage);\nvar _lrc = require('./lrc');\nvar _lrc2 = _interopRequireDefault(_lrc);\nvar _controller = require('./controller');\nvar _controller2 = _interopRequireDefault(_controller);\nvar _timer = require('./timer');\nvar _timer2 = _interopRequireDefault(_timer);\nvar _events = require('./events');\nvar _events2 = _interopRequireDefault(_events);\nvar _list = require('./list');\nvar _list2 = _interopRequireDefault(_list);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar instances = [];\nvar APlayer = function () {\n function APlayer(options) {\n _classCallCheck(this, APlayer);\n this.options = (0, _options2.default)(options);\n this.container = this.options.container;\n this.paused = true;\n this.playedPromise = _promisePolyfill2.default.resolve();\n this.mode = 'normal';\n this.randomOrder = _utils2.default.randomOrder(this.options.audio.length);\n this.container.classList.add('aplayer');\n if (this.options.lrcType && !this.options.fixed) {\n this.container.classList.add('aplayer-withlrc');\n }\n if (this.options.audio.length > 1) {\n this.container.classList.add('aplayer-withlist');\n }\n if (_utils2.default.isMobile) {\n this.container.classList.add('aplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 300;\n if (this.arrow) {\n this.container.classList.add('aplayer-arrow');\n }\n this.container = this.options.container;\n if (this.options.lrcType === 2 || this.options.lrcType === true) {\n var lrcEle = this.container.getElementsByClassName('aplayer-lrc-content');\n for (var i = 0; i < lrcEle.length; i++) {\n if (this.options.audio[i]) {\n this.options.audio[i].lrc = lrcEle[i].innerHTML;\n }\n }\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n randomOrder: this.randomOrder\n });\n if (this.options.fixed) {\n this.container.classList.add('aplayer-fixed');\n this.template.body.style.width = this.template.body.offsetWidth - 18 + 'px';\n }\n if (this.options.mini) {\n this.setMode('mini');\n this.template.info.style.display = 'block';\n }\n if (this.template.info.offsetWidth < 200) {\n this.template.time.classList.add('aplayer-time-narrow');\n }\n if (this.options.lrcType) {\n this.lrc = new _lrc2.default({\n container: this.template.lrc,\n async: this.options.lrcType === 3,\n player: this\n });\n }\n this.events = new _events2.default();\n this.storage = new _storage2.default(this);\n this.bar = new _bar2.default(this.template);\n this.controller = new _controller2.default(this);\n this.timer = new _timer2.default(this);\n this.list = new _list2.default(this);\n this.initAudio();\n this.bindEvents();\n if (this.options.order === 'random') {\n this.list.switch(this.randomOrder[0]);\n } else {\n this.list.switch(0);\n }\n if (this.options.autoplay) {\n this.play();\n }\n instances.push(this);\n }\n _createClass(APlayer, [\n {\n key: 'initAudio',\n value: function initAudio() {\n var _this = this;\n this.audio = document.createElement('audio');\n this.audio.preload = this.options.preload;\n var _loop = function _loop(i) {\n _this.audio.addEventListener(_this.events.audioEvents[i], function (e) {\n _this.events.trigger(_this.events.audioEvents[i], e);\n });\n };\n for (var i = 0; i < this.events.audioEvents.length; i++) {\n _loop(i);\n }\n this.volume(this.storage.get('volume'), true);\n }\n },\n {\n key: 'bindEvents',\n value: function bindEvents() {\n var _this2 = this;\n this.on('play', function () {\n if (_this2.paused) {\n _this2.setUIPlaying();\n }\n });\n this.on('pause', function () {\n if (!_this2.paused) {\n _this2.setUIPaused();\n }\n });\n this.on('timeupdate', function () {\n if (!_this2.disableTimeupdate) {\n _this2.bar.set('played', _this2.audio.currentTime / _this2.duration, 'width');\n _this2.lrc && _this2.lrc.update();\n var currentTime = _utils2.default.secondToTime(_this2.audio.currentTime);\n if (_this2.template.ptime.innerHTML !== currentTime) {\n _this2.template.ptime.innerHTML = currentTime;\n }\n }\n });\n this.on('durationchange', function () {\n if (_this2.duration !== 1) {\n _this2.template.dtime.innerHTML = _utils2.default.secondToTime(_this2.duration);\n }\n });\n this.on('progress', function () {\n var percentage = _this2.audio.buffered.length ? _this2.audio.buffered.end(_this2.audio.buffered.length - 1) / _this2.duration : 0;\n _this2.bar.set('loaded', percentage, 'width');\n });\n var skipTime = void 0;\n this.on('error', function () {\n if (_this2.list.audios.length > 1) {\n _this2.notice('An audio error has occurred, player will skip forward in 2 seconds.');\n skipTime = setTimeout(function () {\n _this2.skipForward();\n if (!_this2.paused) {\n _this2.play();\n }\n }, 2000);\n } else if (_this2.list.audios.length === 1) {\n _this2.notice('An audio error has occurred.');\n }\n });\n this.events.on('listswitch', function () {\n skipTime && clearTimeout(skipTime);\n });\n this.on('ended', function () {\n if (_this2.options.loop === 'none') {\n if (_this2.options.order === 'list') {\n if (_this2.list.index < _this2.list.audios.length - 1) {\n _this2.list.switch((_this2.list.index + 1) % _this2.list.audios.length);\n _this2.play();\n } else {\n _this2.list.switch((_this2.list.index + 1) % _this2.list.audios.length);\n _this2.pause();\n }\n } else if (_this2.options.order === 'random') {\n if (_this2.randomOrder.indexOf(_this2.list.index) < _this2.randomOrder.length - 1) {\n _this2.list.switch(_this2.nextIndex());\n _this2.play();\n } else {\n _this2.list.switch(_this2.nextIndex());\n _this2.pause();\n }\n }\n } else if (_this2.options.loop === 'one') {\n _this2.list.switch(_this2.list.index);\n _this2.play();\n } else if (_this2.options.loop === 'all') {\n _this2.skipForward();\n _this2.play();\n }\n });\n }\n },\n {\n key: 'setAudio',\n value: function setAudio(audio) {\n if (this.hls) {\n this.hls.destroy();\n this.hls = null;\n }\n var type = audio.type;\n if (this.options.customAudioType && this.options.customAudioType[type]) {\n if (Object.prototype.toString.call(this.options.customAudioType[type]) === '[object Function]') {\n this.options.customAudioType[type](this.audio, audio, this);\n } else {\n console.error('Illegal customType: ' + type);\n }\n } else {\n if (!type || type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(audio.url)) {\n type = 'hls';\n } else {\n type = 'normal';\n }\n }\n if (type === 'hls') {\n if (Hls.isSupported()) {\n this.hls = new Hls();\n this.hls.loadSource(audio.url);\n this.hls.attachMedia(this.audio);\n } else if (this.audio.canPlayType('application/x-mpegURL') || this.audio.canPlayType('application/vnd.apple.mpegURL')) {\n this.audio.src = audio.url;\n } else {\n this.notice('Error: HLS is not supported.');\n }\n } else if (type === 'normal') {\n this.audio.src = audio.url;\n }\n }\n this.seek(0);\n if (!this.paused) {\n this.audio.play();\n }\n }\n },\n {\n key: 'theme',\n value: function theme() {\n var color = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.list.audios[this.list.index].theme || this.options.theme;\n var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.list.index;\n var isReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n if (isReset) {\n this.list.audios[index] && (this.list.audios[index].theme = color);\n }\n this.template.listCurs[index] && (this.template.listCurs[index].style.backgroundColor = color);\n if (index === this.list.index) {\n this.template.pic.style.backgroundColor = color;\n this.template.played.style.background = color;\n this.template.thumb.style.background = color;\n this.template.volume.style.background = color;\n }\n }\n },\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n time = Math.min(time, this.duration);\n this.audio.currentTime = time;\n this.bar.set('played', time / this.duration, 'width');\n this.template.ptime.innerHTML = _utils2.default.secondToTime(time);\n }\n },\n {\n key: 'setUIPlaying',\n value: function setUIPlaying() {\n var _this3 = this;\n if (this.paused) {\n this.paused = false;\n this.template.button.classList.remove('aplayer-play');\n this.template.button.classList.add('aplayer-pause');\n this.template.button.innerHTML = '';\n setTimeout(function () {\n _this3.template.button.innerHTML = _icons2.default.pause;\n }, 100);\n this.template.skipPlayButton.innerHTML = _icons2.default.pause;\n }\n this.timer.enable('loading');\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n var _this4 = this;\n this.setUIPlaying();\n var playPromise = this.audio.play();\n if (playPromise) {\n playPromise.catch(function (e) {\n console.warn(e);\n if (e.name === 'NotAllowedError') {\n _this4.setUIPaused();\n }\n });\n }\n }\n },\n {\n key: 'setUIPaused',\n value: function setUIPaused() {\n var _this5 = this;\n if (!this.paused) {\n this.paused = true;\n this.template.button.classList.remove('aplayer-pause');\n this.template.button.classList.add('aplayer-play');\n this.template.button.innerHTML = '';\n setTimeout(function () {\n _this5.template.button.innerHTML = _icons2.default.play;\n }, 100);\n this.template.skipPlayButton.innerHTML = _icons2.default.play;\n }\n this.container.classList.remove('aplayer-loading');\n this.timer.disable('loading');\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.setUIPaused();\n this.audio.pause();\n }\n },\n {\n key: 'switchVolumeIcon',\n value: function switchVolumeIcon() {\n if (this.volume() >= 0.95) {\n this.template.volumeButton.innerHTML = _icons2.default.volumeUp;\n } else if (this.volume() > 0) {\n this.template.volumeButton.innerHTML = _icons2.default.volumeDown;\n } else {\n this.template.volumeButton.innerHTML = _icons2.default.volumeOff;\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'height');\n if (!nostorage) {\n this.storage.set('volume', percentage);\n }\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.audio.muted ? 0 : this.audio.volume;\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.template.button.classList.contains('aplayer-play')) {\n this.play();\n } else if (this.template.button.classList.contains('aplayer-pause')) {\n this.pause();\n }\n }\n },\n {\n key: 'switchAudio',\n value: function switchAudio(index) {\n this.list.switch(index);\n }\n },\n {\n key: 'addAudio',\n value: function addAudio(audios) {\n this.list.add(audios);\n }\n },\n {\n key: 'removeAudio',\n value: function removeAudio(index) {\n this.list.remove(index);\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n this.container.innerHTML = '';\n this.audio.src = '';\n this.timer.destroy();\n this.events.trigger('destroy');\n }\n },\n {\n key: 'setMode',\n value: function setMode() {\n var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'normal';\n this.mode = mode;\n if (mode === 'mini') {\n this.container.classList.add('aplayer-narrow');\n } else if (mode === 'normal') {\n this.container.classList.remove('aplayer-narrow');\n }\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('noticeshow', { text: text });\n if (time) {\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('noticehide');\n }, time);\n }\n }\n },\n {\n key: 'prevIndex',\n value: function prevIndex() {\n if (this.list.audios.length > 1) {\n if (this.options.order === 'list') {\n return this.list.index - 1 < 0 ? this.list.audios.length - 1 : this.list.index - 1;\n } else if (this.options.order === 'random') {\n var index = this.randomOrder.indexOf(this.list.index);\n if (index === 0) {\n return this.randomOrder[this.randomOrder.length - 1];\n } else {\n return this.randomOrder[index - 1];\n }\n }\n } else {\n return 0;\n }\n }\n },\n {\n key: 'nextIndex',\n value: function nextIndex() {\n if (this.list.audios.length > 1) {\n if (this.options.order === 'list') {\n return (this.list.index + 1) % this.list.audios.length;\n } else if (this.options.order === 'random') {\n var index = this.randomOrder.indexOf(this.list.index);\n if (index === this.randomOrder.length - 1) {\n return this.randomOrder[0];\n } else {\n return this.randomOrder[index + 1];\n }\n }\n } else {\n return 0;\n }\n }\n },\n {\n key: 'skipBack',\n value: function skipBack() {\n this.list.switch(this.prevIndex());\n }\n },\n {\n key: 'skipForward',\n value: function skipForward() {\n this.list.switch(this.nextIndex());\n }\n },\n {\n key: 'duration',\n get: function get() {\n return isNaN(this.audio.duration) ? 0 : this.audio.duration;\n }\n }\n ], [{\n key: 'version',\n get: function get() {\n return APLAYER_VERSION;\n }\n }]);\n return APlayer;\n}();\nexports.default = APlayer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nrequire('../css/index.scss');\nvar _player = require('./player');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nconsole.log('\\n' + ' %c APlayer v' + APLAYER_VERSION + ' ' + GIT_HASH + ' %c http://aplayer.js.org ' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nexports.default = _player2.default;"],"sourceRoot":""} \ No newline at end of file diff --git a/upload/static/js/player/dplayer.min.css b/upload/static/js/player/dplayer.min.css new file mode 100644 index 0000000000000000000000000000000000000000..6410d9bf96ba20d3a7d60924629893a727d2f3eb --- /dev/null +++ b/upload/static/js/player/dplayer.min.css @@ -0,0 +1,4 @@ +button[data-balloon]{overflow:visible}[data-balloon]{position:relative;cursor:pointer}[data-balloon]:after{font-family:sans-serif!important;font-weight:400!important;font-style:normal!important;text-shadow:none!important;font-size:12px!important;background:hsla(0,0%,7%,.9);border-radius:4px;color:#fff;content:attr(data-balloon);padding:.5em 1em;white-space:nowrap}[data-balloon]:after,[data-balloon]:before{filter:alpha(opactiy=0);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";-moz-opacity:0;-khtml-opacity:0;opacity:0;pointer-events:none;transition:all .18s ease-out .18s;position:absolute;z-index:10}[data-balloon]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='12'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M2.658 0h32.004c-6 0-11.627 12.002-16.002 12.002C14.285 12.002 8.594 0 2.658 0z'/%3E%3C/svg%3E");background-size:100% auto;width:18px;height:6px;content:""}[data-balloon]:hover:after,[data-balloon]:hover:before,[data-balloon][data-balloon-visible]:after,[data-balloon][data-balloon-visible]:before{filter:alpha(opactiy=100);-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";-moz-opacity:1;-khtml-opacity:1;opacity:1;pointer-events:auto}[data-balloon].font-awesome:after{font-family:FontAwesome}[data-balloon][data-balloon-break]:after{white-space:pre}[data-balloon][data-balloon-blunt]:after,[data-balloon][data-balloon-blunt]:before{transition:none}[data-balloon][data-balloon-pos=up]:after{margin-bottom:11px}[data-balloon][data-balloon-pos=up]:after,[data-balloon][data-balloon-pos=up]:before{bottom:100%;left:50%;-webkit-transform:translate(-50%,10px);transform:translate(-50%,10px);-webkit-transform-origin:top;transform-origin:top}[data-balloon][data-balloon-pos=up]:before{margin-bottom:5px}[data-balloon][data-balloon-pos=up]:hover:after,[data-balloon][data-balloon-pos=up]:hover:before,[data-balloon][data-balloon-pos=up][data-balloon-visible]:after,[data-balloon][data-balloon-pos=up][data-balloon-visible]:before{-webkit-transform:translate(-50%);transform:translate(-50%)}[data-balloon][data-balloon-pos=up-left]:after{left:0;margin-bottom:11px}[data-balloon][data-balloon-pos=up-left]:after,[data-balloon][data-balloon-pos=up-left]:before{bottom:100%;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform-origin:top;transform-origin:top}[data-balloon][data-balloon-pos=up-left]:before{left:5px;margin-bottom:5px}[data-balloon][data-balloon-pos=up-left]:hover:after,[data-balloon][data-balloon-pos=up-left]:hover:before,[data-balloon][data-balloon-pos=up-left][data-balloon-visible]:after,[data-balloon][data-balloon-pos=up-left][data-balloon-visible]:before{-webkit-transform:translate(0);transform:translate(0)}[data-balloon][data-balloon-pos=up-right]:after{right:0;margin-bottom:11px}[data-balloon][data-balloon-pos=up-right]:after,[data-balloon][data-balloon-pos=up-right]:before{bottom:100%;-webkit-transform:translateY(10px);transform:translateY(10px);-webkit-transform-origin:top;transform-origin:top}[data-balloon][data-balloon-pos=up-right]:before{right:5px;margin-bottom:5px}[data-balloon][data-balloon-pos=up-right]:hover:after,[data-balloon][data-balloon-pos=up-right]:hover:before,[data-balloon][data-balloon-pos=up-right][data-balloon-visible]:after,[data-balloon][data-balloon-pos=up-right][data-balloon-visible]:before{-webkit-transform:translate(0);transform:translate(0)}[data-balloon][data-balloon-pos=down]:after{margin-top:11px}[data-balloon][data-balloon-pos=down]:after,[data-balloon][data-balloon-pos=down]:before{left:50%;top:100%;-webkit-transform:translate(-50%,-10px);transform:translate(-50%,-10px)}[data-balloon][data-balloon-pos=down]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='12'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M33.342 12H1.338c6 0 11.627-12.002 16.002-12.002C21.715-.002 27.406 12 33.342 12z'/%3E%3C/svg%3E");background-size:100% auto;width:18px;height:6px;margin-top:5px}[data-balloon][data-balloon-pos=down]:hover:after,[data-balloon][data-balloon-pos=down]:hover:before,[data-balloon][data-balloon-pos=down][data-balloon-visible]:after,[data-balloon][data-balloon-pos=down][data-balloon-visible]:before{-webkit-transform:translate(-50%);transform:translate(-50%)}[data-balloon][data-balloon-pos=down-left]:after{left:0;margin-top:11px;top:100%;-webkit-transform:translateY(-10px);transform:translateY(-10px)}[data-balloon][data-balloon-pos=down-left]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='12'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M33.342 12H1.338c6 0 11.627-12.002 16.002-12.002C21.715-.002 27.406 12 33.342 12z'/%3E%3C/svg%3E");background-size:100% auto;width:18px;height:6px;left:5px;margin-top:5px;top:100%;-webkit-transform:translateY(-10px);transform:translateY(-10px)}[data-balloon][data-balloon-pos=down-left]:hover:after,[data-balloon][data-balloon-pos=down-left]:hover:before,[data-balloon][data-balloon-pos=down-left][data-balloon-visible]:after,[data-balloon][data-balloon-pos=down-left][data-balloon-visible]:before{-webkit-transform:translate(0);transform:translate(0)}[data-balloon][data-balloon-pos=down-right]:after{right:0;margin-top:11px;top:100%;-webkit-transform:translateY(-10px);transform:translateY(-10px)}[data-balloon][data-balloon-pos=down-right]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='12'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M33.342 12H1.338c6 0 11.627-12.002 16.002-12.002C21.715-.002 27.406 12 33.342 12z'/%3E%3C/svg%3E");background-size:100% auto;width:18px;height:6px;right:5px;margin-top:5px;top:100%;-webkit-transform:translateY(-10px);transform:translateY(-10px)}[data-balloon][data-balloon-pos=down-right]:hover:after,[data-balloon][data-balloon-pos=down-right]:hover:before,[data-balloon][data-balloon-pos=down-right][data-balloon-visible]:after,[data-balloon][data-balloon-pos=down-right][data-balloon-visible]:before{-webkit-transform:translate(0);transform:translate(0)}[data-balloon][data-balloon-pos=left]:after{margin-right:11px;right:100%;top:50%;-webkit-transform:translate(10px,-50%);transform:translate(10px,-50%)}[data-balloon][data-balloon-pos=left]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='36'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M0 33.342V1.338c0 6 12.002 11.627 12.002 16.002C12.002 21.715 0 27.406 0 33.342z'/%3E%3C/svg%3E");background-size:100% auto;width:6px;height:18px;margin-right:5px;right:100%;top:50%;-webkit-transform:translate(10px,-50%);transform:translate(10px,-50%)}[data-balloon][data-balloon-pos=left]:hover:after,[data-balloon][data-balloon-pos=left]:hover:before,[data-balloon][data-balloon-pos=left][data-balloon-visible]:after,[data-balloon][data-balloon-pos=left][data-balloon-visible]:before{-webkit-transform:translateY(-50%);transform:translateY(-50%)}[data-balloon][data-balloon-pos=right]:after{left:100%;margin-left:11px;top:50%;-webkit-transform:translate(-10px,-50%);transform:translate(-10px,-50%)}[data-balloon][data-balloon-pos=right]:before{background:no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='36'%3E%3Cpath fill='rgba(17, 17, 17, 0.9)' d='M12 2.658v32.004c0-6-12.002-11.627-12.002-16.002C-.002 14.285 12 8.594 12 2.658z'/%3E%3C/svg%3E");background-size:100% auto;width:6px;height:18px;left:100%;margin-left:5px;top:50%;-webkit-transform:translate(-10px,-50%);transform:translate(-10px,-50%)}[data-balloon][data-balloon-pos=right]:hover:after,[data-balloon][data-balloon-pos=right]:hover:before,[data-balloon][data-balloon-pos=right][data-balloon-visible]:after,[data-balloon][data-balloon-pos=right][data-balloon-visible]:before{-webkit-transform:translateY(-50%);transform:translateY(-50%)}[data-balloon][data-balloon-length=small]:after{white-space:normal;width:80px}[data-balloon][data-balloon-length=medium]:after{white-space:normal;width:150px}[data-balloon][data-balloon-length=large]:after{white-space:normal;width:260px}[data-balloon][data-balloon-length=xlarge]:after{white-space:normal;width:380px}@media screen and (max-width:768px){[data-balloon][data-balloon-length=xlarge]:after{white-space:normal;width:90vw}}[data-balloon][data-balloon-length=fit]:after{white-space:normal;width:100%} +@-webkit-keyframes my-face{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}}@keyframes my-face{2%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}4%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}6%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}8%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}10%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}12%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}14%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}16%{-webkit-transform:translateY(-.5px) rotate(-1.5deg);transform:translateY(-.5px) rotate(-1.5deg)}18%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}20%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}22%{-webkit-transform:translateY(.5px) rotate(-1.5deg);transform:translateY(.5px) rotate(-1.5deg)}24%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}26%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}28%{-webkit-transform:translateY(.5px) rotate(1.5deg);transform:translateY(.5px) rotate(1.5deg)}30%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}32%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}34%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}36%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}38%{-webkit-transform:translateY(1.5px) rotate(-1.5deg);transform:translateY(1.5px) rotate(-1.5deg)}40%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}42%{-webkit-transform:translateY(2.5px) rotate(-1.5deg);transform:translateY(2.5px) rotate(-1.5deg)}44%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}46%{-webkit-transform:translateY(-1.5px) rotate(2.5deg);transform:translateY(-1.5px) rotate(2.5deg)}48%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}50%{-webkit-transform:translateY(.5px) rotate(.5deg);transform:translateY(.5px) rotate(.5deg)}52%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}54%{-webkit-transform:translateY(-1.5px) rotate(1.5deg);transform:translateY(-1.5px) rotate(1.5deg)}56%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}58%{-webkit-transform:translateY(.5px) rotate(2.5deg);transform:translateY(.5px) rotate(2.5deg)}60%{-webkit-transform:translateY(2.5px) rotate(2.5deg);transform:translateY(2.5px) rotate(2.5deg)}62%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}64%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}66%{-webkit-transform:translateY(1.5px) rotate(-.5deg);transform:translateY(1.5px) rotate(-.5deg)}68%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}70%{-webkit-transform:translateY(1.5px) rotate(.5deg);transform:translateY(1.5px) rotate(.5deg)}72%{-webkit-transform:translateY(2.5px) rotate(1.5deg);transform:translateY(2.5px) rotate(1.5deg)}74%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}76%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}78%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}80%{-webkit-transform:translateY(1.5px) rotate(1.5deg);transform:translateY(1.5px) rotate(1.5deg)}82%{-webkit-transform:translateY(-.5px) rotate(.5deg);transform:translateY(-.5px) rotate(.5deg)}84%{-webkit-transform:translateY(1.5px) rotate(2.5deg);transform:translateY(1.5px) rotate(2.5deg)}86%{-webkit-transform:translateY(-1.5px) rotate(-1.5deg);transform:translateY(-1.5px) rotate(-1.5deg)}88%{-webkit-transform:translateY(-.5px) rotate(2.5deg);transform:translateY(-.5px) rotate(2.5deg)}90%{-webkit-transform:translateY(2.5px) rotate(-.5deg);transform:translateY(2.5px) rotate(-.5deg)}92%{-webkit-transform:translateY(.5px) rotate(-.5deg);transform:translateY(.5px) rotate(-.5deg)}94%{-webkit-transform:translateY(2.5px) rotate(.5deg);transform:translateY(2.5px) rotate(.5deg)}96%{-webkit-transform:translateY(-.5px) rotate(1.5deg);transform:translateY(-.5px) rotate(1.5deg)}98%{-webkit-transform:translateY(-1.5px) rotate(-.5deg);transform:translateY(-1.5px) rotate(-.5deg)}0%,to{-webkit-transform:translate(0) rotate(0deg);transform:translate(0) rotate(0deg)}}.dplayer{position:relative;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:1}.dplayer *{box-sizing:content-box}.dplayer svg{width:100%;height:100%}.dplayer svg circle,.dplayer svg path{fill:#fff}.dplayer:-webkit-full-screen{width:100%;height:100%;background:#000;position:fixed;z-index:100000;left:0;top:0}.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move{-webkit-animation:danmaku-center 6s linear;animation:danmaku-center 6s linear;-webkit-animation-play-state:inherit;animation-play-state:inherit}.dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move{-webkit-animation:danmaku 8s linear;animation:danmaku 8s linear;-webkit-animation-play-state:inherit;animation-play-state:inherit}.dplayer.dplayer-live .dplayer-bar-wrap,.dplayer.dplayer-live.dplayer-no-danmaku .dplayer-setting,.dplayer.dplayer-live .dplayer-setting-loop,.dplayer.dplayer-live .dplayer-setting-speed,.dplayer.dplayer-live .dplayer-time,.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment,.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danmaku,.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danunlimit,.dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-showdan,.dplayer.dplayer-no-danmaku .dplayer-danmaku{display:none}.dplayer.dplayer-arrow .dplayer-danmaku{font-size:18px}.dplayer.dplayer-arrow .dplayer-icon{margin:0 -3px}.dplayer.dplayer-playing .dplayer-danmaku .dplayer-danmaku-move{-webkit-animation-play-state:running;animation-play-state:running}@media (min-width:900px){.dplayer.dplayer-playing .dplayer-controller,.dplayer.dplayer-playing .dplayer-controller-mask{opacity:0}.dplayer.dplayer-playing:hover .dplayer-controller,.dplayer.dplayer-playing:hover .dplayer-controller-mask{opacity:1}}.dplayer.dplayer-loading .dplayer-bezel .diplayer-loading-icon{display:block}.dplayer.dplayer-loading .dplayer-danmaku,.dplayer.dplayer-loading .dplayer-danmaku-move,.dplayer.dplayer-paused .dplayer-danmaku,.dplayer.dplayer-paused .dplayer-danmaku-move{-webkit-animation-play-state:paused;animation-play-state:paused}.dplayer.dplayer-hide-controller{cursor:none}.dplayer.dplayer-hide-controller .dplayer-controller,.dplayer.dplayer-hide-controller .dplayer-controller-mask{opacity:0;-webkit-transform:translateY(100%);transform:translateY(100%)}.dplayer.dplayer-show-controller .dplayer-controller,.dplayer.dplayer-show-controller .dplayer-controller-mask{opacity:1}.dplayer.dplayer-fulled{position:fixed;z-index:100000;left:0;top:0;width:100%;height:100%}.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-camera-icon,.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-volume{display:none}.dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon{position:static;display:inline-block}.dplayer.dplayer-mobile .dplayer-bar-time{display:none}.dplayer-web-fullscreen-fix{position:fixed;top:0;left:0;margin:0;padding:0}[data-balloon]:before{display:none}[data-balloon]:after{padding:.3em .7em;background:hsla(0,0%,7%,.7)}[data-balloon][data-balloon-pos=up]:after{margin-bottom:0}.dplayer-bezel{position:absolute;left:0;right:0;top:0;bottom:0;font-size:22px;color:#fff;pointer-events:none}.dplayer-bezel .dplayer-bezel-icon{position:absolute;top:50%;left:50%;margin:-26px 0 0 -26px;height:52px;width:52px;padding:12px;box-sizing:border-box;background:rgba(0,0,0,.5);border-radius:50%;opacity:0;pointer-events:none}.dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition{-webkit-animation:bezel-hide .5s linear;animation:bezel-hide .5s linear}@-webkit-keyframes bezel-hide{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}@keyframes bezel-hide{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}to{opacity:0;-webkit-transform:scale(2);transform:scale(2)}}.dplayer-bezel .dplayer-danloading{position:absolute;top:50%;margin-top:-7px;width:100%;text-align:center;font-size:14px;line-height:14px;-webkit-animation:my-face 5s infinite ease-in-out;animation:my-face 5s infinite ease-in-out}.dplayer-bezel .diplayer-loading-icon{display:none;position:absolute;top:50%;left:50%;margin:-18px 0 0 -18px;height:36px;width:36px;pointer-events:none}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide{display:none}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot{-webkit-animation:diplayer-loading-dot-fade .8s ease infinite;animation:diplayer-loading-dot-fade .8s ease infinite;opacity:0;-webkit-transform-origin:4px 4px;transform-origin:4px 4px}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7{-webkit-animation-delay:.7s;animation-delay:.7s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6{-webkit-animation-delay:.6s;animation-delay:.6s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5{-webkit-animation-delay:.5s;animation-delay:.5s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4{-webkit-animation-delay:.4s;animation-delay:.4s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3{-webkit-animation-delay:.3s;animation-delay:.3s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2{-webkit-animation-delay:.2s;animation-delay:.2s}.dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1{-webkit-animation-delay:.1s;animation-delay:.1s}@-webkit-keyframes diplayer-loading-dot-fade{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{opacity:.25;-webkit-transform:scale(.9);transform:scale(.9)}to{opacity:.25;-webkit-transform:scale(.85);transform:scale(.85)}}@keyframes diplayer-loading-dot-fade{0%{opacity:.7;-webkit-transform:scale(1.2);transform:scale(1.2)}50%{opacity:.25;-webkit-transform:scale(.9);transform:scale(.9)}to{opacity:.25;-webkit-transform:scale(.85);transform:scale(.85)}}.dplayer-controller-mask{background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom;height:98px;width:100%}.dplayer-controller,.dplayer-controller-mask{position:absolute;bottom:0;transition:all .3s ease}.dplayer-controller{left:0;right:0;height:41px;padding:0 20px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dplayer-controller.dplayer-controller-comment .dplayer-icons{display:none}.dplayer-controller.dplayer-controller-comment .dplayer-icons.dplayer-comment-box{display:block}.dplayer-controller .dplayer-bar-wrap{padding:5px 0;cursor:pointer;position:absolute;bottom:33px;width:calc(100% - 40px);height:3px}.dplayer-controller .dplayer-bar-wrap:hover .dplayer-bar .dplayer-played .dplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview{position:absolute;background:#fff;pointer-events:none;display:none;background-size:16000px 100%}.dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview-canvas{position:absolute;width:100%;height:100%;z-index:1;pointer-events:none}.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time{position:absolute;left:0;top:-20px;width:30px;border-radius:4px;padding:5px 7px;background-color:rgba(0,0,0,.62);color:#fff;font-size:12px;text-align:center;opacity:1;transition:opacity .1s ease-in-out;word-wrap:normal;word-break:normal;z-index:2;pointer-events:none}.dplayer-controller .dplayer-bar-wrap .dplayer-bar-time.hidden{opacity:0}.dplayer-controller .dplayer-bar-wrap .dplayer-bar{position:relative;height:3px;width:100%;background:hsla(0,0%,100%,.2);cursor:pointer}.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded{background:hsla(0,0%,100%,.4);transition:all .5s ease}.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded,.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played{position:absolute;left:0;top:0;bottom:0;height:3px;will-change:width}.dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;-webkit-transform:scale(0);transform:scale(0)}.dplayer-controller .dplayer-icons{height:38px;position:absolute;bottom:0}.dplayer-controller .dplayer-icons.dplayer-comment-box{display:none;position:absolute;transition:all .3s ease-in-out;z-index:2;height:38px;bottom:0;left:20px;right:20px;color:#fff}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-icon{padding:7px}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-icon{position:absolute;left:0;top:0}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-send-icon{position:absolute;right:0;top:0}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box{position:absolute;background:rgba(28,28,28,.9);bottom:41px;left:0;box-shadow:0 0 25px rgba(0,0,0,.3);border-radius:4px;padding:10px 10px 16px;font-size:14px;width:204px;transition:all .3s ease-in-out;-webkit-transform:scale(0);transform:scale(0)}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open{-webkit-transform:scale(1);transform:scale(1)}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box input[type=radio]{display:none}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box label{cursor:pointer}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-title{font-size:13px;color:#fff;line-height:30px}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type{font-size:0}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type .dplayer-comment-setting-title{margin-bottom:6px}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(2) span{border-radius:4px 0 0 4px}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(4) span{border-radius:0 4px 4px 0}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span{width:33%;padding:4px 6px;line-height:16px;display:inline-block;font-size:12px;color:#fff;border:1px solid #fff;margin-right:-1px;box-sizing:border-box;text-align:center;cursor:pointer}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked+span{background:#e4e4e6;color:#1c1c1c}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color{font-size:0}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label{font-size:0;padding:6px;display:inline-block}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span{width:22px;height:22px;display:inline-block;border-radius:50%;box-sizing:border-box;cursor:pointer}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover{-webkit-animation:my-face 5s infinite ease-in-out;animation:my-face 5s infinite ease-in-out}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input{outline:none;border:none;padding:8px 31px;font-size:14px;line-height:18px;text-align:center;border-radius:4px;background:none;margin:0;height:100%;box-sizing:border-box;width:100%;color:#fff}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-webkit-input-placeholder{color:#fff;opacity:.8}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input:-ms-input-placeholder,.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-input-placeholder{color:#fff;opacity:.8}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::placeholder{color:#fff;opacity:.8}.dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-clear{display:none}.dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon{padding:7px}.dplayer-controller .dplayer-icons.dplayer-icons-right{right:20px}.dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon{padding:8px}.dplayer-controller .dplayer-icons .dplayer-live-badge,.dplayer-controller .dplayer-icons .dplayer-time{line-height:38px;color:#eee;text-shadow:0 0 2px rgba(0,0,0,.5);vertical-align:middle;font-size:13px;cursor:default}.dplayer-controller .dplayer-icons .dplayer-live-dot{display:inline-block;width:6px;height:6px;vertical-align:4%;margin-right:5px;content:"";border-radius:6px}.dplayer-controller .dplayer-icons .dplayer-icon{width:40px;height:100%;border:none;background-color:transparent;outline:none;cursor:pointer;vertical-align:middle;box-sizing:border-box;display:inline-block}.dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content{transition:all .2s ease-in-out;opacity:.8}.dplayer-controller .dplayer-icons .dplayer-icon:hover .dplayer-icon-content{opacity:1}.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-quality-icon{color:#fff;width:auto;line-height:22px;font-size:14px}.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-comment-icon{padding:10px 9px 9px}.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-setting-icon{padding-top:8.5px}.dplayer-controller .dplayer-icons .dplayer-icon.dplayer-volume-icon{width:43px}.dplayer-controller .dplayer-icons .dplayer-volume{position:relative;display:inline-block;cursor:pointer;height:100%}.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar{width:45px}.dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar{width:45px}.dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb{-webkit-transform:scale(1);transform:scale(1)}.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap{display:inline-block;margin:0 10px 0 -5px;vertical-align:middle;height:100%}.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar{position:relative;top:17px;width:0;height:3px;background:#aaa;transition:all .3s ease-in-out}.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner{position:absolute;bottom:0;left:0;height:100%;transition:all .1s ease;will-change:width}.dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;-webkit-transform:scale(0);transform:scale(0)}.dplayer-controller .dplayer-icons .dplayer-setting,.dplayer-controller .dplayer-icons .dplayer-subtitle-btn{display:inline-block;height:100%}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box{position:absolute;right:0;bottom:50px;-webkit-transform:scale(0);transform:scale(0);width:150px;border-radius:2px;background:rgba(28,28,28,.9);padding:7px 0;transition:all .3s ease-in-out;overflow:hidden;z-index:2}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box>div{display:none}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box>div.dplayer-setting-origin-panel{display:block}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open{-webkit-transform:scale(1);transform:scale(1)}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow{width:70px;height:180px;text-align:center}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-origin-panel{display:none}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-speed-panel{display:block}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item{height:30px;padding:5px 10px;box-sizing:border-box;cursor:pointer;position:relative}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku{padding:5px 0}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label{padding:0 10px;display:inline}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label{display:none}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label{display:none}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap{display:inline-block}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap{padding:0 10px;box-sizing:border-box;display:none;vertical-align:middle;height:100%;width:100%}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar{position:relative;top:8.5px;width:100%;height:3px;background:#fff;transition:all .3s ease-in-out}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner{position:absolute;bottom:0;left:0;height:100%;transition:all .1s ease;background:#aaa;will-change:width}.dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner .dplayer-thumb{position:absolute;top:0;right:5px;margin-top:-4px;margin-right:-10px;height:11px;width:11px;border-radius:50%;cursor:pointer;transition:all .3s ease-in-out;background:#aaa}.dplayer-controller .dplayer-icons .dplayer-full{display:inline-block;height:100%;position:relative}.dplayer-controller .dplayer-icons .dplayer-full:hover .dplayer-full-in-icon{display:block}.dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon{position:absolute;top:-30px;z-index:1;display:none}.dplayer-controller .dplayer-icons .dplayer-quality{position:relative;display:inline-block;height:100%;z-index:2}.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-list,.dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-mask{display:block}.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-mask{display:none;position:absolute;bottom:38px;left:-18px;width:80px;padding-bottom:12px}.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-list{display:none;font-size:12px;width:80px;border-radius:2px;background:rgba(28,28,28,.9);padding:5px 0;transition:all .3s ease-in-out;overflow:hidden;color:#fff;text-align:center}.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item{height:25px;box-sizing:border-box;cursor:pointer;line-height:25px}.dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer-controller .dplayer-icons .dplayer-comment{display:inline-block;height:100%}.dplayer-controller .dplayer-icons .dplayer-label{color:#eee;font-size:13px;display:inline-block;vertical-align:middle;white-space:nowrap}.dplayer-controller .dplayer-icons .dplayer-toggle{width:32px;height:20px;text-align:center;font-size:0;vertical-align:middle;position:absolute;top:5px;right:10px}.dplayer-controller .dplayer-icons .dplayer-toggle input{max-height:0;max-width:0;display:none}.dplayer-controller .dplayer-icons .dplayer-toggle input+label{display:inline-block;position:relative;box-shadow:inset 0 0 0 0 #dfdfdf;border:1px solid #dfdfdf;height:20px;width:32px;border-radius:10px;box-sizing:border-box;cursor:pointer;transition:.2s ease-in-out}.dplayer-controller .dplayer-icons .dplayer-toggle input+label:after,.dplayer-controller .dplayer-icons .dplayer-toggle input+label:before{content:"";position:absolute;display:block;height:18px;width:18px;top:0;left:0;border-radius:15px;transition:.2s ease-in-out}.dplayer-controller .dplayer-icons .dplayer-toggle input+label:after{background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}.dplayer-controller .dplayer-icons .dplayer-toggle input:checked+label{border-color:hsla(0,0%,100%,.5)}.dplayer-controller .dplayer-icons .dplayer-toggle input:checked+label:before{width:30px;background:hsla(0,0%,100%,.5)}.dplayer-controller .dplayer-icons .dplayer-toggle input:checked+label:after{left:12px}.dplayer-danmaku{position:absolute;left:0;right:0;top:0;bottom:0;font-size:22px;color:#fff}.dplayer-danmaku .dplayer-danmaku-item{display:inline-block;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default;white-space:nowrap;text-shadow:.5px .5px .5px rgba(0,0,0,.5)}.dplayer-danmaku .dplayer-danmaku-item--demo{position:absolute;visibility:hidden}.dplayer-danmaku .dplayer-danmaku-right{position:absolute;right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move{will-change:transform;-webkit-animation:danmaku 5s linear;animation:danmaku 5s linear;-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes danmaku{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes danmaku{0%{-webkit-transform:translateX(100%);transform:translateX(100%)}}.dplayer-danmaku .dplayer-danmaku-bottom,.dplayer-danmaku .dplayer-danmaku-top{position:absolute;width:100%;text-align:center;visibility:hidden}.dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move,.dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move{will-change:visibility;-webkit-animation:danmaku-center 4s linear;animation:danmaku-center 4s linear;-webkit-animation-play-state:paused;animation-play-state:paused}@-webkit-keyframes danmaku-center{0%{visibility:visible}to{visibility:visible}}@keyframes danmaku-center{0%{visibility:visible}to{visibility:visible}}.dplayer-logo{pointer-events:none;position:absolute;left:20px;top:20px;max-width:50px;max-height:50px}.dplayer-logo img{max-width:100%;max-height:100%;background:none}.dplayer-menu{position:absolute;width:170px;border-radius:2px;background:rgba(28,28,28,.85);padding:5px 0;overflow:hidden;z-index:3;display:none}.dplayer-menu.dplayer-menu-show{display:block}.dplayer-menu .dplayer-menu-item{height:30px;box-sizing:border-box;cursor:pointer}.dplayer-menu .dplayer-menu-item:hover{background-color:hsla(0,0%,100%,.1)}.dplayer-menu .dplayer-menu-item a{padding:0 10px;line-height:30px;color:#eee;font-size:13px;display:inline-block;vertical-align:middle;width:100%;box-sizing:border-box;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dplayer-menu .dplayer-menu-item a:hover{text-decoration:none}.dplayer-notice{opacity:0;position:absolute;bottom:60px;left:20px;font-size:14px;border-radius:2px;background:rgba(28,28,28,.9);padding:7px 20px;transition:all .3s ease-in-out;overflow:hidden;color:#fff;pointer-events:none}.dplayer-subtitle{position:absolute;bottom:40px;width:90%;left:5%;text-align:center;color:#fff;text-shadow:.5px .5px .5px rgba(0,0,0,.5);font-size:20px}.dplayer-subtitle.dplayer-subtitle-hide{display:none}.dplayer-mask{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1;display:none}.dplayer-mask.dplayer-mask-show{display:block}.dplayer-video-wrap{position:relative;background:#000;font-size:0;width:100%;height:100%}.dplayer-video-wrap .dplayer-video{width:100%;height:100%;display:none}.dplayer-video-wrap .dplayer-video-current{display:block}.dplayer-video-wrap .dplayer-video-prepare{display:none}.dplayer-info-panel{position:absolute;top:10px;left:10px;width:400px;background:rgba(28,28,28,.8);padding:10px;color:#fff;font-size:12px;border-radius:2px}.dplayer-info-panel-hide{display:none}.dplayer-info-panel .dplayer-info-panel-close{cursor:pointer;position:absolute;right:10px;top:10px}.dplayer-info-panel .dplayer-info-panel-item>span{display:inline-block;vertical-align:middle;line-height:15px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.dplayer-info-panel .dplayer-info-panel-item-title{width:100px;text-align:right;margin-right:10px}.dplayer-info-panel .dplayer-info-panel-item-data{width:260px} + +/*# sourceMappingURL=dplayer.min.css.map*/ \ No newline at end of file diff --git a/upload/static/js/player/dplayer.min.css.map b/upload/static/js/player/dplayer.min.css.map new file mode 100644 index 0000000000000000000000000000000000000000..c3b759ed129b5f0c05cdd561c6cfee7e1a87ff60 --- /dev/null +++ b/upload/static/js/player/dplayer.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/./node_modules/balloon-css/balloon.css","webpack://[name]/./src/css/index.scss"],"names":[],"mappings":"AAAA,qBACE,gBAAkB,CAEpB,eACE,kBACA,cAAgB,CAChB,qBAQE,iCACA,0BACA,4BACA,2BACA,yBACA,4BACA,kBACA,WACA,2BACA,iBAEA,kBAAoB,CAEtB,2CApBE,wBACA,gEACA,eACA,iBACA,UACA,oBACA,kCAWA,kBAEA,UAAY,CAeE,sBAbd,uQACA,0BACA,WACA,WAQA,UAAY,CAGd,8IACE,0BACA,kEACA,eACA,iBACA,UACA,mBAAqB,CACvB,kCACE,uBAAyB,CAC3B,yCACE,eAAiB,CACnB,mFACE,eAAiB,CACnB,0CAGE,kBAAoB,CAKtB,qFAPE,YACA,SAEA,uCACA,+BACA,6BACA,oBAAsB,CAQE,2CAJxB,iBAAmB,CAQrB,kOACE,kCACA,yBAA8B,CAChC,+CAEE,OACA,kBAAoB,CAKtB,+FAPE,YAGA,mCACA,2BACA,6BACA,oBAAsB,CAQE,gDALxB,SACA,iBAAmB,CAQrB,sPACE,+BACA,sBAA2B,CAC7B,gDAEE,QACA,kBAAoB,CAKtB,iGAPE,YAGA,mCACA,2BACA,6BACA,oBAAsB,CAQE,iDALxB,UACA,iBAAmB,CAQrB,0PACE,+BACA,sBAA2B,CAC7B,4CAEE,eAAiB,CAInB,yFALE,SAEA,SACA,wCACA,+BAAkC,CAUE,6CARpC,yQACA,0BACA,WACA,WAEA,cAAgB,CAOlB,0OACE,kCACA,yBAA8B,CAChC,iDACE,OACA,gBACA,SACA,oCACA,2BAA+B,CACjC,kDACE,yQACA,0BACA,WACA,WACA,SACA,eACA,SACA,oCACA,2BAA+B,CAIjC,8PACE,+BACA,sBAA2B,CAC7B,kDACE,QACA,gBACA,SACA,oCACA,2BAA+B,CACjC,mDACE,yQACA,0BACA,WACA,WACA,UACA,eACA,SACA,oCACA,2BAA+B,CAIjC,kQACE,+BACA,sBAA2B,CAC7B,4CACE,kBACA,WACA,QACA,uCACA,8BAAiC,CACnC,6CACE,wQACA,0BACA,UACA,YACA,iBACA,WACA,QACA,uCACA,8BAAiC,CAInC,0OACE,mCACA,0BAA8B,CAChC,6CACE,UACA,iBACA,QACA,wCACA,+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,IACE,mDACQ,0CAA8C,CACxD,IACE,kDACQ,yCAA+C,CACzD,IACE,mDACQ,0CAA8C,CACxD,IACE,qDACQ,4CAAgD,CAC1D,IACE,mDACQ,0CAA+C,CACzD,IACE,mDACQ,0CAA+C,CACzD,IACE,kDACQ,yCAA+C,CACzD,IACE,kDACQ,yCAA8C,CACxD,IACE,mDACQ,0CAA+C,CACzD,IACE,oDACQ,2CAAgD,CAC1D,MAEE,4CACQ,mCAAwC,CAAE,CAEtD,SACE,kBACA,gBACA,yBACG,sBACC,qBACI,iBACR,aAAe,CACf,WACE,sBAAwB,CAC1B,aACE,WACA,WAAa,CACb,sCAEE,SAAW,CACf,6BACE,WACA,YACA,gBACA,eACA,eACA,OACA,KAAO,CACP,mLAEE,2CACQ,mCACR,qCACQ,4BAA8B,CACxC,0FACE,oCACQ,4BACR,qCACQ,4BAA8B,CAiB1C,ytBACE,YAAc,CAChB,wCACE,cAAgB,CAClB,qCACE,aAAe,CACjB,gEACE,qCACQ,4BAA8B,CACxC,yBAGE,+FACE,SAAW,CAGb,2GACE,SAAW,CAAE,CACjB,+DACE,aAAe,CACjB,gLAGE,oCACQ,2BAA6B,CACvC,iCACE,WAAa,CAKb,+GACE,UACA,mCACQ,0BAA4B,CAGxC,+GACE,SAAW,CACb,wBACE,eACA,eACA,OACA,MACA,WACA,WAAa,CACf,2JAEE,YAAc,CAChB,+FACE,gBACA,oBAAsB,CACxB,0CACE,YAAc,CAElB,4BACE,eACA,MACA,OACA,SACA,SAAW,CAEb,sBACE,YAAc,CAEhB,qBACE,kBACA,2BAAkC,CAEpC,0CACE,eAAiB,CAEnB,eACE,kBACA,OACA,QACA,MACA,SACA,eACA,WACA,mBAAqB,CACrB,mCACE,kBACA,QACA,SACA,uBACA,YACA,WACA,aACA,sBACA,0BACA,kBACA,UACA,mBAAqB,CACrB,4DACE,wCACQ,+BAAiC,CAE/C,8BACE,GACE,UACA,2BACQ,kBAAoB,CAC9B,GACE,UACA,2BACQ,kBAAoB,CAAE,CAElC,sBACE,GACE,UACA,2BACQ,kBAAoB,CAC9B,GACE,UACA,2BACQ,kBAAoB,CAAE,CAChC,mCACE,kBACA,QACA,gBACA,WACA,kBACA,eACA,iBACA,kDACQ,yCAA2C,CACrD,sCACE,aACA,kBACA,QACA,SACA,uBACA,YACA,WACA,mBAAqB,CACrB,6DACE,YAAc,CAChB,4DACE,8DACQ,sDACR,UACA,iCACQ,wBAA0B,CAClC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAChC,mFACE,4BACQ,mBAAsB,CAEtC,6CACE,GACE,WACA,6BACQ,oBAA2B,CACrC,IACE,YACA,4BACQ,mBAA2B,CACrC,GACE,YACA,6BACQ,oBAA6B,CAAE,CAE3C,qCACE,GACE,WACA,6BACQ,oBAA2B,CACrC,IACE,YACA,4BACQ,mBAA2B,CACrC,GACE,YACA,6BACQ,oBAA6B,CAAE,CAE3C,yBACE,mSACA,YACA,UAAY,CAKd,6CAJE,kBACA,SACA,uBAA0B,CAaE,oBAR5B,OACA,QACA,YACA,eACA,yBACG,sBACC,qBACI,gBAAkB,CAE1B,8DACE,YAAc,CAChB,kFACE,aAAe,CACjB,sCACE,cACA,eACA,kBACA,YACA,wBACA,UAAY,CACZ,wFACE,2BACQ,kBAAoB,CAC9B,2DACE,kBACA,gBACA,oBACA,aACA,4BAA8B,CAChC,kEACE,kBACA,WACA,YACA,UACA,mBAAqB,CACvB,wDACE,kBACA,OACA,UACA,WACA,kBACA,gBACA,iCACA,WACA,eACA,kBACA,UACA,mCACA,iBACA,kBACA,UACA,mBAAqB,CACrB,+DACE,SAAW,CACf,mDACE,kBACA,WACA,WACA,8BACA,cAAgB,CAChB,mEAKE,8BAEA,uBAA0B,CAE5B,sIARE,kBACA,OACA,MACA,SAEA,WAEA,iBAAmB,CAQnB,kFACE,kBACA,MACA,UACA,gBACA,mBACA,YACA,WACA,kBACA,eACA,+BACA,2BACQ,kBAAoB,CACpC,mCACE,YACA,kBACA,QAAU,CACV,uDACE,aACA,kBACA,+BACA,UACA,YACA,SACA,UACA,WACA,UAAY,CACZ,qEACE,WAAa,CACf,qFACE,kBACA,OACA,KAAO,CACT,0EACE,kBACA,QACA,KAAO,CACT,oFACE,kBACA,6BACA,YACA,OACA,mCACA,kBACA,uBACA,eACA,YACA,+BACA,2BACQ,kBAAoB,CAC5B,iHACE,2BACQ,kBAAoB,CAC9B,sGACE,YAAc,CAChB,0FACE,cAAgB,CAClB,mHACE,eACA,WACA,gBAAkB,CACpB,kHACE,WAAa,CACb,iJACE,iBAAmB,CACrB,0IACE,yBAA2B,CAC7B,0IACE,yBAA2B,CAC7B,uHACE,UACA,gBACA,iBACA,qBACA,eACA,WACA,sBACA,kBACA,sBACA,kBACA,cAAgB,CAClB,qIACE,mBACA,aAAe,CACnB,mHACE,WAAa,CACb,yHACE,YACA,YACA,oBAAsB,CACxB,wHACE,WACA,YACA,qBACA,kBACA,sBACA,cAAgB,CAChB,8HACE,kDACQ,yCAA2C,CAC3D,8EACE,aACA,YACA,iBACA,eACA,iBACA,kBACA,kBACA,gBACA,SACA,YACA,sBACA,WACA,UAAY,CACZ,yGACE,WACA,UAAa,CAIf,yMACE,WACA,UAAa,CACf,2FACE,WACA,UAAa,CACf,yFACE,YAAc,CACpB,oEACE,WAAa,CACf,uDACE,UAAY,CACZ,qEACE,WAAa,CACjB,wGAEE,iBACA,WACA,mCACA,sBACA,eACA,cAAgB,CAClB,qDACE,qBACA,UACA,WACA,kBACA,iBACA,WACA,iBAAmB,CACrB,iDACE,WACA,YACA,YACA,6BACA,aACA,eACA,sBACA,sBACA,oBAAsB,CACtB,uEACE,+BACA,UAAY,CACd,6EACE,SAAW,CACb,sEACE,WACA,WACA,iBACA,cAAgB,CAClB,sEACE,oBAAsB,CACxB,sEACE,iBAAmB,CACrB,qEACE,UAAY,CAChB,mDACE,kBACA,qBACA,eACA,WAAa,CACb,sGACE,UAAY,CACd,+IACE,2BACQ,kBAAoB,CAC9B,sHACE,UAAY,CACd,+JACE,2BACQ,kBAAoB,CAC9B,4EACE,qBACA,qBACA,sBACA,WAAa,CACb,gGACE,kBACA,SACA,QACA,WACA,gBACA,8BAAiC,CACjC,0HACE,kBACA,SACA,OACA,YACA,wBACA,iBAAmB,CACnB,yIACE,kBACA,MACA,UACA,gBACA,mBACA,YACA,WACA,kBACA,eACA,+BACA,2BACQ,kBAAoB,CAItC,6GACE,qBACA,WAAa,CACb,yEACE,kBACA,QACA,YACA,2BACQ,mBACR,YACA,kBACA,6BACA,cACA,+BACA,gBACA,SAAW,CACX,6EACE,YAAc,CACd,0GACE,aAAe,CACnB,kGACE,2BACQ,kBAAoB,CAC9B,oGACE,WACA,aACA,iBAAmB,CACrB,iIACE,YAAc,CAChB,gIACE,aAAe,CACnB,0JAEE,YACA,iBACA,sBACA,eACA,iBAAmB,CACnB,sKAEE,mCAA2C,CAC/C,6EACE,aAAe,CACf,4FACE,eACA,cAAgB,CAClB,kGACE,YAAc,CAChB,6GACE,oBAAsB,CACxB,2HACE,YAAc,CAChB,sIACE,oBAAsB,CACxB,uGACE,eACA,sBACA,aACA,sBACA,YACA,UAAY,CACZ,4HACE,kBACA,UACA,WACA,WACA,gBACA,8BAAiC,CACjC,uJACE,kBACA,SACA,OACA,YACA,wBACA,gBACA,iBAAmB,CACnB,sKACE,kBACA,MACA,UACA,gBACA,mBACA,YACA,WACA,kBACA,eACA,+BACA,eAAiB,CAC7B,iDACE,qBACA,YACA,iBAAmB,CACnB,6EACE,aAAe,CACjB,uEACE,kBACA,UACA,UACA,YAAc,CAClB,oDACE,kBACA,qBACA,YACA,SAAW,CAGX,gKACE,aAAe,CACjB,0EACE,aACA,kBACA,YACA,WACA,WACA,mBAAqB,CACvB,0EACE,aACA,eACA,WACA,kBACA,6BACA,cACA,+BACA,gBACA,WACA,iBAAmB,CACrB,0EACE,YACA,sBACA,eACA,gBAAkB,CAClB,gFACE,mCAA2C,CACjD,oDACE,qBACA,WAAa,CACf,kDACE,WACA,eACA,qBACA,sBACA,kBAAoB,CACtB,mDACE,WACA,YACA,kBACA,YACA,sBACA,kBACA,QACA,UAAY,CACZ,yDACE,aACA,YACA,YAAc,CAChB,+DACE,qBACA,kBACA,iCACA,yBACA,YACA,WACA,mBACA,sBACA,eACA,0BAA4B,CAW9B,2IATE,WACA,kBACA,cACA,YACA,WACA,MACA,OACA,mBACA,0BAA4B,CAYd,qEAJd,gBAEA,mCAAyC,CAG3C,uEACE,+BAAuC,CACzC,8EACE,WACA,6BAAqC,CACvC,6EACE,SAAW,CAEnB,iBACE,kBACA,OACA,QACA,MACA,SACA,eACA,UAAY,CACZ,uCACE,qBACA,oBACA,yBACG,sBACC,qBACI,iBACR,eACA,mBACA,yCAAkD,CAClD,6CACE,kBACA,iBAAmB,CACvB,wCACE,kBACA,QACA,mCACQ,0BAA4B,CACpC,6DACE,sBACA,oCACQ,4BACR,oCACQ,2BAA6B,CAE3C,2BACE,GACE,mCACQ,0BAA4B,CAAE,CAE1C,mBACE,GACE,mCACQ,0BAA4B,CAAE,CACxC,+EAEE,kBACA,WACA,kBACA,iBAAmB,CACnB,yHAEE,uBACA,2CACQ,mCACR,oCACQ,2BAA6B,CAE3C,kCACE,GACE,kBAAoB,CACtB,GACE,kBAAoB,CAAE,CAE1B,0BACE,GACE,kBAAoB,CACtB,GACE,kBAAoB,CAAE,CAE1B,cACE,oBACA,kBACA,UACA,SACA,eACA,eAAiB,CACjB,kBACE,eACA,gBACA,eAAiB,CAErB,cACE,kBACA,YACA,kBACA,8BACA,cACA,gBACA,UACA,YAAc,CACd,gCACE,aAAe,CACjB,iCACE,YACA,sBACA,cAAgB,CAChB,uCACE,mCAA2C,CAC7C,mCAEE,eACA,iBACA,WACA,eACA,qBACA,sBACA,WACA,sBACA,mBACA,uBACA,eAAiB,CACjB,yCACE,oBAAsB,CAE9B,gBACE,UACA,kBACA,YACA,UACA,eACA,kBACA,6BACA,iBACA,+BACA,gBACA,WACA,mBAAqB,CAEvB,kBACE,kBACA,YACA,UACA,QACA,kBACA,WACA,0CACA,cAAgB,CAChB,wCACE,YAAc,CAElB,cACE,kBACA,MACA,SACA,OACA,QACA,UACA,YAAc,CACd,gCACE,aAAe,CAEnB,oBACE,kBACA,gBACA,YACA,WACA,WAAa,CACb,mCACE,WACA,YACA,YAAc,CAChB,2CACE,aAAe,CACjB,2CACE,YAAc,CAElB,oBACE,kBACA,SACA,UACA,YACA,6BACA,aACA,WACA,eACA,iBAAmB,CACnB,yBACE,YAAc,CAChB,8CACE,eACA,kBACA,WACA,QAAU,CACZ,kDACE,qBACA,sBACA,iBACA,mBACA,uBACA,eAAiB,CACnB,mDACE,YACA,iBACA,iBAAmB,CACrB,kDACE,WAAa,C","file":"DPlayer.min.css","sourcesContent":["button[data-balloon] {\n overflow: visible; }\n\n[data-balloon] {\n position: relative;\n cursor: pointer; }\n [data-balloon]:after {\n filter: alpha(opactiy=0);\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n -moz-opacity: 0;\n -khtml-opacity: 0;\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n font-family: sans-serif !important;\n font-weight: normal !important;\n font-style: normal !important;\n text-shadow: none !important;\n font-size: 12px !important;\n background: rgba(17, 17, 17, 0.9);\n border-radius: 4px;\n color: #fff;\n content: attr(data-balloon);\n padding: .5em 1em;\n position: absolute;\n white-space: nowrap;\n z-index: 10; }\n [data-balloon]:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(0)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 18px;\n height: 6px;\n filter: alpha(opactiy=0);\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n -moz-opacity: 0;\n -khtml-opacity: 0;\n opacity: 0;\n pointer-events: none;\n transition: all 0.18s ease-out 0.18s;\n content: '';\n position: absolute;\n z-index: 10; }\n [data-balloon]:hover:before, [data-balloon]:hover:after, [data-balloon][data-balloon-visible]:before, [data-balloon][data-balloon-visible]:after {\n filter: alpha(opactiy=100);\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n -moz-opacity: 1;\n -khtml-opacity: 1;\n opacity: 1;\n pointer-events: auto; }\n [data-balloon].font-awesome:after {\n font-family: FontAwesome; }\n [data-balloon][data-balloon-break]:after {\n white-space: pre; }\n [data-balloon][data-balloon-blunt]:before, [data-balloon][data-balloon-blunt]:after {\n transition: none; }\n [data-balloon][data-balloon-pos=\"up\"]:after {\n bottom: 100%;\n left: 50%;\n margin-bottom: 11px;\n -webkit-transform: translate(-50%, 10px);\n transform: translate(-50%, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up\"]:before {\n bottom: 100%;\n left: 50%;\n margin-bottom: 5px;\n -webkit-transform: translate(-50%, 10px);\n transform: translate(-50%, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up\"]:hover:after, [data-balloon][data-balloon-pos=\"up\"][data-balloon-visible]:after {\n -webkit-transform: translate(-50%, 0);\n transform: translate(-50%, 0); }\n [data-balloon][data-balloon-pos=\"up\"]:hover:before, [data-balloon][data-balloon-pos=\"up\"][data-balloon-visible]:before {\n -webkit-transform: translate(-50%, 0);\n transform: translate(-50%, 0); }\n [data-balloon][data-balloon-pos=\"up-left\"]:after {\n bottom: 100%;\n left: 0;\n margin-bottom: 11px;\n -webkit-transform: translate(0, 10px);\n transform: translate(0, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up-left\"]:before {\n bottom: 100%;\n left: 5px;\n margin-bottom: 5px;\n -webkit-transform: translate(0, 10px);\n transform: translate(0, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up-left\"]:hover:after, [data-balloon][data-balloon-pos=\"up-left\"][data-balloon-visible]:after {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos=\"up-left\"]:hover:before, [data-balloon][data-balloon-pos=\"up-left\"][data-balloon-visible]:before {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos=\"up-right\"]:after {\n bottom: 100%;\n right: 0;\n margin-bottom: 11px;\n -webkit-transform: translate(0, 10px);\n transform: translate(0, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up-right\"]:before {\n bottom: 100%;\n right: 5px;\n margin-bottom: 5px;\n -webkit-transform: translate(0, 10px);\n transform: translate(0, 10px);\n -webkit-transform-origin: top;\n transform-origin: top; }\n [data-balloon][data-balloon-pos=\"up-right\"]:hover:after, [data-balloon][data-balloon-pos=\"up-right\"][data-balloon-visible]:after {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos=\"up-right\"]:hover:before, [data-balloon][data-balloon-pos=\"up-right\"][data-balloon-visible]:before {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos='down']:after {\n left: 50%;\n margin-top: 11px;\n top: 100%;\n -webkit-transform: translate(-50%, -10px);\n transform: translate(-50%, -10px); }\n [data-balloon][data-balloon-pos='down']:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 18px;\n height: 6px;\n left: 50%;\n margin-top: 5px;\n top: 100%;\n -webkit-transform: translate(-50%, -10px);\n transform: translate(-50%, -10px); }\n [data-balloon][data-balloon-pos='down']:hover:after, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:after {\n -webkit-transform: translate(-50%, 0);\n transform: translate(-50%, 0); }\n [data-balloon][data-balloon-pos='down']:hover:before, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:before {\n -webkit-transform: translate(-50%, 0);\n transform: translate(-50%, 0); }\n [data-balloon][data-balloon-pos='down-left']:after {\n left: 0;\n margin-top: 11px;\n top: 100%;\n -webkit-transform: translate(0, -10px);\n transform: translate(0, -10px); }\n [data-balloon][data-balloon-pos='down-left']:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 18px;\n height: 6px;\n left: 5px;\n margin-top: 5px;\n top: 100%;\n -webkit-transform: translate(0, -10px);\n transform: translate(0, -10px); }\n [data-balloon][data-balloon-pos='down-left']:hover:after, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:after {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos='down-left']:hover:before, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:before {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos='down-right']:after {\n right: 0;\n margin-top: 11px;\n top: 100%;\n -webkit-transform: translate(0, -10px);\n transform: translate(0, -10px); }\n [data-balloon][data-balloon-pos='down-right']:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 18px;\n height: 6px;\n right: 5px;\n margin-top: 5px;\n top: 100%;\n -webkit-transform: translate(0, -10px);\n transform: translate(0, -10px); }\n [data-balloon][data-balloon-pos='down-right']:hover:after, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:after {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos='down-right']:hover:before, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:before {\n -webkit-transform: translate(0, 0);\n transform: translate(0, 0); }\n [data-balloon][data-balloon-pos='left']:after {\n margin-right: 11px;\n right: 100%;\n top: 50%;\n -webkit-transform: translate(10px, -50%);\n transform: translate(10px, -50%); }\n [data-balloon][data-balloon-pos='left']:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(-90 18 18)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 6px;\n height: 18px;\n margin-right: 5px;\n right: 100%;\n top: 50%;\n -webkit-transform: translate(10px, -50%);\n transform: translate(10px, -50%); }\n [data-balloon][data-balloon-pos='left']:hover:after, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:after {\n -webkit-transform: translate(0, -50%);\n transform: translate(0, -50%); }\n [data-balloon][data-balloon-pos='left']:hover:before, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:before {\n -webkit-transform: translate(0, -50%);\n transform: translate(0, -50%); }\n [data-balloon][data-balloon-pos='right']:after {\n left: 100%;\n margin-left: 11px;\n top: 50%;\n -webkit-transform: translate(-10px, -50%);\n transform: translate(-10px, -50%); }\n [data-balloon][data-balloon-pos='right']:before {\n background: no-repeat url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(90 6 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E\");\n background-size: 100% auto;\n width: 6px;\n height: 18px;\n left: 100%;\n margin-left: 5px;\n top: 50%;\n -webkit-transform: translate(-10px, -50%);\n transform: translate(-10px, -50%); }\n [data-balloon][data-balloon-pos='right']:hover:after, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:after {\n -webkit-transform: translate(0, -50%);\n transform: translate(0, -50%); }\n [data-balloon][data-balloon-pos='right']:hover:before, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:before {\n -webkit-transform: translate(0, -50%);\n transform: translate(0, -50%); }\n [data-balloon][data-balloon-length='small']:after {\n white-space: normal;\n width: 80px; }\n [data-balloon][data-balloon-length='medium']:after {\n white-space: normal;\n width: 150px; }\n [data-balloon][data-balloon-length='large']:after {\n white-space: normal;\n width: 260px; }\n [data-balloon][data-balloon-length='xlarge']:after {\n white-space: normal;\n width: 380px; }\n @media screen and (max-width: 768px) {\n [data-balloon][data-balloon-length='xlarge']:after {\n white-space: normal;\n width: 90vw; } }\n [data-balloon][data-balloon-length='fit']:after {\n white-space: normal;\n width: 100%; }\n","@import url(../../node_modules/balloon-css/balloon.css);\n@-webkit-keyframes my-face {\n 2% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 4% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 6% {\n -webkit-transform: translate(0, 1.5px) rotate(-1.5deg);\n transform: translate(0, 1.5px) rotate(-1.5deg); }\n 8% {\n -webkit-transform: translate(0, -1.5px) rotate(-1.5deg);\n transform: translate(0, -1.5px) rotate(-1.5deg); }\n 10% {\n -webkit-transform: translate(0, 2.5px) rotate(1.5deg);\n transform: translate(0, 2.5px) rotate(1.5deg); }\n 12% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 14% {\n -webkit-transform: translate(0, -1.5px) rotate(1.5deg);\n transform: translate(0, -1.5px) rotate(1.5deg); }\n 16% {\n -webkit-transform: translate(0, -0.5px) rotate(-1.5deg);\n transform: translate(0, -0.5px) rotate(-1.5deg); }\n 18% {\n -webkit-transform: translate(0, 0.5px) rotate(-1.5deg);\n transform: translate(0, 0.5px) rotate(-1.5deg); }\n 20% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 22% {\n -webkit-transform: translate(0, 0.5px) rotate(-1.5deg);\n transform: translate(0, 0.5px) rotate(-1.5deg); }\n 24% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 26% {\n -webkit-transform: translate(0, 0.5px) rotate(0.5deg);\n transform: translate(0, 0.5px) rotate(0.5deg); }\n 28% {\n -webkit-transform: translate(0, 0.5px) rotate(1.5deg);\n transform: translate(0, 0.5px) rotate(1.5deg); }\n 30% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 32% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 34% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 36% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 38% {\n -webkit-transform: translate(0, 1.5px) rotate(-1.5deg);\n transform: translate(0, 1.5px) rotate(-1.5deg); }\n 40% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 42% {\n -webkit-transform: translate(0, 2.5px) rotate(-1.5deg);\n transform: translate(0, 2.5px) rotate(-1.5deg); }\n 44% {\n -webkit-transform: translate(0, 1.5px) rotate(0.5deg);\n transform: translate(0, 1.5px) rotate(0.5deg); }\n 46% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 48% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 50% {\n -webkit-transform: translate(0, 0.5px) rotate(0.5deg);\n transform: translate(0, 0.5px) rotate(0.5deg); }\n 52% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 54% {\n -webkit-transform: translate(0, -1.5px) rotate(1.5deg);\n transform: translate(0, -1.5px) rotate(1.5deg); }\n 56% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 58% {\n -webkit-transform: translate(0, 0.5px) rotate(2.5deg);\n transform: translate(0, 0.5px) rotate(2.5deg); }\n 60% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 62% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 64% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 66% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 68% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 70% {\n -webkit-transform: translate(0, 1.5px) rotate(0.5deg);\n transform: translate(0, 1.5px) rotate(0.5deg); }\n 72% {\n -webkit-transform: translate(0, 2.5px) rotate(1.5deg);\n transform: translate(0, 2.5px) rotate(1.5deg); }\n 74% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 76% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 78% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 80% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 82% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 84% {\n -webkit-transform: translate(0, 1.5px) rotate(2.5deg);\n transform: translate(0, 1.5px) rotate(2.5deg); }\n 86% {\n -webkit-transform: translate(0, -1.5px) rotate(-1.5deg);\n transform: translate(0, -1.5px) rotate(-1.5deg); }\n 88% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 90% {\n -webkit-transform: translate(0, 2.5px) rotate(-0.5deg);\n transform: translate(0, 2.5px) rotate(-0.5deg); }\n 92% {\n -webkit-transform: translate(0, 0.5px) rotate(-0.5deg);\n transform: translate(0, 0.5px) rotate(-0.5deg); }\n 94% {\n -webkit-transform: translate(0, 2.5px) rotate(0.5deg);\n transform: translate(0, 2.5px) rotate(0.5deg); }\n 96% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 98% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 0%,\n 100% {\n -webkit-transform: translate(0, 0) rotate(0deg);\n transform: translate(0, 0) rotate(0deg); } }\n@keyframes my-face {\n 2% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 4% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 6% {\n -webkit-transform: translate(0, 1.5px) rotate(-1.5deg);\n transform: translate(0, 1.5px) rotate(-1.5deg); }\n 8% {\n -webkit-transform: translate(0, -1.5px) rotate(-1.5deg);\n transform: translate(0, -1.5px) rotate(-1.5deg); }\n 10% {\n -webkit-transform: translate(0, 2.5px) rotate(1.5deg);\n transform: translate(0, 2.5px) rotate(1.5deg); }\n 12% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 14% {\n -webkit-transform: translate(0, -1.5px) rotate(1.5deg);\n transform: translate(0, -1.5px) rotate(1.5deg); }\n 16% {\n -webkit-transform: translate(0, -0.5px) rotate(-1.5deg);\n transform: translate(0, -0.5px) rotate(-1.5deg); }\n 18% {\n -webkit-transform: translate(0, 0.5px) rotate(-1.5deg);\n transform: translate(0, 0.5px) rotate(-1.5deg); }\n 20% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 22% {\n -webkit-transform: translate(0, 0.5px) rotate(-1.5deg);\n transform: translate(0, 0.5px) rotate(-1.5deg); }\n 24% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 26% {\n -webkit-transform: translate(0, 0.5px) rotate(0.5deg);\n transform: translate(0, 0.5px) rotate(0.5deg); }\n 28% {\n -webkit-transform: translate(0, 0.5px) rotate(1.5deg);\n transform: translate(0, 0.5px) rotate(1.5deg); }\n 30% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 32% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 34% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 36% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 38% {\n -webkit-transform: translate(0, 1.5px) rotate(-1.5deg);\n transform: translate(0, 1.5px) rotate(-1.5deg); }\n 40% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 42% {\n -webkit-transform: translate(0, 2.5px) rotate(-1.5deg);\n transform: translate(0, 2.5px) rotate(-1.5deg); }\n 44% {\n -webkit-transform: translate(0, 1.5px) rotate(0.5deg);\n transform: translate(0, 1.5px) rotate(0.5deg); }\n 46% {\n -webkit-transform: translate(0, -1.5px) rotate(2.5deg);\n transform: translate(0, -1.5px) rotate(2.5deg); }\n 48% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 50% {\n -webkit-transform: translate(0, 0.5px) rotate(0.5deg);\n transform: translate(0, 0.5px) rotate(0.5deg); }\n 52% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 54% {\n -webkit-transform: translate(0, -1.5px) rotate(1.5deg);\n transform: translate(0, -1.5px) rotate(1.5deg); }\n 56% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 58% {\n -webkit-transform: translate(0, 0.5px) rotate(2.5deg);\n transform: translate(0, 0.5px) rotate(2.5deg); }\n 60% {\n -webkit-transform: translate(0, 2.5px) rotate(2.5deg);\n transform: translate(0, 2.5px) rotate(2.5deg); }\n 62% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 64% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 66% {\n -webkit-transform: translate(0, 1.5px) rotate(-0.5deg);\n transform: translate(0, 1.5px) rotate(-0.5deg); }\n 68% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 70% {\n -webkit-transform: translate(0, 1.5px) rotate(0.5deg);\n transform: translate(0, 1.5px) rotate(0.5deg); }\n 72% {\n -webkit-transform: translate(0, 2.5px) rotate(1.5deg);\n transform: translate(0, 2.5px) rotate(1.5deg); }\n 74% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 76% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 78% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 80% {\n -webkit-transform: translate(0, 1.5px) rotate(1.5deg);\n transform: translate(0, 1.5px) rotate(1.5deg); }\n 82% {\n -webkit-transform: translate(0, -0.5px) rotate(0.5deg);\n transform: translate(0, -0.5px) rotate(0.5deg); }\n 84% {\n -webkit-transform: translate(0, 1.5px) rotate(2.5deg);\n transform: translate(0, 1.5px) rotate(2.5deg); }\n 86% {\n -webkit-transform: translate(0, -1.5px) rotate(-1.5deg);\n transform: translate(0, -1.5px) rotate(-1.5deg); }\n 88% {\n -webkit-transform: translate(0, -0.5px) rotate(2.5deg);\n transform: translate(0, -0.5px) rotate(2.5deg); }\n 90% {\n -webkit-transform: translate(0, 2.5px) rotate(-0.5deg);\n transform: translate(0, 2.5px) rotate(-0.5deg); }\n 92% {\n -webkit-transform: translate(0, 0.5px) rotate(-0.5deg);\n transform: translate(0, 0.5px) rotate(-0.5deg); }\n 94% {\n -webkit-transform: translate(0, 2.5px) rotate(0.5deg);\n transform: translate(0, 2.5px) rotate(0.5deg); }\n 96% {\n -webkit-transform: translate(0, -0.5px) rotate(1.5deg);\n transform: translate(0, -0.5px) rotate(1.5deg); }\n 98% {\n -webkit-transform: translate(0, -1.5px) rotate(-0.5deg);\n transform: translate(0, -1.5px) rotate(-0.5deg); }\n 0%,\n 100% {\n -webkit-transform: translate(0, 0) rotate(0deg);\n transform: translate(0, 0) rotate(0deg); } }\n\n.dplayer {\n position: relative;\n overflow: hidden;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n line-height: 1; }\n .dplayer * {\n box-sizing: content-box; }\n .dplayer svg {\n width: 100%;\n height: 100%; }\n .dplayer svg path,\n .dplayer svg circle {\n fill: #fff; }\n .dplayer:-webkit-full-screen {\n width: 100%;\n height: 100%;\n background: #000;\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0; }\n .dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move,\n .dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move {\n -webkit-animation: danmaku-center 6s linear;\n animation: danmaku-center 6s linear;\n -webkit-animation-play-state: inherit;\n animation-play-state: inherit; }\n .dplayer:-webkit-full-screen .dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move {\n -webkit-animation: danmaku 8s linear;\n animation: danmaku 8s linear;\n -webkit-animation-play-state: inherit;\n animation-play-state: inherit; }\n .dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-showdan,\n .dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danmaku,\n .dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box .dplayer-setting-danunlimit {\n display: none; }\n .dplayer.dplayer-no-danmaku .dplayer-controller .dplayer-icons .dplayer-comment {\n display: none; }\n .dplayer.dplayer-no-danmaku .dplayer-danmaku {\n display: none; }\n .dplayer.dplayer-live .dplayer-time {\n display: none; }\n .dplayer.dplayer-live .dplayer-bar-wrap {\n display: none; }\n .dplayer.dplayer-live .dplayer-setting-speed {\n display: none; }\n .dplayer.dplayer-live .dplayer-setting-loop {\n display: none; }\n .dplayer.dplayer-live.dplayer-no-danmaku .dplayer-setting {\n display: none; }\n .dplayer.dplayer-arrow .dplayer-danmaku {\n font-size: 18px; }\n .dplayer.dplayer-arrow .dplayer-icon {\n margin: 0 -3px; }\n .dplayer.dplayer-playing .dplayer-danmaku .dplayer-danmaku-move {\n -webkit-animation-play-state: running;\n animation-play-state: running; }\n @media (min-width: 900px) {\n .dplayer.dplayer-playing .dplayer-controller-mask {\n opacity: 0; }\n .dplayer.dplayer-playing .dplayer-controller {\n opacity: 0; }\n .dplayer.dplayer-playing:hover .dplayer-controller-mask {\n opacity: 1; }\n .dplayer.dplayer-playing:hover .dplayer-controller {\n opacity: 1; } }\n .dplayer.dplayer-loading .dplayer-bezel .diplayer-loading-icon {\n display: block; }\n .dplayer.dplayer-loading .dplayer-danmaku,\n .dplayer.dplayer-loading .dplayer-danmaku-move, .dplayer.dplayer-paused .dplayer-danmaku,\n .dplayer.dplayer-paused .dplayer-danmaku-move {\n -webkit-animation-play-state: paused;\n animation-play-state: paused; }\n .dplayer.dplayer-hide-controller {\n cursor: none; }\n .dplayer.dplayer-hide-controller .dplayer-controller-mask {\n opacity: 0;\n -webkit-transform: translateY(100%);\n transform: translateY(100%); }\n .dplayer.dplayer-hide-controller .dplayer-controller {\n opacity: 0;\n -webkit-transform: translateY(100%);\n transform: translateY(100%); }\n .dplayer.dplayer-show-controller .dplayer-controller-mask {\n opacity: 1; }\n .dplayer.dplayer-show-controller .dplayer-controller {\n opacity: 1; }\n .dplayer.dplayer-fulled {\n position: fixed;\n z-index: 100000;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%; }\n .dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-volume,\n .dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-camera-icon {\n display: none; }\n .dplayer.dplayer-mobile .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: static;\n display: inline-block; }\n .dplayer.dplayer-mobile .dplayer-bar-time {\n display: none; }\n\n.dplayer-web-fullscreen-fix {\n position: fixed;\n top: 0;\n left: 0;\n margin: 0;\n padding: 0; }\n\n[data-balloon]:before {\n display: none; }\n\n[data-balloon]:after {\n padding: 0.3em 0.7em;\n background: rgba(17, 17, 17, 0.7); }\n\n[data-balloon][data-balloon-pos=\"up\"]:after {\n margin-bottom: 0; }\n\n.dplayer-bezel {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff;\n pointer-events: none; }\n .dplayer-bezel .dplayer-bezel-icon {\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -26px 0 0 -26px;\n height: 52px;\n width: 52px;\n padding: 12px;\n box-sizing: border-box;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 50%;\n opacity: 0;\n pointer-events: none; }\n .dplayer-bezel .dplayer-bezel-icon.dplayer-bezel-transition {\n -webkit-animation: bezel-hide .5s linear;\n animation: bezel-hide .5s linear; }\n\n@-webkit-keyframes bezel-hide {\n from {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1); }\n to {\n opacity: 0;\n -webkit-transform: scale(2);\n transform: scale(2); } }\n\n@keyframes bezel-hide {\n from {\n opacity: 1;\n -webkit-transform: scale(1);\n transform: scale(1); }\n to {\n opacity: 0;\n -webkit-transform: scale(2);\n transform: scale(2); } }\n .dplayer-bezel .dplayer-danloading {\n position: absolute;\n top: 50%;\n margin-top: -7px;\n width: 100%;\n text-align: center;\n font-size: 14px;\n line-height: 14px;\n -webkit-animation: my-face 5s infinite ease-in-out;\n animation: my-face 5s infinite ease-in-out; }\n .dplayer-bezel .diplayer-loading-icon {\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n margin: -18px 0 0 -18px;\n height: 36px;\n width: 36px;\n pointer-events: none; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-hide {\n display: none; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot {\n -webkit-animation: diplayer-loading-dot-fade .8s ease infinite;\n animation: diplayer-loading-dot-fade .8s ease infinite;\n opacity: 0;\n -webkit-transform-origin: 4px 4px;\n transform-origin: 4px 4px; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-7 {\n -webkit-animation-delay: 0.7s;\n animation-delay: 0.7s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-6 {\n -webkit-animation-delay: 0.6s;\n animation-delay: 0.6s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-5 {\n -webkit-animation-delay: 0.5s;\n animation-delay: 0.5s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-4 {\n -webkit-animation-delay: 0.4s;\n animation-delay: 0.4s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-3 {\n -webkit-animation-delay: 0.3s;\n animation-delay: 0.3s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-2 {\n -webkit-animation-delay: 0.2s;\n animation-delay: 0.2s; }\n .dplayer-bezel .diplayer-loading-icon .diplayer-loading-dot.diplayer-loading-dot-1 {\n -webkit-animation-delay: 0.1s;\n animation-delay: 0.1s; }\n\n@-webkit-keyframes diplayer-loading-dot-fade {\n 0% {\n opacity: .7;\n -webkit-transform: scale(1.2, 1.2);\n transform: scale(1.2, 1.2); }\n 50% {\n opacity: .25;\n -webkit-transform: scale(0.9, 0.9);\n transform: scale(0.9, 0.9); }\n to {\n opacity: .25;\n -webkit-transform: scale(0.85, 0.85);\n transform: scale(0.85, 0.85); } }\n\n@keyframes diplayer-loading-dot-fade {\n 0% {\n opacity: .7;\n -webkit-transform: scale(1.2, 1.2);\n transform: scale(1.2, 1.2); }\n 50% {\n opacity: .25;\n -webkit-transform: scale(0.9, 0.9);\n transform: scale(0.9, 0.9); }\n to {\n opacity: .25;\n -webkit-transform: scale(0.85, 0.85);\n transform: scale(0.85, 0.85); } }\n\n.dplayer-controller-mask {\n background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==) repeat-x bottom;\n height: 98px;\n width: 100%;\n position: absolute;\n bottom: 0;\n transition: all 0.3s ease; }\n\n.dplayer-controller {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: 41px;\n padding: 0 20px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n transition: all 0.3s ease; }\n .dplayer-controller.dplayer-controller-comment .dplayer-icons {\n display: none; }\n .dplayer-controller.dplayer-controller-comment .dplayer-icons.dplayer-comment-box {\n display: block; }\n .dplayer-controller .dplayer-bar-wrap {\n padding: 5px 0;\n cursor: pointer;\n position: absolute;\n bottom: 33px;\n width: calc(100% - 40px);\n height: 3px; }\n .dplayer-controller .dplayer-bar-wrap:hover .dplayer-bar .dplayer-played .dplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview {\n position: absolute;\n background: #fff;\n pointer-events: none;\n display: none;\n background-size: 16000px 100%; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar-preview-canvas {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 1;\n pointer-events: none; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar-time {\n position: absolute;\n left: 0px;\n top: -20px;\n width: 30px;\n border-radius: 4px;\n padding: 5px 7px;\n background-color: rgba(0, 0, 0, 0.62);\n color: #fff;\n font-size: 12px;\n text-align: center;\n opacity: 1;\n transition: opacity .1s ease-in-out;\n word-wrap: normal;\n word-break: normal;\n z-index: 2;\n pointer-events: none; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar-time.hidden {\n opacity: 0; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar {\n position: relative;\n height: 3px;\n width: 100%;\n background: rgba(255, 255, 255, 0.2);\n cursor: pointer; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-loaded {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n background: rgba(255, 255, 255, 0.4);\n height: 3px;\n transition: all 0.5s ease;\n will-change: width; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played {\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n height: 3px;\n will-change: width; }\n .dplayer-controller .dplayer-bar-wrap .dplayer-bar .dplayer-played .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n -webkit-transform: scale(0);\n transform: scale(0); }\n .dplayer-controller .dplayer-icons {\n height: 38px;\n position: absolute;\n bottom: 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box {\n display: none;\n position: absolute;\n transition: all .3s ease-in-out;\n z-index: 2;\n height: 38px;\n bottom: 0;\n left: 20px;\n right: 20px;\n color: #fff; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-icon {\n padding: 7px; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-icon {\n position: absolute;\n left: 0;\n top: 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-send-icon {\n position: absolute;\n right: 0;\n top: 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box {\n position: absolute;\n background: rgba(28, 28, 28, 0.9);\n bottom: 41px;\n left: 0;\n box-shadow: 0 0 25px rgba(0, 0, 0, 0.3);\n border-radius: 4px;\n padding: 10px 10px 16px;\n font-size: 14px;\n width: 204px;\n transition: all .3s ease-in-out;\n -webkit-transform: scale(0);\n transform: scale(0); }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box.dplayer-comment-setting-open {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box input[type=radio] {\n display: none; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box label {\n cursor: pointer; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-title {\n font-size: 13px;\n color: #fff;\n line-height: 30px; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type {\n font-size: 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type .dplayer-comment-setting-title {\n margin-bottom: 6px; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(2) span {\n border-radius: 4px 0 0 4px; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type label:nth-child(4) span {\n border-radius: 0 4px 4px 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type span {\n width: 33%;\n padding: 4px 6px;\n line-height: 16px;\n display: inline-block;\n font-size: 12px;\n color: #fff;\n border: 1px solid #fff;\n margin-right: -1px;\n box-sizing: border-box;\n text-align: center;\n cursor: pointer; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-type input:checked + span {\n background: #E4E4E6;\n color: #1c1c1c; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color {\n font-size: 0; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color label {\n font-size: 0;\n padding: 6px;\n display: inline-block; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span {\n width: 22px;\n height: 22px;\n display: inline-block;\n border-radius: 50%;\n box-sizing: border-box;\n cursor: pointer; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-setting-box .dplayer-comment-setting-color span:hover {\n -webkit-animation: my-face 5s infinite ease-in-out;\n animation: my-face 5s infinite ease-in-out; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input {\n outline: none;\n border: none;\n padding: 8px 31px;\n font-size: 14px;\n line-height: 18px;\n text-align: center;\n border-radius: 4px;\n background: none;\n margin: 0;\n height: 100%;\n box-sizing: border-box;\n width: 100%;\n color: #fff; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-webkit-input-placeholder {\n color: #fff;\n opacity: 0.8; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input:-ms-input-placeholder {\n color: #fff;\n opacity: 0.8; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-input-placeholder {\n color: #fff;\n opacity: 0.8; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::placeholder {\n color: #fff;\n opacity: 0.8; }\n .dplayer-controller .dplayer-icons.dplayer-comment-box .dplayer-comment-input::-ms-clear {\n display: none; }\n .dplayer-controller .dplayer-icons.dplayer-icons-left .dplayer-icon {\n padding: 7px; }\n .dplayer-controller .dplayer-icons.dplayer-icons-right {\n right: 20px; }\n .dplayer-controller .dplayer-icons.dplayer-icons-right .dplayer-icon {\n padding: 8px; }\n .dplayer-controller .dplayer-icons .dplayer-time,\n .dplayer-controller .dplayer-icons .dplayer-live-badge {\n line-height: 38px;\n color: #eee;\n text-shadow: 0 0 2px rgba(0, 0, 0, 0.5);\n vertical-align: middle;\n font-size: 13px;\n cursor: default; }\n .dplayer-controller .dplayer-icons .dplayer-live-dot {\n display: inline-block;\n width: 6px;\n height: 6px;\n vertical-align: 4%;\n margin-right: 5px;\n content: '';\n border-radius: 6px; }\n .dplayer-controller .dplayer-icons .dplayer-icon {\n width: 40px;\n height: 100%;\n border: none;\n background-color: transparent;\n outline: none;\n cursor: pointer;\n vertical-align: middle;\n box-sizing: border-box;\n display: inline-block; }\n .dplayer-controller .dplayer-icons .dplayer-icon .dplayer-icon-content {\n transition: all .2s ease-in-out;\n opacity: .8; }\n .dplayer-controller .dplayer-icons .dplayer-icon:hover .dplayer-icon-content {\n opacity: 1; }\n .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-quality-icon {\n color: #fff;\n width: auto;\n line-height: 22px;\n font-size: 14px; }\n .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-comment-icon {\n padding: 10px 9px 9px; }\n .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-setting-icon {\n padding-top: 8.5px; }\n .dplayer-controller .dplayer-icons .dplayer-icon.dplayer-volume-icon {\n width: 43px; }\n .dplayer-controller .dplayer-icons .dplayer-volume {\n position: relative;\n display: inline-block;\n cursor: pointer;\n height: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px; }\n .dplayer-controller .dplayer-icons .dplayer-volume:hover .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar {\n width: 45px; }\n .dplayer-controller .dplayer-icons .dplayer-volume.dplayer-volume-active .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap {\n display: inline-block;\n margin: 0 10px 0 -5px;\n vertical-align: middle;\n height: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar {\n position: relative;\n top: 17px;\n width: 0;\n height: 3px;\n background: #aaa;\n transition: all 0.3s ease-in-out; }\n .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n will-change: width; }\n .dplayer-controller .dplayer-icons .dplayer-volume .dplayer-volume-bar-wrap .dplayer-volume-bar .dplayer-volume-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n -webkit-transform: scale(0);\n transform: scale(0); }\n .dplayer-controller .dplayer-icons .dplayer-subtitle-btn {\n display: inline-block;\n height: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-setting {\n display: inline-block;\n height: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box {\n position: absolute;\n right: 0;\n bottom: 50px;\n -webkit-transform: scale(0);\n transform: scale(0);\n width: 150px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 0;\n transition: all .3s ease-in-out;\n overflow: hidden;\n z-index: 2; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div {\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box > div.dplayer-setting-origin-panel {\n display: block; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-open {\n -webkit-transform: scale(1);\n transform: scale(1); }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-narrow {\n width: 70px;\n height: 180px;\n text-align: center; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-origin-panel {\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-box.dplayer-setting-box-speed .dplayer-setting-speed-panel {\n display: block; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item,\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item {\n height: 30px;\n padding: 5px 10px;\n box-sizing: border-box;\n cursor: pointer;\n position: relative; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-item:hover,\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-speed-item:hover {\n background-color: rgba(255, 255, 255, 0.1); }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku {\n padding: 5px 0; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-label {\n padding: 0 10px;\n display: inline; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-label {\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku:hover .dplayer-danmaku-bar-wrap {\n display: inline-block; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-label {\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku.dplayer-setting-danmaku-active .dplayer-danmaku-bar-wrap {\n display: inline-block; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap {\n padding: 0 10px;\n box-sizing: border-box;\n display: none;\n vertical-align: middle;\n height: 100%;\n width: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar {\n position: relative;\n top: 8.5px;\n width: 100%;\n height: 3px;\n background: #fff;\n transition: all 0.3s ease-in-out; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner {\n position: absolute;\n bottom: 0;\n left: 0;\n height: 100%;\n transition: all 0.1s ease;\n background: #aaa;\n will-change: width; }\n .dplayer-controller .dplayer-icons .dplayer-setting .dplayer-setting-danmaku .dplayer-danmaku-bar-wrap .dplayer-danmaku-bar .dplayer-danmaku-bar-inner .dplayer-thumb {\n position: absolute;\n top: 0;\n right: 5px;\n margin-top: -4px;\n margin-right: -10px;\n height: 11px;\n width: 11px;\n border-radius: 50%;\n cursor: pointer;\n transition: all .3s ease-in-out;\n background: #aaa; }\n .dplayer-controller .dplayer-icons .dplayer-full {\n display: inline-block;\n height: 100%;\n position: relative; }\n .dplayer-controller .dplayer-icons .dplayer-full:hover .dplayer-full-in-icon {\n display: block; }\n .dplayer-controller .dplayer-icons .dplayer-full .dplayer-full-in-icon {\n position: absolute;\n top: -30px;\n z-index: 1;\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-quality {\n position: relative;\n display: inline-block;\n height: 100%;\n z-index: 2; }\n .dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-list {\n display: block; }\n .dplayer-controller .dplayer-icons .dplayer-quality:hover .dplayer-quality-mask {\n display: block; }\n .dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-mask {\n display: none;\n position: absolute;\n bottom: 38px;\n left: -18px;\n width: 80px;\n padding-bottom: 12px; }\n .dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-list {\n display: none;\n font-size: 12px;\n width: 80px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 5px 0;\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n text-align: center; }\n .dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item {\n height: 25px;\n box-sizing: border-box;\n cursor: pointer;\n line-height: 25px; }\n .dplayer-controller .dplayer-icons .dplayer-quality .dplayer-quality-item:hover {\n background-color: rgba(255, 255, 255, 0.1); }\n .dplayer-controller .dplayer-icons .dplayer-comment {\n display: inline-block;\n height: 100%; }\n .dplayer-controller .dplayer-icons .dplayer-label {\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n white-space: nowrap; }\n .dplayer-controller .dplayer-icons .dplayer-toggle {\n width: 32px;\n height: 20px;\n text-align: center;\n font-size: 0;\n vertical-align: middle;\n position: absolute;\n top: 5px;\n right: 10px; }\n .dplayer-controller .dplayer-icons .dplayer-toggle input {\n max-height: 0;\n max-width: 0;\n display: none; }\n .dplayer-controller .dplayer-icons .dplayer-toggle input + label {\n display: inline-block;\n position: relative;\n box-shadow: #dfdfdf 0 0 0 0 inset;\n border: 1px solid #dfdfdf;\n height: 20px;\n width: 32px;\n border-radius: 10px;\n box-sizing: border-box;\n cursor: pointer;\n transition: .2s ease-in-out; }\n .dplayer-controller .dplayer-icons .dplayer-toggle input + label:before {\n content: \"\";\n position: absolute;\n display: block;\n height: 18px;\n width: 18px;\n top: 0;\n left: 0;\n border-radius: 15px;\n transition: .2s ease-in-out; }\n .dplayer-controller .dplayer-icons .dplayer-toggle input + label:after {\n content: \"\";\n position: absolute;\n display: block;\n left: 0;\n top: 0;\n border-radius: 15px;\n background: #fff;\n transition: .2s ease-in-out;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n height: 18px;\n width: 18px; }\n .dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label {\n border-color: rgba(255, 255, 255, 0.5); }\n .dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:before {\n width: 30px;\n background: rgba(255, 255, 255, 0.5); }\n .dplayer-controller .dplayer-icons .dplayer-toggle input:checked + label:after {\n left: 12px; }\n\n.dplayer-danmaku {\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n font-size: 22px;\n color: #fff; }\n .dplayer-danmaku .dplayer-danmaku-item {\n display: inline-block;\n pointer-events: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n cursor: default;\n white-space: nowrap;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5); }\n .dplayer-danmaku .dplayer-danmaku-item--demo {\n position: absolute;\n visibility: hidden; }\n .dplayer-danmaku .dplayer-danmaku-right {\n position: absolute;\n right: 0;\n -webkit-transform: translateX(100%);\n transform: translateX(100%); }\n .dplayer-danmaku .dplayer-danmaku-right.dplayer-danmaku-move {\n will-change: transform;\n -webkit-animation: danmaku 5s linear;\n animation: danmaku 5s linear;\n -webkit-animation-play-state: paused;\n animation-play-state: paused; }\n\n@-webkit-keyframes danmaku {\n from {\n -webkit-transform: translateX(100%);\n transform: translateX(100%); } }\n\n@keyframes danmaku {\n from {\n -webkit-transform: translateX(100%);\n transform: translateX(100%); } }\n .dplayer-danmaku .dplayer-danmaku-top,\n .dplayer-danmaku .dplayer-danmaku-bottom {\n position: absolute;\n width: 100%;\n text-align: center;\n visibility: hidden; }\n .dplayer-danmaku .dplayer-danmaku-top.dplayer-danmaku-move,\n .dplayer-danmaku .dplayer-danmaku-bottom.dplayer-danmaku-move {\n will-change: visibility;\n -webkit-animation: danmaku-center 4s linear;\n animation: danmaku-center 4s linear;\n -webkit-animation-play-state: paused;\n animation-play-state: paused; }\n\n@-webkit-keyframes danmaku-center {\n from {\n visibility: visible; }\n to {\n visibility: visible; } }\n\n@keyframes danmaku-center {\n from {\n visibility: visible; }\n to {\n visibility: visible; } }\n\n.dplayer-logo {\n pointer-events: none;\n position: absolute;\n left: 20px;\n top: 20px;\n max-width: 50px;\n max-height: 50px; }\n .dplayer-logo img {\n max-width: 100%;\n max-height: 100%;\n background: none; }\n\n.dplayer-menu {\n position: absolute;\n width: 170px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.85);\n padding: 5px 0;\n overflow: hidden;\n z-index: 3;\n display: none; }\n .dplayer-menu.dplayer-menu-show {\n display: block; }\n .dplayer-menu .dplayer-menu-item {\n height: 30px;\n box-sizing: border-box;\n cursor: pointer; }\n .dplayer-menu .dplayer-menu-item:hover {\n background-color: rgba(255, 255, 255, 0.1); }\n .dplayer-menu .dplayer-menu-item a {\n display: inline-block;\n padding: 0 10px;\n line-height: 30px;\n color: #eee;\n font-size: 13px;\n display: inline-block;\n vertical-align: middle;\n width: 100%;\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden; }\n .dplayer-menu .dplayer-menu-item a:hover {\n text-decoration: none; }\n\n.dplayer-notice {\n opacity: 0;\n position: absolute;\n bottom: 60px;\n left: 20px;\n font-size: 14px;\n border-radius: 2px;\n background: rgba(28, 28, 28, 0.9);\n padding: 7px 20px;\n transition: all .3s ease-in-out;\n overflow: hidden;\n color: #fff;\n pointer-events: none; }\n\n.dplayer-subtitle {\n position: absolute;\n bottom: 40px;\n width: 90%;\n left: 5%;\n text-align: center;\n color: #fff;\n text-shadow: 0.5px 0.5px 0.5px rgba(0, 0, 0, 0.5);\n font-size: 20px; }\n .dplayer-subtitle.dplayer-subtitle-hide {\n display: none; }\n\n.dplayer-mask {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1;\n display: none; }\n .dplayer-mask.dplayer-mask-show {\n display: block; }\n\n.dplayer-video-wrap {\n position: relative;\n background: #000;\n font-size: 0;\n width: 100%;\n height: 100%; }\n .dplayer-video-wrap .dplayer-video {\n width: 100%;\n height: 100%;\n display: none; }\n .dplayer-video-wrap .dplayer-video-current {\n display: block; }\n .dplayer-video-wrap .dplayer-video-prepare {\n display: none; }\n\n.dplayer-info-panel {\n position: absolute;\n top: 10px;\n left: 10px;\n width: 400px;\n background: rgba(28, 28, 28, 0.8);\n padding: 10px;\n color: #fff;\n font-size: 12px;\n border-radius: 2px; }\n .dplayer-info-panel-hide {\n display: none; }\n .dplayer-info-panel .dplayer-info-panel-close {\n cursor: pointer;\n position: absolute;\n right: 10px;\n top: 10px; }\n .dplayer-info-panel .dplayer-info-panel-item > span {\n display: inline-block;\n vertical-align: middle;\n line-height: 15px;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden; }\n .dplayer-info-panel .dplayer-info-panel-item-title {\n width: 100px;\n text-align: right;\n margin-right: 10px; }\n .dplayer-info-panel .dplayer-info-panel-item-data {\n width: 260px; }\n"],"sourceRoot":""} \ No newline at end of file diff --git a/upload/static/js/player/dplayer.min.js b/upload/static/js/player/dplayer.min.js new file mode 100644 index 0000000000000000000000000000000000000000..e70f911ec59cbb55bd9cbd8dea08d9aa175e15ef --- /dev/null +++ b/upload/static/js/player/dplayer.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("DPlayer",[],t):"object"==typeof exports?exports.DPlayer=t():e.DPlayer=t()}(window,function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var a=t[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,n),a.l=!0,a.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)n.d(i,a,function(t){return e[t]}.bind(null,a));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=78)}([function(e,t,n){"use strict";var i="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},a=n(11),o=n(65),r=Object.prototype.toString;function s(e){return"[object Array]"===r.call(e)}function l(e){return null!==e&&"object"===(void 0===e?"undefined":i(e))}function c(e){return"[object Function]"===r.call(e)}function u(e,t){if(null!==e&&void 0!==e)if("object"!==(void 0===e?"undefined":i(e))&&(e=[e]),s(e))for(var n=0,a=e.length;n0?[t,n,i]:[n,i]).map(function(e){return e<10?"0"+e:""+e}).join(":")},getElementViewLeft:function(e){var t=e.offsetLeft,n=e.offsetParent,i=document.body.scrollLeft+document.documentElement.scrollLeft;if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement)for(;null!==n&&n!==e;)t+=n.offsetLeft,n=n.offsetParent;else for(;null!==n;)t+=n.offsetLeft,n=n.offsetParent;return t-i},getScrollPosition:function(){return{left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0,top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0}},setScrollPosition:function(e){var t=e.left,n=void 0===t?0:t,i=e.top,a=void 0===i?0:i;this.isFirefox?(document.documentElement.scrollLeft=n,document.documentElement.scrollTop=a):window.scrollTo(n,a)},isMobile:i,isFirefox:/firefox/i.test(window.navigator.userAgent),isChrome:/chrome/i.test(window.navigator.userAgent),storage:{set:function(e,t){localStorage.setItem(e,t)},get:function(e){return localStorage.getItem(e)}},cumulativeOffset:function(e){var t=0,n=0;do{t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent}while(e);return{top:t,left:n}},nameMap:{dragStart:i?"touchstart":"mousedown",dragMove:i?"touchmove":"mousemove",dragEnd:i?"touchend":"mouseup"},color2Number:function(e){return"#"===e[0]&&(e=e.substr(1)),3===e.length&&(e=""+e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),parseInt(e,16)+0&16777215},number2Color:function(e){return"#"+("00000"+e.toString(16)).slice(-6)},number2Type:function(e){switch(e){case 0:return"right";case 1:return"top";case 2:return"bottom";default:return"right"}}};t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=b(n(46)),a=b(n(45)),o=b(n(44)),r=b(n(43)),s=b(n(42)),l=b(n(41)),c=b(n(40)),u=b(n(39)),d=b(n(38)),p=b(n(37)),h=b(n(36)),f=b(n(35)),y=b(n(34)),m=b(n(33)),v=b(n(32)),g=b(n(31));function b(e){return e&&e.__esModule?e:{default:e}}var w={play:i.default,pause:a.default,volumeUp:o.default,volumeDown:r.default,volumeOff:s.default,full:l.default,fullWeb:c.default,setting:u.default,right:d.default,comment:p.default,commentOff:h.default,send:f.default,pallette:y.default,camera:m.default,subtitle:v.default,loading:g.default};t.default=w},function(e,t,n){"use strict";(function(t){var i=n(0),a=n(63),o={"Content-Type":"application/x-www-form-urlencoded"};function r(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var s,l={adapter:("undefined"!=typeof XMLHttpRequest?s=n(10):void 0!==t&&(s=n(10)),s),transformRequest:[function(e,t){return a(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(r(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)?(r(t,"application/json;charset=utf-8"),JSON.stringify(e)):e}],transformResponse:[function(e){if("string"==typeof e)try{e=JSON.parse(e)}catch(e){}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(e){return e>=200&&e<300}};l.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],function(e){l.headers[e]={}}),i.forEach(["post","put","patch"],function(e){l.headers[e]=i.merge(o)}),e.exports=l}).call(this,n(12))},function(e,t,n){"use strict";var i,a="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};i=function(){return this}();try{i=i||Function("return this")()||(0,eval)("this")}catch(e){"object"===("undefined"==typeof window?"undefined":a(window))&&(i=window)}e.exports=i},function(e,t,n){var i=n(6);e.exports=function(e){"use strict";var t="",n=(e=e||{}).enableSubtitle,a=e.subtitle,o=e.current,r=e.pic,s=i.$escape,l=e.screenshot,c=e.preload,u=e.url;n=a&&"webvtt"===a.type;return t+='\n\n ",n&&(t+='\n \n '),t+="\n"}},function(e,t,n){"use strict";e.exports=n(29)},function(e,t,n){"use strict";function i(e){this.message=e}i.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},i.prototype.__CANCEL__=!0,e.exports=i},function(e,t,n){"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},function(e,t,n){"use strict";var i=n(61);e.exports=function(e,t,n,a,o){var r=new Error(e);return i(r,t,n,a,o)}},function(e,t,n){"use strict";var i=n(0),a=n(62),o=n(60),r=n(59),s=n(58),l=n(9),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(57);e.exports=function(e){return new Promise(function(t,u){var d=e.data,p=e.headers;i.isFormData(d)&&delete p["Content-Type"];var h=new XMLHttpRequest,f="onreadystatechange",y=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||s(e.url)||(h=new window.XDomainRequest,f="onload",y=!0,h.onprogress=function(){},h.ontimeout=function(){}),e.auth){var m=e.auth.username||"",v=e.auth.password||"";p.Authorization="Basic "+c(m+":"+v)}if(h.open(e.method.toUpperCase(),o(e.url,e.params,e.paramsSerializer),!0),h.timeout=e.timeout,h[f]=function(){if(h&&(4===h.readyState||y)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in h?r(h.getAllResponseHeaders()):null,i={data:e.responseType&&"text"!==e.responseType?h.response:h.responseText,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:n,config:e,request:h};a(t,u,i),h=null}},h.onerror=function(){u(l("Network Error",e,null,h)),h=null},h.ontimeout=function(){u(l("timeout of "+e.timeout+"ms exceeded",e,"ECONNABORTED",h)),h=null},i.isStandardBrowserEnv()){var g=n(56),b=(e.withCredentials||s(e.url))&&e.xsrfCookieName?g.read(e.xsrfCookieName):void 0;b&&(p[e.xsrfHeaderName]=b)}if("setRequestHeader"in h&&i.forEach(p,function(e,t){void 0===d&&"content-type"===t.toLowerCase()?delete p[t]:h.setRequestHeader(t,e)}),e.withCredentials&&(h.withCredentials=!0),e.responseType)try{h.responseType=e.responseType}catch(t){if("json"!==e.responseType)throw t}"function"==typeof e.onDownloadProgress&&h.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then(function(e){h&&(h.abort(),u(e),h=null)}),void 0===d&&(d=null),h.send(d)})}},function(e,t,n){"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),i=0;i1)for(var n=1;n=n.width?(this.player.template.menu.style.right=n.width-e+"px",this.player.template.menu.style.left="initial"):(this.player.template.menu.style.left=e+"px",this.player.template.menu.style.right="initial"),t+this.player.template.menu.offsetHeight>=n.height?(this.player.template.menu.style.bottom=n.height-t+"px",this.player.template.menu.style.top="initial"):(this.player.template.menu.style.top=t+"px",this.player.template.menu.style.bottom="initial"),this.player.template.mask.classList.add("dplayer-mask-show"),this.player.events.trigger("contextmenu_show")}},{key:"hide",value:function(){this.player.template.mask.classList.remove("dplayer-mask-show"),this.player.template.menu.classList.remove("dplayer-menu-show"),this.player.events.trigger("contextmenu_hide")}}]),e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.default=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t.options.hotkey&&document.addEventListener("keydown",function(e){if(t.focus){var n=document.activeElement.tagName.toUpperCase(),i=document.activeElement.getAttribute("contenteditable");if("INPUT"!==n&&"TEXTAREA"!==n&&""!==i&&"true"!==i){var a=e||window.event,o=void 0;switch(a.keyCode){case 32:a.preventDefault(),t.toggle();break;case 37:a.preventDefault(),t.seek(t.video.currentTime-5),t.controller.setAutoHide();break;case 39:a.preventDefault(),t.seek(t.video.currentTime+5),t.controller.setAutoHide();break;case 38:a.preventDefault(),o=t.volume()+.1,t.volume(o);break;case 40:a.preventDefault(),o=t.volume()-.1,t.volume(o)}}}}),document.addEventListener("keydown",function(e){switch((e||window.event).keyCode){case 27:t.fullScreen.isFullScreen("web")&&t.fullScreen.cancel("web")}})}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=function(){function e(e,t){for(var n=0;ne.player.template.playedBarWrap.offsetWidth)return;var o=e.player.video.duration*(i/e.player.template.playedBarWrap.offsetWidth);a.default.isMobile&&e.thumbnails&&e.thumbnails.show(),e.thumbnails&&e.thumbnails.move(i),e.player.template.playedBarTime.style.left=i-20+"px",e.player.template.playedBarTime.innerText=a.default.secondToTime(o),e.player.template.playedBarTime.classList.remove("hidden")}}),this.player.template.playedBarWrap.addEventListener(a.default.nameMap.dragEnd,function(){a.default.isMobile&&e.thumbnails&&e.thumbnails.hide()}),a.default.isMobile||(this.player.template.playedBarWrap.addEventListener("mouseenter",function(){e.player.video.duration&&(e.thumbnails&&e.thumbnails.show(),e.player.template.playedBarTime.classList.remove("hidden"))}),this.player.template.playedBarWrap.addEventListener("mouseleave",function(){e.player.video.duration&&(e.thumbnails&&e.thumbnails.hide(),e.player.template.playedBarTime.classList.add("hidden"))}))}},{key:"initFullButton",value:function(){var e=this;this.player.template.browserFullButton.addEventListener("click",function(){e.player.fullScreen.toggle("browser")}),this.player.template.webFullButton.addEventListener("click",function(){e.player.fullScreen.toggle("web")})}},{key:"initVolumeButton",value:function(){var e=this,t=function(t){var n=t||window.event,i=((n.clientX||n.changedTouches[0].clientX)-a.default.getElementViewLeft(e.player.template.volumeBarWrap)-5.5)/35;e.player.volume(i)},n=function n(){document.removeEventListener(a.default.nameMap.dragEnd,n),document.removeEventListener(a.default.nameMap.dragMove,t),e.player.template.volumeButton.classList.remove("dplayer-volume-active")};this.player.template.volumeBarWrapWrap.addEventListener("click",function(t){var n=t||window.event,i=((n.clientX||n.changedTouches[0].clientX)-a.default.getElementViewLeft(e.player.template.volumeBarWrap)-5.5)/35;e.player.volume(i)}),this.player.template.volumeBarWrapWrap.addEventListener(a.default.nameMap.dragStart,function(){document.addEventListener(a.default.nameMap.dragMove,t),document.addEventListener(a.default.nameMap.dragEnd,n),e.player.template.volumeButton.classList.add("dplayer-volume-active")}),this.player.template.volumeIcon.addEventListener("click",function(){e.player.video.muted?(e.player.video.muted=!1,e.player.switchVolumeIcon(),e.player.bar.set("volume",e.player.volume(),"width")):(e.player.video.muted=!0,e.player.template.volumeIcon.innerHTML=r.default.volumeOff,e.player.bar.set("volume",0,"width"))})}},{key:"initQualityButton",value:function(){var e=this;this.player.options.video.quality&&this.player.template.qualityList.addEventListener("click",function(t){t.target.classList.contains("dplayer-quality-item")&&e.player.switchQuality(t.target.dataset.index)})}},{key:"initScreenshotButton",value:function(){var e=this;this.player.options.screenshot&&this.player.template.camareButton.addEventListener("click",function(){var t=document.createElement("canvas");t.width=e.player.video.videoWidth,t.height=e.player.video.videoHeight,t.getContext("2d").drawImage(e.player.video,0,0,t.width,t.height);var n=void 0;t.toBlob(function(e){n=URL.createObjectURL(e);var t=document.createElement("a");t.href=n,t.download="DPlayer.png",t.style.display="none",document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(n)}),e.player.events.trigger("screenshot",n)})}},{key:"initSubtitleButton",value:function(){var e=this;this.player.options.subtitle&&(this.player.events.on("subtitle_show",function(){e.player.template.subtitleButton.dataset.balloon=e.player.tran("Hide subtitle"),e.player.template.subtitleButtonInner.style.opacity="",e.player.user.set("subtitle",1)}),this.player.events.on("subtitle_hide",function(){e.player.template.subtitleButton.dataset.balloon=e.player.tran("Show subtitle"),e.player.template.subtitleButtonInner.style.opacity="0.4",e.player.user.set("subtitle",0)}),this.player.template.subtitleButton.addEventListener("click",function(){e.player.subtitle.toggle()}))}},{key:"setAutoHide",value:function(){var e=this;this.show(),clearTimeout(this.autoHideTimer),this.autoHideTimer=setTimeout(function(){!e.player.video.played.length||e.player.paused||e.disableAutoHide||e.hide()},3e3)}},{key:"show",value:function(){this.player.container.classList.remove("dplayer-hide-controller")}},{key:"hide",value:function(){this.player.container.classList.add("dplayer-hide-controller"),this.player.setting.hide(),this.player.comment&&this.player.comment.hide()}},{key:"isShow",value:function(){return!this.player.container.classList.contains("dplayer-hide-controller")}},{key:"toggle",value:function(){this.isShow()?this.hide():this.show()}},{key:"destroy",value:function(){clearTimeout(this.autoHideTimer)}}]),e}();t.default=l},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;nt&&!e.player.video.paused&&(e.player.container.classList.remove("dplayer-loading"),i=!1),t=n)},100)}},{key:"initfpsChecker",value:function(){var e=this;window.requestAnimationFrame(function(){if(e.enablefpsChecker)if(e.initfpsChecker(),e.fpsStart){e.fpsIndex++;var t=new Date;t-e.fpsStart>1e3&&(e.player.infoPanel.fps(e.fpsIndex/(t-e.fpsStart)*1e3),e.fpsStart=new Date,e.fpsIndex=0)}else e.fpsStart=new Date,e.fpsIndex=0;else e.fpsStart=0,e.fpsIndex=0})}},{key:"initinfoChecker",value:function(){var e=this;this.infoChecker=setInterval(function(){e.enableinfoChecker&&e.player.infoPanel.update()},1e3)}},{key:"enable",value:function(e){this["enable"+e+"Checker"]=!0,"fps"===e&&this.initfpsChecker()}},{key:"disable",value:function(e){this["enable"+e+"Checker"]=!1}},{key:"destroy",value:function(){var e=this;this.types.map(function(t){return e["enable"+t+"Checker"]=!1,e[t+"Checker"]&&clearInterval(e[t+"Checker"]),t})}}]),e}();t.default=a},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement;case"web":return this.player.container.classList.contains("dplayer-fulled")}}},{key:"request",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser",t="browser"===e?"web":"browser",n=this.isFullScreen(t);switch(n||(this.lastScrollPosition=r.default.getScrollPosition()),e){case"browser":this.player.container.requestFullscreen?this.player.container.requestFullscreen():this.player.container.mozRequestFullScreen?this.player.container.mozRequestFullScreen():this.player.container.webkitRequestFullscreen?this.player.container.webkitRequestFullscreen():this.player.video.webkitEnterFullscreen&&this.player.video.webkitEnterFullscreen();break;case"web":this.player.container.classList.add("dplayer-fulled"),document.body.classList.add("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen")}n&&this.cancel(t)}},{key:"cancel",value:function(){switch(arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser"){case"browser":document.cancelFullScreen?document.cancelFullScreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitCancelFullScreen&&document.webkitCancelFullScreen();break;case"web":this.player.container.classList.remove("dplayer-fulled"),document.body.classList.remove("dplayer-web-fullscreen-fix"),this.player.events.trigger("webfullscreen_cancel")}}},{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"browser";this.isFullScreen(e)?this.cancel(e):this.request(e)}}]),e}();t.default=s},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;nparseFloat(t.time);)n.push(t),t=this.dan[++this.danIndex];this.draw(n)}window.requestAnimationFrame(function(){e.frame()})}},{key:"opacity",value:function(e){if(void 0!==e){for(var t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n'+e[a].text+"":o.innerHTML=e[a].text,o.style.opacity=t._opacity,o.style.color=s.default.number2Color(e[a].color),o.addEventListener("animationend",function(){t.container.removeChild(o)});var r=t._measure(e[a].text),l=void 0;switch(e[a].type){case"right":(l=u(o,e[a].type,r))>=0&&(o.style.width=r+1+"px",o.style.top=n*l+"px",o.style.transform="translateX(-"+i+"px)");break;case"top":(l=u(o,e[a].type))>=0&&(o.style.top=n*l+"px");break;case"bottom":(l=u(o,e[a].type))>=0&&(o.style.bottom=n*l+"px");break;default:console.error("Can't handled danmaku type: "+e[a].type)}l>=0&&(o.classList.add("dplayer-danmaku-move"),d.appendChild(o))},h=0;h=this.options.time()){this.danIndex=e;break}this.danIndex=this.dan.length}}},{key:"clear",value:function(){this.danTunnel={right:{},top:{},bottom:{}},this.danIndex=0,this.options.container.innerHTML="",this.events&&this.events.trigger("danmaku_clear")}},{key:"htmlEncode",value:function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")}},{key:"resize",value:function(){for(var e=this.container.offsetWidth,t=this.container.getElementsByClassName("dplayer-danmaku-item"),n=0;n]/;a.$escape=function(e){return function(e){var t=""+e,n=o.exec(t);if(!n)return e;var i="",a=void 0,r=void 0,s=void 0;for(a=n.index,r=0;a\n
    \n '),a+='\n
    \n
    \n
    \n
    \n
    \n \n ',r.danmaku&&(a+='\n ',a+=s(l("Danmaku is loading")),a+="\n "),a+='\n ',a+=c.loading,a+='\n
    \n\n
    \n
    \n
    \n \n
    \n
    \n
    ',a+=s(l("Set danmaku color")),a+='
    \n \n \n \n \n \n \n
    \n
    \n
    ',a+=s(l("Set danmaku type")),a+='
    \n \n \n \n
    \n
    \n \n ',a+=c.send,a+='\n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n 0:00 /\n 0:00\n \n ',r.live&&(a+='\n ',a+=s(l("Live")),a+="\n "),a+='\n
    \n
    \n ',r.video.quality&&(a+='\n
    \n \n
    \n
    \n ',d(r.video.quality,function(e,t){a+='\n
    ',a+=s(e.name),a+="
    \n "}),a+="\n
    \n
    \n
    \n "),a+="\n ",r.screenshot&&(a+='\n
    \n
    \n "),a+='\n
    \n \n
    \n ",r.subtitle&&(a+='\n
    \n \n
    \n "),a+='\n
    \n \n
    \n
    \n
    \n ',a+=s(l("Speed")),a+='\n
    ',a+=c.right,a+='
    \n
    \n
    \n ',a+=s(l("Loop")),a+='\n
    \n \n \n
    \n
    \n
    \n ',a+=s(l("Show danmaku")),a+='\n
    \n \n \n
    \n
    \n
    \n ',a+=s(l("Unlimited danmaku")),a+='\n
    \n \n \n
    \n
    \n
    \n ',a+=s(l("Opacity for danmaku")),a+='\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n 0.5\n
    \n
    \n 0.75\n
    \n
    \n ',a+=s(l("Normal")),a+='\n
    \n
    \n 1.25\n
    \n
    \n 1.5\n
    \n
    \n 2\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    [x]
    \n
    \n Player version\n \n
    \n
    \n Player FPS\n \n
    \n
    \n Video type\n \n
    \n
    \n Video url\n \n
    \n
    \n Video resolution\n \n
    \n
    \n Video duration\n \n
    \n ',r.danmaku&&(a+='\n
    \n Danamku id\n \n
    \n
    \n Danamku api\n \n
    \n
    \n Danamku amount\n \n
    \n '),a+='\n
    \n
    \n ',d(r.contextmenu,function(e,t){a+='\n
    \n ',a+=s(l(e.text)),a+="\n
    \n "}),a+='\n
    \n
    '}},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t){e.exports=''},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n>8-s%1*8)){if((n=o.charCodeAt(s+=.75))>255)throw new a;t=t<<8|n}return r}},function(e,t,n){"use strict";var i=n(0);e.exports=i.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function a(e){var i=e;return t&&(n.setAttribute("href",i),i=n.href),n.setAttribute("href",i),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=a(window.location.href),function(t){var n=i.isString(t)?a(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},function(e,t,n){"use strict";var i=n(0),a=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,o,r={};return e?(i.forEach(e.split("\n"),function(e){if(o=e.indexOf(":"),t=i.trim(e.substr(0,o)).toLowerCase(),n=i.trim(e.substr(o+1)),t){if(r[t]&&a.indexOf(t)>=0)return;r[t]="set-cookie"===t?(r[t]?r[t]:[]).concat([n]):r[t]?r[t]+", "+n:n}}),r):r}},function(e,t,n){"use strict";var i=n(0);function a(e){return encodeURIComponent(e).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var o;if(n)o=n(t);else if(i.isURLSearchParams(t))o=t.toString();else{var r=[];i.forEach(t,function(e,t){null!==e&&void 0!==e&&(i.isArray(e)?t+="[]":e=[e],i.forEach(e,function(e){i.isDate(e)?e=e.toISOString():i.isObject(e)&&(e=JSON.stringify(e)),r.push(a(t)+"="+a(e))}))}),o=r.join("&")}return o&&(e+=(-1===e.indexOf("?")?"?":"&")+o),e}},function(e,t,n){"use strict";e.exports=function(e,t,n,i,a){return e.config=t,n&&(e.code=n),e.request=i,e.response=a,e}},function(e,t,n){"use strict";var i=n(9);e.exports=function(e,t,n){var a=n.config.validateStatus;n.status&&a&&!a(n.status)?t(i("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},function(e,t,n){"use strict";var i=n(0);e.exports=function(e,t){i.forEach(e,function(n,i){i!==t&&i.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[i])})}},function(e,t,n){"use strict";var i=n(3),a=n(0),o=n(55),r=n(54);function s(e){this.defaults=e,this.interceptors={request:new o,response:new o}}s.prototype.request=function(e){"string"==typeof e&&(e=a.merge({url:arguments[0]},arguments[1])),(e=a.merge(i,{method:"get"},this.defaults,e)).method=e.method.toLowerCase();var t=[r,void 0],n=Promise.resolve(e);for(this.interceptors.request.forEach(function(e){t.unshift(e.fulfilled,e.rejected)}),this.interceptors.response.forEach(function(e){t.push(e.fulfilled,e.rejected)});t.length;)n=n.then(t.shift(),t.shift());return n},a.forEach(["delete","get","head","options"],function(e){s.prototype[e]=function(t,n){return this.request(a.merge(n||{},{method:e,url:t}))}}),a.forEach(["post","put","patch"],function(e){s.prototype[e]=function(t,n,i){return this.request(a.merge(i||{},{method:e,url:t,data:n}))}}),e.exports=s},function(e,t,n){"use strict";function i(e){return!!e.constructor&&"function"==typeof e.constructor.isBuffer&&e.constructor.isBuffer(e)}e.exports=function(e){return null!=e&&(i(e)||function(e){return"function"==typeof e.readFloatLE&&"function"==typeof e.slice&&i(e.slice(0,0))}(e)||!!e._isBuffer)}},function(e,t,n){"use strict";var i=n(0),a=n(11),o=n(64),r=n(3);function s(e){var t=new o(e),n=a(o.prototype.request,t);return i.extend(n,o.prototype,t),i.extend(n,t),n}var l=s(r);l.Axios=o,l.create=function(e){return s(i.merge(r,e))},l.Cancel=n(7),l.CancelToken=n(50),l.isCancel=n(8),l.all=function(e){return Promise.all(e)},l.spread=n(49),e.exports=l,e.exports.default=l},function(e,t,n){"use strict";e.exports=n(66)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a=n(67),o=(i=a)&&i.__esModule?i:{default:i};t.default={send:function(e){o.default.post(e.url,e.data).then(function(t){var n=t.data;n&&0===n.code?e.success&&e.success(n):e.error&&e.error(n&&n.msg)}).catch(function(t){console.error(t),e.error&&e.error()})},read:function(e){o.default.get(e.url).then(function(t){var n=t.data;n&&0===n.code?e.success&&e.success(n.data.map(function(e){return{time:e[0],type:e[1],color:e[2],author:e[3],text:e[4]}})):e.error&&e.error(n&&n.msg)}).catch(function(t){console.error(t),e.error&&e.error()})}}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var i,a="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},o=n(68),r=(i=o)&&i.__esModule?i:{default:i};t.default=function(e){var t={container:e.element||document.getElementsByClassName("dplayer")[0],live:!1,autoplay:!1,theme:"#b7daff",loop:!1,lang:(navigator.language||navigator.browserLanguage).toLowerCase(),screenshot:!1,hotkey:!0,preload:"metadata",volume:.7,apiBackend:r.default,video:{},contextmenu:[],mutex:!0};for(var n in t)t.hasOwnProperty(n)&&!e.hasOwnProperty(n)&&(e[n]=t[n]);return e.video&&!e.video.type&&(e.video.type="auto"),"object"===a(e.danmaku)&&e.danmaku&&!e.danmaku.user&&(e.danmaku.user="DIYgod"),e.subtitle&&(!e.subtitle.type&&(e.subtitle.type="webvtt"),!e.subtitle.fontSize&&(e.subtitle.fontSize="20px"),!e.subtitle.bottom&&(e.subtitle.bottom="40px"),!e.subtitle.color&&(e.subtitle.color="#fff")),e.video.quality&&(e.video.url=e.video.quality[e.video.defaultQuality].url),e.lang&&(e.lang=e.lang.toLowerCase()),e.contextmenu=e.contextmenu.concat([{text:"Video info",click:function(e){e.infoPanel.triggle()}},{text:"About author",link:"https://diygod.me"},{text:"DPlayer v1.24.0",link:"https://github.com/MoePlayer/DPlayer"}]),e}},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=this.constructor;return this.then(function(n){return t.resolve(e()).then(function(){return n})},function(n){return t.resolve(e()).then(function(){return t.reject(n)})})}},function(e,t,n){"use strict";(function(e,t){!function(e,n){if(!e.setImmediate){var i,a,o,r,s,l=1,c={},u=!1,d=e.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(e);p=p&&p.setTimeout?p:e,"[object process]"==={}.toString.call(e.process)?i=function(e){t.nextTick(function(){f(e)})}:!function(){if(e.postMessage&&!e.importScripts){var t=!0,n=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage("","*"),e.onmessage=n,t}}()?e.MessageChannel?((o=new MessageChannel).port1.onmessage=function(e){f(e.data)},i=function(e){o.port2.postMessage(e)}):d&&"onreadystatechange"in d.createElement("script")?(a=d.documentElement,i=function(e){var t=d.createElement("script");t.onreadystatechange=function(){f(e),t.onreadystatechange=null,a.removeChild(t),t=null},a.appendChild(t)}):i=function(e){setTimeout(f,0,e)}:(r="setImmediate$"+Math.random()+"$",s=function(t){t.source===e&&"string"==typeof t.data&&0===t.data.indexOf(r)&&f(+t.data.slice(r.length))},e.addEventListener?e.addEventListener("message",s,!1):e.attachEvent("onmessage",s),i=function(t){e.postMessage(r+t,"*")}),p.setImmediate=function(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(71),t.setImmediate=setImmediate,t.clearImmediate=clearImmediate},function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0});var i,a="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},o=n(70),r=(i=o)&&i.__esModule?i:{default:i};var s=setTimeout;function l(){}function c(e){if(!(this instanceof c))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function u(e,t){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,c._immediateFn(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null!==n){var i;try{i=n(e._value)}catch(e){return void p(t.promise,e)}d(t.promise,i)}else(1===e._state?d:p)(t.promise,e._value)})):e._deferreds.push(t)}function d(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":a(t))||"function"==typeof t)){var n=t.then;if(t instanceof c)return e._state=3,e._value=t,void h(e);if("function"==typeof n)return void f((i=n,o=t,function(){i.apply(o,arguments)}),e)}e._state=1,e._value=t,h(e)}catch(t){p(e,t)}var i,o}function p(e,t){e._state=2,e._value=t,h(e)}function h(e){2===e._state&&0===e._deferreds.length&&c._immediateFn(function(){e._handled||c._unhandledRejectionFn(e._value)});for(var t=0,n=e._deferreds.length;te&&this.notice(this.tran("REW")+" "+(this.video.currentTime-e).toFixed(0)+" "+this.tran("s")),this.video.currentTime=e,this.danmaku&&this.danmaku.seek(),this.bar.set("played",e/this.video.duration,"width"),this.template.ptime.innerHTML=o.default.secondToTime(e)}},{key:"play",value:function(){var e=this;if(this.paused=!1,this.video.paused&&this.bezel.switch(c.default.play),this.template.playButton.innerHTML=c.default.pause,a.default.resolve(this.video.play()).catch(function(){e.pause()}).then(function(){}),this.timer.enable("loading"),this.container.classList.remove("dplayer-paused"),this.container.classList.add("dplayer-playing"),this.danmaku&&this.danmaku.play(),this.options.mutex)for(var t=0;t=.95?this.template.volumeIcon.innerHTML=c.default.volumeUp:this.volume()>0?this.template.volumeIcon.innerHTML=c.default.volumeDown:this.template.volumeIcon.innerHTML=c.default.volumeOff}},{key:"volume",value:function(e,t,n){if(e=parseFloat(e),!isNaN(e)){e=Math.max(e,0),e=Math.min(e,1),this.bar.set("volume",e,"width");var i=(100*e).toFixed(0)+"%";this.template.volumeBarWrapWrap.dataset.balloon=i,t||this.user.set("volume",e),n||this.notice(this.tran("Volume")+" "+(100*e).toFixed(0)+"%"),this.video.volume=e,this.video.muted&&(this.video.muted=!1),this.switchVolumeIcon()}return this.video.volume}},{key:"toggle",value:function(){this.video.paused?this.play():this.pause()}},{key:"on",value:function(e,t){this.events.on(e,t)}},{key:"switchVideo",value:function(e,t){this.pause(),this.video.poster=e.pic?e.pic:"",this.video.src=e.url,this.initMSE(this.video,e.type||"auto"),t&&(this.template.danmakuLoading.style.display="block",this.bar.set("played",0,"width"),this.bar.set("loaded",0,"width"),this.template.ptime.innerHTML="00:00",this.template.danmaku.innerHTML="",this.danmaku&&this.danmaku.reload({id:t.id,address:t.api,token:t.token,maximum:t.maximum,addition:t.addition,user:t.user}))}},{key:"initMSE",value:function(e,t){var n=this;if(this.type=t,this.options.video.customType&&this.options.video.customType[t])"[object Function]"===Object.prototype.toString.call(this.options.video.customType[t])?this.options.video.customType[t](this.video,this):console.error("Illegal customType: "+t);else switch("auto"===this.type&&(/m3u8(#|\?|$)/i.exec(e.src)?this.type="hls":/.flv(#|\?|$)/i.exec(e.src)?this.type="flv":/.mpd(#|\?|$)/i.exec(e.src)?this.type="dash":this.type="normal"),"hls"===this.type&&(e.canPlayType("application/x-mpegURL")||e.canPlayType("application/vnd.apple.mpegURL"))&&(this.type="normal"),this.type){case"hls":if(Hls)if(Hls.isSupported()){var i=new Hls;i.loadSource(e.src),i.attachMedia(e)}else this.notice("Error: Hls is not supported.");else this.notice("Error: Can't find Hls.");break;case"flv":if(flvjs&&flvjs.isSupported())if(flvjs.isSupported()){var a=flvjs.createPlayer({type:"flv",url:e.src});a.attachMediaElement(e),a.load()}else this.notice("Error: flvjs is not supported.");else this.notice("Error: Can't find flvjs.");break;case"dash":dashjs?dashjs.MediaPlayer().create().initialize(e,e.src,!1):this.notice("Error: Can't find dashjs.");break;case"webtorrent":if(WebTorrent)if(WebTorrent.WEBRTC_SUPPORT){this.container.classList.add("dplayer-loading");var o=new WebTorrent,r=e.src;o.add(r,function(e){e.files.find(function(e){return e.name.endsWith(".mp4")}).renderTo(n.video,{autoplay:n.options.autoplay},function(){n.container.classList.remove("dplayer-loading")})})}else this.notice("Error: Webtorrent is not supported.");else this.notice("Error: Can't find Webtorrent.")}}},{key:"initVideo",value:function(e,t){var n=this;this.initMSE(e,t),this.on("durationchange",function(){1!==e.duration&&(n.template.dtime.innerHTML=o.default.secondToTime(e.duration))}),this.on("progress",function(){var t=e.buffered.length?e.buffered.end(e.buffered.length-1)/e.duration:0;n.bar.set("loaded",t,"width")}),this.on("error",function(){n.tran&&n.notice&&(n.type,n.notice(n.tran("Video load failed"),-1))}),this.on("ended",function(){n.bar.set("played",1,"width"),n.setting.loop?(n.seek(0),e.play()):n.pause(),n.danmaku&&(n.danmaku.danIndex=0)}),this.on("play",function(){n.paused&&n.play()}),this.on("pause",function(){n.paused||n.pause()}),this.on("timeupdate",function(){n.bar.set("played",n.video.currentTime/n.video.duration,"width");var e=o.default.secondToTime(n.video.currentTime);n.template.ptime.innerHTML!==e&&(n.template.ptime.innerHTML=e)});for(var i=function(t){e.addEventListener(n.events.videoEvents[t],function(){n.events.trigger(n.events.videoEvents[t])})},a=0;a1&&void 0!==arguments[1]?arguments[1]:2e3,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.8;this.template.notice.innerHTML=e,this.template.notice.style.opacity=i,this.noticeTime&&clearTimeout(this.noticeTime),this.events.trigger("notice_show",e),n>0&&(this.noticeTime=setTimeout(function(){t.template.notice.style.opacity=0,t.events.trigger("notice_hide")},n))}},{key:"resize",value:function(){this.danmaku&&this.danmaku.resize(),this.events.trigger("resize")}},{key:"speed",value:function(e){this.video.playbackRate=e}},{key:"destroy",value:function(){M.splice(M.indexOf(this),1),this.pause(),this.controller.destroy(),this.timer.destroy(),this.video.src="",this.container.innerHTML="",this.events.trigger("destroy")}}],[{key:"version",get:function(){return"1.24.0"}}]),e}();t.default=_},,,function(e,t,n){},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),n(77);var i,a=n(74),o=(i=a)&&i.__esModule?i:{default:i};console.log("\n %c DPlayer v1.24.0 cd6afd7 %c http://dplayer.js.org \n\n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;"),t.default=o.default}]).default}); +//# sourceMappingURL=dplayer.min.js.map \ No newline at end of file diff --git a/upload/static/js/player/dplayer.min.js.map b/upload/static/js/player/dplayer.min.js.map new file mode 100644 index 0000000000000000000000000000000000000000..0aa570815b30b439d3ae0c0d355a003e92b275cb --- /dev/null +++ b/upload/static/js/player/dplayer.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack://[name]/webpack/universalModuleDefinition","webpack://[name]/webpack/bootstrap","webpack://[name]/./node_modules/axios/lib/utils.js","webpack://[name]/./src/js/utils.js","webpack://[name]/./src/js/icons.js","webpack://[name]/./node_modules/axios/lib/defaults.js","webpack://[name]/(webpack)/buildin/global.js","webpack://[name]/./src/template/video.art","webpack://[name]/./node_modules/art-template/lib/runtime.js","webpack://[name]/./node_modules/axios/lib/cancel/Cancel.js","webpack://[name]/./node_modules/axios/lib/cancel/isCancel.js","webpack://[name]/./node_modules/axios/lib/core/createError.js","webpack://[name]/./node_modules/axios/lib/adapters/xhr.js","webpack://[name]/./node_modules/axios/lib/helpers/bind.js","webpack://[name]/./node_modules/process/browser.js","webpack://[name]/./src/js/info-panel.js","webpack://[name]/./src/js/contextmenu.js","webpack://[name]/./src/js/hotkey.js","webpack://[name]/./src/js/comment.js","webpack://[name]/./src/js/setting.js","webpack://[name]/./src/js/thumbnails.js","webpack://[name]/./src/js/controller.js","webpack://[name]/./src/js/bezel.js","webpack://[name]/./src/js/timer.js","webpack://[name]/./src/js/bar.js","webpack://[name]/./src/js/subtitle.js","webpack://[name]/./src/js/user.js","webpack://[name]/./src/js/fullscreen.js","webpack://[name]/./src/js/events.js","webpack://[name]/./src/js/danmaku.js","webpack://[name]/./node_modules/detect-node/index.js","webpack://[name]/./node_modules/art-template/lib/compile/runtime.js","webpack://[name]/./src/template/player.art","webpack://[name]/./src/assets/loading.svg","webpack://[name]/./src/assets/subtitle.svg","webpack://[name]/./src/assets/camera.svg","webpack://[name]/./src/assets/pallette.svg","webpack://[name]/./src/assets/send.svg","webpack://[name]/./src/assets/comment-off.svg","webpack://[name]/./src/assets/comment.svg","webpack://[name]/./src/assets/right.svg","webpack://[name]/./src/assets/setting.svg","webpack://[name]/./src/assets/full-web.svg","webpack://[name]/./src/assets/full.svg","webpack://[name]/./src/assets/volume-off.svg","webpack://[name]/./src/assets/volume-down.svg","webpack://[name]/./src/assets/volume-up.svg","webpack://[name]/./src/assets/pause.svg","webpack://[name]/./src/assets/play.svg","webpack://[name]/./src/js/template.js","webpack://[name]/./src/js/i18n.js","webpack://[name]/./node_modules/axios/lib/helpers/spread.js","webpack://[name]/./node_modules/axios/lib/cancel/CancelToken.js","webpack://[name]/./node_modules/axios/lib/helpers/combineURLs.js","webpack://[name]/./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack://[name]/./node_modules/axios/lib/core/transformData.js","webpack://[name]/./node_modules/axios/lib/core/dispatchRequest.js","webpack://[name]/./node_modules/axios/lib/core/InterceptorManager.js","webpack://[name]/./node_modules/axios/lib/helpers/cookies.js","webpack://[name]/./node_modules/axios/lib/helpers/btoa.js","webpack://[name]/./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack://[name]/./node_modules/axios/lib/helpers/parseHeaders.js","webpack://[name]/./node_modules/axios/lib/helpers/buildURL.js","webpack://[name]/./node_modules/axios/lib/core/enhanceError.js","webpack://[name]/./node_modules/axios/lib/core/settle.js","webpack://[name]/./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack://[name]/./node_modules/axios/lib/core/Axios.js","webpack://[name]/./node_modules/is-buffer/index.js","webpack://[name]/./node_modules/axios/lib/axios.js","webpack://[name]/./node_modules/axios/index.js","webpack://[name]/./src/js/api.js","webpack://[name]/./src/js/options.js","webpack://[name]/./node_modules/promise-polyfill/src/finally.js","webpack://[name]/./node_modules/setimmediate/setImmediate.js","webpack://[name]/./node_modules/timers-browserify/main.js","webpack://[name]/./node_modules/promise-polyfill/src/index.js","webpack://[name]/./src/js/player.js","webpack://[name]/./src/js/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","iterator","obj","constructor","isBuffer","toString","isArray","val","isObject","isFunction","forEach","fn","length","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isUndefined","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","document","merge","result","assignValue","arguments","extend","a","b","thisArg","trim","str","replace","isMobile","test","userAgent","utils","secondToTime","second","hour","Math","floor","min","sec","map","num","join","getElementViewLeft","element","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","body","scrollLeft","documentElement","fullscreenElement","mozFullScreenElement","webkitFullscreenElement","getScrollPosition","left","pageXOffset","top","pageYOffset","scrollTop","setScrollPosition","_ref","_ref$left","undefined","_ref$top","this","isFirefox","scrollTo","isChrome","storage","set","localStorage","setItem","getItem","cumulativeOffset","offsetTop","nameMap","dragStart","dragMove","dragEnd","color2Number","color","substr","parseInt","number2Color","number","slice","number2Type","default","_play2","_interopRequireDefault","_pause2","_volumeUp2","_volumeDown2","_volumeOff2","_full2","_fullWeb2","_setting2","_right2","_comment2","_commentOff2","_send2","_pallette2","_camera2","_subtitle2","_loading2","Icons","play","pause","volumeUp","volumeDown","volumeOff","full","fullWeb","setting","right","comment","commentOff","send","pallette","camera","subtitle","loading","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","setContentTypeIfUnset","headers","adapter","defaults","XMLHttpRequest","process","transformRequest","data","JSON","stringify","transformResponse","parse","e","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","g","Function","eval","$$out","enableSubtitle","$data","pic","$escape","$imports","screenshot","preload","url","type","Cancel","message","__CANCEL__","enhanceError","config","code","request","response","error","Error","settle","buildURL","parseHeaders","isURLSameOrigin","createError","btoa","Promise","resolve","reject","requestData","requestHeaders","loadEvent","xDomain","XDomainRequest","onprogress","ontimeout","auth","username","password","Authorization","open","toUpperCase","params","paramsSerializer","readyState","responseURL","indexOf","responseHeaders","getAllResponseHeaders","responseType","responseText","statusText","onerror","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","onDownloadProgress","addEventListener","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","args","Array","apply","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","setTimeout","clearTimeout","currentQueue","queue","draining","queueIndex","cleanUpNextTick","concat","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","push","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","_createClass","defineProperties","target","props","descriptor","configurable","writable","Constructor","protoProps","staticProps","InfoPanel","player","_this","instance","TypeError","_classCallCheck","container","template","infoPanel","video","infoPanelClose","hide","beginTime","Date","now","update","timer","enable","classList","remove","disable","add","contains","show","infoVersion","innerHTML","infoType","infoUrl","options","infoResolution","videoWidth","videoHeight","infoDuration","duration","danmaku","infoDanmakuId","id","infoDanmakuApi","api","infoDanmakuAmount","dan","infoFPS","toFixed","ContextMenu","arr","arr2","from","_toConsumableArray","menuItem","item","index","contextmenu","click","event","preventDefault","clientRect","getBoundingClientRect","clientX","clientY","mask","x","y","menu","offsetWidth","width","style","offsetHeight","height","bottom","events","trigger","HotKey","hotkey","focus","tag","activeElement","tagName","editable","getAttribute","percentage","keyCode","toggle","seek","currentTime","controller","setAutoHide","volume","fullScreen","isFullScreen","_utils","_utils2","Comment","commentButton","commentSettingButton","toggleSetting","commentColorSettingBox","querySelector","commentSettingFill","fill","commentInput","commentSendFill","hideSetting","commentSendButton","disableAutoHide","commentSettingBox","showSetting","_this2","blur","text","notice","tran","Setting","settingButton","loop","loopToggle","checked","showDanmaku","user","showDanmakuToggle","unlimitDanmaku","unlimitDanmakuToggle","unlimit","speed","settingBox","_loop","speedItem","dataset","bar","opacity","danmakuMove","changedTouches","danmakuOpacityBarWrap","max","danmakuUp","removeEventListener","danmakuOpacityBox","danmakuOpacityBarWrapWrap","Thumbnails","barWidth","backgroundImage","display","position","backgroundPosition","ceil","_thumbnails2","_icons2","Controller","autoHideTimer","initPlayButton","initThumbnails","initPlayedBar","initFullButton","initQualityButton","initScreenshotButton","initSubtitleButton","initVolumeButton","playButton","videoWrap","controllerMask","_this3","thumbnails","barPreview","barWrap","resize","_this4","thumbMove","playedBarWrap","clientWidth","ptime","thumbUp","px","tx","time","move","playedBarTime","innerText","_this5","browserFullButton","webFullButton","_this6","volumeMove","volumeBarWrap","volumeButton","volumeBarWrapWrap","volumeIcon","muted","switchVolumeIcon","_this7","quality","qualityList","switchQuality","_this8","camareButton","canvas","createElement","getContext","drawImage","dataURL","toBlob","blob","URL","createObjectURL","link","href","download","appendChild","removeChild","revokeObjectURL","_this9","subtitleButton","balloon","subtitleButtonInner","_this10","played","paused","isShow","Bezel","icon","Timer","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","callback","types","init","lastPlayPos","currentPlayPos","bufferingDetected","loadingChecker","setInterval","enableloadingChecker","enablefpsChecker","initfpsChecker","fpsStart","fpsIndex","fpsCurrent","fps","infoChecker","enableinfoChecker","clearInterval","Bar","elements","volumeBar","playedBar","loaded","loadedBar","danmakuOpacityBar","direction","parseFloat","Subtitle","fontSize","textTracks","track","oncuechange","cue","activeCues","getCueAsHTML","User","storageName","unlimited","FullScreen","lastScrollPosition","fullscreenchange","anotherType","anotherTypeOn","requestFullscreen","mozRequestFullScreen","webkitRequestFullscreen","webkitEnterFullscreen","cancelFullScreen","mozCancelFullScreen","webkitCancelFullScreen","Events","videoEvents","playerEvents","info","console","Danmaku","danTunnel","danIndex","showing","_opacity","_measure","load","apiurl","maximum","address","endpoints","addition","_readAllEndpoints","results","sort","frame","newAPI","clear","readCount","apiBackend","success","msg","danmakuData","token","author","splice","htmlEncode","border","borderColor","draw","items","getElementsByClassName","itemHeight","danWidth","danHeight","itemY","danItemRight","ele","eleWidth","eleRight","danSpeed","getTunnel","tmp","_loop2","v","j","danRight","_ret2","docFragment","createDocumentFragment","_loop3","itemWidth","tunnel","transform","context","measureStyle","getComputedStyle","font","getPropertyValue","measureText","boolean","global","detectNode","runtime","ESCAPE_REG","content","html","regexResult","exec","lastIndex","char","charCodeAt","substring","xmlEscape","$each","_i","icons","$value","$index","logo","bottm","theme","live","defaultQuality","_player2","Template","danmakuLoading","bezel","querySelectorAll","dtime","qualityButton","tranTxt","zh-cn","Danmaku is loading","Top","Bottom","Rolling","Input danmaku, hit Enter","About author","DPlayer feedback","About DPlayer","Loop","Speed","Opacity for danmaku","Normal","Please input danmaku content!","Set danmaku color","Set danmaku type","Show danmaku","Video load failed","Danmaku load failed","Danmaku send failed","Switching to","Switched to","FF","REW","Unlimited danmaku","Send danmaku","Full screen","Web full screen","Send","Screenshot","Show subtitle","Hide subtitle","Volume","Live","Video info","zh-tw","lang","CancelToken","executor","resolvePromise","reason","throwIfRequested","source","baseURL","relativeURL","fns","transformData","isCancel","isAbsoluteURL","combineURLs","throwIfCancellationRequested","InterceptorManager","handlers","use","fulfilled","rejected","eject","h","write","expires","path","domain","secure","cookie","encodeURIComponent","toGMTString","match","RegExp","decodeURIComponent","chars","E","input","block","charCode","String","output","idx","charAt","originURL","msie","urlParsingNode","resolveURL","setAttribute","protocol","host","search","hash","hostname","port","pathname","location","requestURL","parsed","ignoreDuplicateOf","split","line","encode","serializedParams","parts","toISOString","normalizedName","dispatchRequest","Axios","instanceConfig","interceptors","chain","interceptor","unshift","shift","readFloatLE","isSlowBuffer","_isBuffer","createInstance","defaultConfig","axios","all","promises","spread","_axios","_axios2","post","catch","_api","_api2","defaultOption","autoplay","language","browserLanguage","mutex","defaultKey","triggle","setImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","getPrototypeOf","handle","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","script","onreadystatechange","random","attachEvent","task","clearImmediate","self","Timeout","clearFn","_id","_clearFn","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","_finally","_finally2","setTimeoutFunc","_state","_handled","_value","_deferreds","doResolve","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","newValue","finale","_unhandledRejectionFn","done","ex","prom","remaining","res","race","values","err","warn","_promisePolyfill2","_options2","_i18n2","_template2","_danmaku2","_events2","_fullscreen2","_user2","_bar2","_timer2","_bezel2","_controller2","_hotkey2","_contextmenu2","_infoPanel2","_video2","instances","DPlayer","qualityIndex","arrow","initVideo","switch","nostorage","nonotice","isNaN","formatPercentage","danmakuAPI","poster","src","initMSE","reload","customType","canPlayType","Hls","isSupported","hls","loadSource","attachMedia","flvjs","flvPlayer","createPlayer","attachMediaElement","dashjs","MediaPlayer","initialize","WebTorrent","WEBRTC_SUPPORT","client","torrentId","torrent","files","find","file","endsWith","renderTo","buffered","end","switchingQuality","videoHTML","videoEle","DOMParser","parseFromString","firstChild","insertBefore","getElementsByTagName","prevVideo","noticeTime","rate","playbackRate","destroy","_player","log"],"mappings":"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","file":"DPlayer.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"DPlayer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"DPlayer\"] = factory();\n\telse\n\t\troot[\"DPlayer\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 78);\n","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\nvar toString = Object.prototype.toString;\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\nfunction isArrayBufferView(val) {\n var result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n return result;\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\nfunction isNumber(val) {\n return typeof val === 'number';\n}\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\nfunction isObject(val) {\n return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object';\n}\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction forEach(obj, fn) {\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {\n obj = [obj];\n }\n if (isArray(obj)) {\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\nfunction merge() {\n var result = {};\n function assignValue(val, key) {\n if (_typeof(result[key]) === 'object' && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar isMobile = /mobile/i.test(window.navigator.userAgent);\nvar utils = {\n secondToTime: function secondToTime(second) {\n var add0 = function add0(num) {\n return num < 10 ? '0' + num : '' + num;\n };\n var hour = Math.floor(second / 3600);\n var min = Math.floor((second - hour * 3600) / 60);\n var sec = Math.floor(second - hour * 3600 - min * 60);\n return (hour > 0 ? [\n hour,\n min,\n sec\n ] : [\n min,\n sec\n ]).map(add0).join(':');\n },\n getElementViewLeft: function getElementViewLeft(element) {\n var actualLeft = element.offsetLeft;\n var current = element.offsetParent;\n var elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n } else {\n while (current !== null && current !== element) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n }\n return actualLeft - elementScrollLeft;\n },\n getScrollPosition: function getScrollPosition() {\n return {\n left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0,\n top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\n };\n },\n setScrollPosition: function setScrollPosition(_ref) {\n var _ref$left = _ref.left, left = _ref$left === undefined ? 0 : _ref$left, _ref$top = _ref.top, top = _ref$top === undefined ? 0 : _ref$top;\n if (this.isFirefox) {\n document.documentElement.scrollLeft = left;\n document.documentElement.scrollTop = top;\n } else {\n window.scrollTo(left, top);\n }\n },\n isMobile: isMobile,\n isFirefox: /firefox/i.test(window.navigator.userAgent),\n isChrome: /chrome/i.test(window.navigator.userAgent),\n storage: {\n set: function set(key, value) {\n localStorage.setItem(key, value);\n },\n get: function get(key) {\n return localStorage.getItem(key);\n }\n },\n cumulativeOffset: function cumulativeOffset(element) {\n var top = 0, left = 0;\n do {\n top += element.offsetTop || 0;\n left += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n return {\n top: top,\n left: left\n };\n },\n nameMap: {\n dragStart: isMobile ? 'touchstart' : 'mousedown',\n dragMove: isMobile ? 'touchmove' : 'mousemove',\n dragEnd: isMobile ? 'touchend' : 'mouseup'\n },\n color2Number: function color2Number(color) {\n if (color[0] === '#') {\n color = color.substr(1);\n }\n if (color.length === 3) {\n color = '' + color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n return parseInt(color, 16) + 0 & 16777215;\n },\n number2Color: function number2Color(number) {\n return '#' + ('00000' + number.toString(16)).slice(-6);\n },\n number2Type: function number2Type(number) {\n switch (number) {\n case 0:\n return 'right';\n case 1:\n return 'top';\n case 2:\n return 'bottom';\n default:\n return 'right';\n }\n }\n};\nexports.default = utils;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _play = require('../assets/play.svg');\nvar _play2 = _interopRequireDefault(_play);\nvar _pause = require('../assets/pause.svg');\nvar _pause2 = _interopRequireDefault(_pause);\nvar _volumeUp = require('../assets/volume-up.svg');\nvar _volumeUp2 = _interopRequireDefault(_volumeUp);\nvar _volumeDown = require('../assets/volume-down.svg');\nvar _volumeDown2 = _interopRequireDefault(_volumeDown);\nvar _volumeOff = require('../assets/volume-off.svg');\nvar _volumeOff2 = _interopRequireDefault(_volumeOff);\nvar _full = require('../assets/full.svg');\nvar _full2 = _interopRequireDefault(_full);\nvar _fullWeb = require('../assets/full-web.svg');\nvar _fullWeb2 = _interopRequireDefault(_fullWeb);\nvar _setting = require('../assets/setting.svg');\nvar _setting2 = _interopRequireDefault(_setting);\nvar _right = require('../assets/right.svg');\nvar _right2 = _interopRequireDefault(_right);\nvar _comment = require('../assets/comment.svg');\nvar _comment2 = _interopRequireDefault(_comment);\nvar _commentOff = require('../assets/comment-off.svg');\nvar _commentOff2 = _interopRequireDefault(_commentOff);\nvar _send = require('../assets/send.svg');\nvar _send2 = _interopRequireDefault(_send);\nvar _pallette = require('../assets/pallette.svg');\nvar _pallette2 = _interopRequireDefault(_pallette);\nvar _camera = require('../assets/camera.svg');\nvar _camera2 = _interopRequireDefault(_camera);\nvar _subtitle = require('../assets/subtitle.svg');\nvar _subtitle2 = _interopRequireDefault(_subtitle);\nvar _loading = require('../assets/loading.svg');\nvar _loading2 = _interopRequireDefault(_loading);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nvar Icons = {\n play: _play2.default,\n pause: _pause2.default,\n volumeUp: _volumeUp2.default,\n volumeDown: _volumeDown2.default,\n volumeOff: _volumeOff2.default,\n full: _full2.default,\n fullWeb: _fullWeb2.default,\n setting: _setting2.default,\n right: _right2.default,\n comment: _comment2.default,\n commentOff: _commentOff2.default,\n send: _send2.default,\n pallette: _pallette2.default,\n camera: _camera2.default,\n subtitle: _subtitle2.default,\n loading: _loading2.default\n};\nexports.default = Icons;","'use strict';\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\nvar DEFAULT_CONTENT_TYPE = { 'Content-Type': 'application/x-www-form-urlencoded' };\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n adapter = require('./adapters/http');\n }\n return adapter;\n}\nvar defaults = {\n adapter: getDefaultAdapter(),\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n transformResponse: [function transformResponse(data) {\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {\n }\n }\n return data;\n }],\n timeout: 0,\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n maxContentLength: -1,\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\ndefaults.headers = { common: { 'Accept': 'application/json, text/plain, */*' } };\nutils.forEach([\n 'delete',\n 'get',\n 'head'\n], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\nutils.forEach([\n 'post',\n 'put',\n 'patch'\n], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\nmodule.exports = defaults;","'use strict';\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar g;\ng = function () {\n return this;\n}();\ntry {\n g = g || Function('return this')() || (1, eval)('this');\n} catch (e) {\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object')\n g = window;\n}\nmodule.exports = g;","{{ set enableSubtitle = subtitle && subtitle.type === 'webvtt' }}\n\n {{ if enableSubtitle }}\n \n {{ /if }}\n","'use strict';\nmodule.exports = require('./compile/runtime');","'use strict';\nfunction Cancel(message) {\n this.message = message;\n}\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\nCancel.prototype.__CANCEL__ = true;\nmodule.exports = Cancel;","'use strict';\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};","'use strict';\nvar enhanceError = require('./enhanceError');\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};","'use strict';\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = typeof window !== 'undefined' && window.btoa && window.btoa.bind(window) || require('./../helpers/btoa');\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type'];\n }\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n if (process.env.NODE_ENV !== 'test' && typeof window !== 'undefined' && window.XDomainRequest && !('withCredentials' in request) && !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {\n };\n request.ontimeout = function handleTimeout() {\n };\n }\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n request.timeout = config.timeout;\n request[loadEvent] = function handleLoad() {\n if (!request || request.readyState !== 4 && !xDomain) {\n return;\n }\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n settle(resolve, reject, response);\n request = null;\n };\n request.onerror = function handleError() {\n reject(createError('Network Error', config, null, request));\n request = null;\n };\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED', request));\n request = null;\n };\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n delete requestHeaders[key];\n } else {\n request.setRequestHeader(key, val);\n }\n });\n }\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n if (config.cancelToken) {\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n request.abort();\n reject(cancel);\n request = null;\n });\n }\n if (requestData === undefined) {\n requestData = null;\n }\n request.send(requestData);\n });\n};","'use strict';\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};","'use strict';\nvar process = module.exports = {};\nvar cachedSetTimeout;\nvar cachedClearTimeout;\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n}());\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n return setTimeout(fun, 0);\n }\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n return clearTimeout(marker);\n }\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = '';\nprocess.versions = {};\nfunction noop() {\n}\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\nprocess.listeners = function (name) {\n return [];\n};\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar InfoPanel = function () {\n function InfoPanel(player) {\n var _this = this;\n _classCallCheck(this, InfoPanel);\n this.container = player.template.infoPanel;\n this.template = player.template;\n this.video = player.video;\n this.player = player;\n this.template.infoPanelClose.addEventListener('click', function () {\n _this.hide();\n });\n }\n _createClass(InfoPanel, [\n {\n key: 'show',\n value: function show() {\n this.beginTime = Date.now();\n this.update();\n this.player.timer.enable('info');\n this.player.timer.enable('fps');\n this.container.classList.remove('dplayer-info-panel-hide');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.timer.disable('info');\n this.player.timer.disable('fps');\n this.container.classList.add('dplayer-info-panel-hide');\n }\n },\n {\n key: 'triggle',\n value: function triggle() {\n if (this.container.classList.contains('dplayer-info-panel-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n },\n {\n key: 'update',\n value: function update() {\n this.template.infoVersion.innerHTML = 'v' + DPLAYER_VERSION + ' ' + GIT_HASH;\n this.template.infoType.innerHTML = this.player.type;\n this.template.infoUrl.innerHTML = this.player.options.video.url;\n this.template.infoResolution.innerHTML = this.player.video.videoWidth + ' x ' + this.player.video.videoHeight;\n this.template.infoDuration.innerHTML = this.player.video.duration;\n if (this.player.options.danmaku) {\n this.template.infoDanmakuId.innerHTML = this.player.options.danmaku.id;\n this.template.infoDanmakuApi.innerHTML = this.player.options.danmaku.api;\n this.template.infoDanmakuAmount.innerHTML = this.player.danmaku.dan.length;\n }\n }\n },\n {\n key: 'fps',\n value: function fps(value) {\n this.template.infoFPS.innerHTML = '' + value.toFixed(1);\n }\n }\n ]);\n return InfoPanel;\n}();\nexports.default = InfoPanel;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _toConsumableArray(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n } else {\n return Array.from(arr);\n }\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar ContextMenu = function () {\n function ContextMenu(player) {\n var _this = this;\n _classCallCheck(this, ContextMenu);\n this.player = player;\n [].concat(_toConsumableArray(this.player.template.menuItem)).map(function (item, index) {\n if (_this.player.options.contextmenu[index].click) {\n item.addEventListener('click', function () {\n _this.player.options.contextmenu[index].click(_this.player);\n _this.hide();\n });\n }\n return item;\n });\n this.player.container.addEventListener('contextmenu', function (e) {\n var event = e || window.event;\n event.preventDefault();\n var clientRect = _this.player.container.getBoundingClientRect();\n _this.show(event.clientX - clientRect.left, event.clientY - clientRect.top);\n _this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n });\n }\n _createClass(ContextMenu, [\n {\n key: 'show',\n value: function show(x, y) {\n this.player.template.menu.classList.add('dplayer-menu-show');\n var clientRect = this.player.container.getBoundingClientRect();\n if (x + this.player.template.menu.offsetWidth >= clientRect.width) {\n this.player.template.menu.style.right = clientRect.width - x + 'px';\n this.player.template.menu.style.left = 'initial';\n } else {\n this.player.template.menu.style.left = x + 'px';\n this.player.template.menu.style.right = 'initial';\n }\n if (y + this.player.template.menu.offsetHeight >= clientRect.height) {\n this.player.template.menu.style.bottom = clientRect.height - y + 'px';\n this.player.template.menu.style.top = 'initial';\n } else {\n this.player.template.menu.style.top = y + 'px';\n this.player.template.menu.style.bottom = 'initial';\n }\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.events.trigger('contextmenu_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.template.mask.classList.remove('dplayer-mask-show');\n this.player.template.menu.classList.remove('dplayer-menu-show');\n this.player.events.trigger('contextmenu_hide');\n }\n }\n ]);\n return ContextMenu;\n}();\nexports.default = ContextMenu;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar HotKey = function HotKey(player) {\n _classCallCheck(this, HotKey);\n if (player.options.hotkey) {\n document.addEventListener('keydown', function (e) {\n if (player.focus) {\n var tag = document.activeElement.tagName.toUpperCase();\n var editable = document.activeElement.getAttribute('contenteditable');\n if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true') {\n var event = e || window.event;\n var percentage = void 0;\n switch (event.keyCode) {\n case 32:\n event.preventDefault();\n player.toggle();\n break;\n case 37:\n event.preventDefault();\n player.seek(player.video.currentTime - 5);\n player.controller.setAutoHide();\n break;\n case 39:\n event.preventDefault();\n player.seek(player.video.currentTime + 5);\n player.controller.setAutoHide();\n break;\n case 38:\n event.preventDefault();\n percentage = player.volume() + 0.1;\n player.volume(percentage);\n break;\n case 40:\n event.preventDefault();\n percentage = player.volume() - 0.1;\n player.volume(percentage);\n break;\n }\n }\n }\n });\n }\n document.addEventListener('keydown', function (e) {\n var event = e || window.event;\n switch (event.keyCode) {\n case 27:\n if (player.fullScreen.isFullScreen('web')) {\n player.fullScreen.cancel('web');\n }\n break;\n }\n });\n};\nexports.default = HotKey;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Comment = function () {\n function Comment(player) {\n var _this = this;\n _classCallCheck(this, Comment);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.commentButton.addEventListener('click', function () {\n _this.show();\n });\n this.player.template.commentSettingButton.addEventListener('click', function () {\n _this.toggleSetting();\n });\n this.player.template.commentColorSettingBox.addEventListener('click', function () {\n var sele = _this.player.template.commentColorSettingBox.querySelector('input:checked+span');\n if (sele) {\n var color = _this.player.template.commentColorSettingBox.querySelector('input:checked').value;\n _this.player.template.commentSettingFill.style.fill = color;\n _this.player.template.commentInput.style.color = color;\n _this.player.template.commentSendFill.style.fill = color;\n }\n });\n this.player.template.commentInput.addEventListener('click', function () {\n _this.hideSetting();\n });\n this.player.template.commentInput.addEventListener('keydown', function (e) {\n var event = e || window.event;\n if (event.keyCode === 13) {\n _this.send();\n }\n });\n this.player.template.commentSendButton.addEventListener('click', function () {\n _this.send();\n });\n }\n _createClass(Comment, [\n {\n key: 'show',\n value: function show() {\n this.player.controller.disableAutoHide = true;\n this.player.template.controller.classList.add('dplayer-controller-comment');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.container.classList.add('dplayer-show-controller');\n this.player.template.commentInput.focus();\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.template.controller.classList.remove('dplayer-controller-comment');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n this.player.container.classList.remove('dplayer-show-controller');\n this.player.controller.disableAutoHide = false;\n this.hideSetting();\n }\n },\n {\n key: 'showSetting',\n value: function showSetting() {\n this.player.template.commentSettingBox.classList.add('dplayer-comment-setting-open');\n }\n },\n {\n key: 'hideSetting',\n value: function hideSetting() {\n this.player.template.commentSettingBox.classList.remove('dplayer-comment-setting-open');\n }\n },\n {\n key: 'toggleSetting',\n value: function toggleSetting() {\n if (this.player.template.commentSettingBox.classList.contains('dplayer-comment-setting-open')) {\n this.hideSetting();\n } else {\n this.showSetting();\n }\n }\n },\n {\n key: 'send',\n value: function send() {\n var _this2 = this;\n this.player.template.commentInput.blur();\n if (!this.player.template.commentInput.value.replace(/^\\s+|\\s+$/g, '')) {\n this.player.notice(this.player.tran('Please input danmaku content!'));\n return;\n }\n this.player.danmaku.send({\n text: this.player.template.commentInput.value,\n color: _utils2.default.color2Number(this.player.container.querySelector('.dplayer-comment-setting-color input:checked').value),\n type: parseInt(this.player.container.querySelector('.dplayer-comment-setting-type input:checked').value)\n }, function () {\n _this2.player.template.commentInput.value = '';\n _this2.hide();\n });\n }\n }\n ]);\n return Comment;\n}();\nexports.default = Comment;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Setting = function () {\n function Setting(player) {\n var _this = this;\n _classCallCheck(this, Setting);\n this.player = player;\n this.player.template.mask.addEventListener('click', function () {\n _this.hide();\n });\n this.player.template.settingButton.addEventListener('click', function () {\n _this.show();\n });\n this.loop = this.player.options.loop;\n this.player.template.loopToggle.checked = this.loop;\n this.player.template.loop.addEventListener('click', function () {\n _this.player.template.loopToggle.checked = !_this.player.template.loopToggle.checked;\n if (_this.player.template.loopToggle.checked) {\n _this.loop = true;\n } else {\n _this.loop = false;\n }\n _this.hide();\n });\n this.showDanmaku = this.player.user.get('danmaku');\n if (!this.showDanmaku) {\n this.player.danmaku && this.player.danmaku.hide();\n }\n this.player.template.showDanmakuToggle.checked = this.showDanmaku;\n this.player.template.showDanmaku.addEventListener('click', function () {\n _this.player.template.showDanmakuToggle.checked = !_this.player.template.showDanmakuToggle.checked;\n if (_this.player.template.showDanmakuToggle.checked) {\n _this.showDanmaku = true;\n _this.player.danmaku.show();\n } else {\n _this.showDanmaku = false;\n _this.player.danmaku.hide();\n }\n _this.player.user.set('danmaku', _this.showDanmaku ? 1 : 0);\n _this.hide();\n });\n this.unlimitDanmaku = this.player.user.get('unlimited');\n this.player.template.unlimitDanmakuToggle.checked = this.unlimitDanmaku;\n this.player.template.unlimitDanmaku.addEventListener('click', function () {\n _this.player.template.unlimitDanmakuToggle.checked = !_this.player.template.unlimitDanmakuToggle.checked;\n if (_this.player.template.unlimitDanmakuToggle.checked) {\n _this.unlimitDanmaku = true;\n _this.player.danmaku.unlimit(true);\n } else {\n _this.unlimitDanmaku = false;\n _this.player.danmaku.unlimit(false);\n }\n _this.player.user.set('unlimited', _this.unlimitDanmaku ? 1 : 0);\n _this.hide();\n });\n this.player.template.speed.addEventListener('click', function () {\n _this.player.template.settingBox.classList.add('dplayer-setting-box-narrow');\n _this.player.template.settingBox.classList.add('dplayer-setting-box-speed');\n });\n var _loop = function _loop(i) {\n _this.player.template.speedItem[i].addEventListener('click', function () {\n _this.player.speed(_this.player.template.speedItem[i].dataset.speed);\n _this.hide();\n });\n };\n for (var i = 0; i < this.player.template.speedItem.length; i++) {\n _loop(i);\n }\n if (this.player.danmaku) {\n var dWidth = 130;\n this.player.on('danmaku_opacity', function (percentage) {\n _this.player.bar.set('danmaku', percentage, 'width');\n _this.player.user.set('opacity', percentage);\n });\n this.player.danmaku.opacity(this.player.user.get('opacity'));\n var danmakuMove = function danmakuMove(event) {\n var e = event || window.event;\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n };\n var danmakuUp = function danmakuUp() {\n document.removeEventListener(_utils2.default.nameMap.dragEnd, danmakuUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, danmakuMove);\n _this.player.template.danmakuOpacityBox.classList.remove('dplayer-setting-danmaku-active');\n };\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this.player.template.danmakuOpacityBarWrap)) / dWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this.player.danmaku.opacity(percentage);\n });\n this.player.template.danmakuOpacityBarWrapWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n document.addEventListener(_utils2.default.nameMap.dragMove, danmakuMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, danmakuUp);\n _this.player.template.danmakuOpacityBox.classList.add('dplayer-setting-danmaku-active');\n });\n }\n }\n _createClass(Setting, [\n {\n key: 'hide',\n value: function hide() {\n var _this2 = this;\n this.player.template.settingBox.classList.remove('dplayer-setting-box-open');\n this.player.template.mask.classList.remove('dplayer-mask-show');\n setTimeout(function () {\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-narrow');\n _this2.player.template.settingBox.classList.remove('dplayer-setting-box-speed');\n }, 300);\n this.player.controller.disableAutoHide = false;\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.template.settingBox.classList.add('dplayer-setting-box-open');\n this.player.template.mask.classList.add('dplayer-mask-show');\n this.player.controller.disableAutoHide = true;\n }\n }\n ]);\n return Setting;\n}();\nexports.default = Setting;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Thumbnails = function () {\n function Thumbnails(options) {\n _classCallCheck(this, Thumbnails);\n this.container = options.container;\n this.barWidth = options.barWidth;\n this.container.style.backgroundImage = 'url(\\'' + options.url + '\\')';\n this.events = options.events;\n }\n _createClass(Thumbnails, [\n {\n key: 'resize',\n value: function resize(width, height) {\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n this.container.style.top = -height + 2 + 'px';\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.style.display = 'block';\n this.events && this.events.trigger('thumbnails_show');\n }\n },\n {\n key: 'move',\n value: function move(position) {\n this.container.style.backgroundPosition = '-' + (Math.ceil(position / this.barWidth * 100) - 1) * 160 + 'px 0';\n this.container.style.left = position - this.container.offsetWidth / 2 + 'px';\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.style.display = 'none';\n this.events && this.events.trigger('thumbnails_hide');\n }\n }\n ]);\n return Thumbnails;\n}();\nexports.default = Thumbnails;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _thumbnails = require('./thumbnails');\nvar _thumbnails2 = _interopRequireDefault(_thumbnails);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Controller = function () {\n function Controller(player) {\n var _this = this;\n _classCallCheck(this, Controller);\n this.player = player;\n this.autoHideTimer = 0;\n if (!_utils2.default.isMobile) {\n this.player.container.addEventListener('mousemove', function () {\n _this.setAutoHide();\n });\n this.player.container.addEventListener('click', function () {\n _this.setAutoHide();\n });\n this.player.on('play', function () {\n _this.setAutoHide();\n });\n this.player.on('pause', function () {\n _this.setAutoHide();\n });\n }\n this.initPlayButton();\n this.initThumbnails();\n this.initPlayedBar();\n this.initFullButton();\n this.initQualityButton();\n this.initScreenshotButton();\n this.initSubtitleButton();\n if (!_utils2.default.isMobile) {\n this.initVolumeButton();\n }\n }\n _createClass(Controller, [\n {\n key: 'initPlayButton',\n value: function initPlayButton() {\n var _this2 = this;\n this.player.template.playButton.addEventListener('click', function () {\n _this2.player.toggle();\n });\n if (!_utils2.default.isMobile) {\n this.player.template.videoWrap.addEventListener('click', function () {\n _this2.player.toggle();\n });\n this.player.template.controllerMask.addEventListener('click', function () {\n _this2.player.toggle();\n });\n } else {\n this.player.template.videoWrap.addEventListener('click', function () {\n _this2.toggle();\n });\n this.player.template.controllerMask.addEventListener('click', function () {\n _this2.toggle();\n });\n }\n }\n },\n {\n key: 'initThumbnails',\n value: function initThumbnails() {\n var _this3 = this;\n if (this.player.options.video.thumbnails) {\n this.thumbnails = new _thumbnails2.default({\n container: this.player.template.barPreview,\n barWidth: this.player.template.barWrap.offsetWidth,\n url: this.player.options.video.thumbnails,\n events: this.player.events\n });\n this.player.on('loadedmetadata', function () {\n _this3.thumbnails.resize(160, _this3.player.video.videoHeight / _this3.player.video.videoWidth * 160);\n });\n }\n }\n },\n {\n key: 'initPlayedBar',\n value: function initPlayedBar() {\n var _this4 = this;\n var thumbMove = function thumbMove(e) {\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this4.player.template.playedBarWrap)) / _this4.player.template.playedBarWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this4.player.bar.set('played', percentage, 'width');\n _this4.player.template.ptime.innerHTML = _utils2.default.secondToTime(percentage * _this4.player.video.duration);\n };\n var thumbUp = function thumbUp(e) {\n document.removeEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this4.player.template.playedBarWrap)) / _this4.player.template.playedBarWrap.clientWidth;\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n _this4.player.bar.set('played', percentage, 'width');\n _this4.player.seek(_this4.player.bar.get('played') * _this4.player.video.duration);\n _this4.player.timer.enable('progress');\n };\n this.player.template.playedBarWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n _this4.player.timer.disable('progress');\n document.addEventListener(_utils2.default.nameMap.dragMove, thumbMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, thumbUp);\n });\n this.player.template.playedBarWrap.addEventListener(_utils2.default.nameMap.dragMove, function (e) {\n if (_this4.player.video.duration) {\n var px = _utils2.default.cumulativeOffset(_this4.player.template.playedBarWrap).left;\n var tx = (e.clientX || e.changedTouches[0].clientX) - px;\n if (tx < 0 || tx > _this4.player.template.playedBarWrap.offsetWidth) {\n return;\n }\n var time = _this4.player.video.duration * (tx / _this4.player.template.playedBarWrap.offsetWidth);\n if (_utils2.default.isMobile) {\n _this4.thumbnails && _this4.thumbnails.show();\n }\n _this4.thumbnails && _this4.thumbnails.move(tx);\n _this4.player.template.playedBarTime.style.left = tx - 20 + 'px';\n _this4.player.template.playedBarTime.innerText = _utils2.default.secondToTime(time);\n _this4.player.template.playedBarTime.classList.remove('hidden');\n }\n });\n this.player.template.playedBarWrap.addEventListener(_utils2.default.nameMap.dragEnd, function () {\n if (_utils2.default.isMobile) {\n _this4.thumbnails && _this4.thumbnails.hide();\n }\n });\n if (!_utils2.default.isMobile) {\n this.player.template.playedBarWrap.addEventListener('mouseenter', function () {\n if (_this4.player.video.duration) {\n _this4.thumbnails && _this4.thumbnails.show();\n _this4.player.template.playedBarTime.classList.remove('hidden');\n }\n });\n this.player.template.playedBarWrap.addEventListener('mouseleave', function () {\n if (_this4.player.video.duration) {\n _this4.thumbnails && _this4.thumbnails.hide();\n _this4.player.template.playedBarTime.classList.add('hidden');\n }\n });\n }\n }\n },\n {\n key: 'initFullButton',\n value: function initFullButton() {\n var _this5 = this;\n this.player.template.browserFullButton.addEventListener('click', function () {\n _this5.player.fullScreen.toggle('browser');\n });\n this.player.template.webFullButton.addEventListener('click', function () {\n _this5.player.fullScreen.toggle('web');\n });\n }\n },\n {\n key: 'initVolumeButton',\n value: function initVolumeButton() {\n var _this6 = this;\n var vWidth = 35;\n var volumeMove = function volumeMove(event) {\n var e = event || window.event;\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this6.player.template.volumeBarWrap) - 5.5) / vWidth;\n _this6.player.volume(percentage);\n };\n var volumeUp = function volumeUp() {\n document.removeEventListener(_utils2.default.nameMap.dragEnd, volumeUp);\n document.removeEventListener(_utils2.default.nameMap.dragMove, volumeMove);\n _this6.player.template.volumeButton.classList.remove('dplayer-volume-active');\n };\n this.player.template.volumeBarWrapWrap.addEventListener('click', function (event) {\n var e = event || window.event;\n var percentage = ((e.clientX || e.changedTouches[0].clientX) - _utils2.default.getElementViewLeft(_this6.player.template.volumeBarWrap) - 5.5) / vWidth;\n _this6.player.volume(percentage);\n });\n this.player.template.volumeBarWrapWrap.addEventListener(_utils2.default.nameMap.dragStart, function () {\n document.addEventListener(_utils2.default.nameMap.dragMove, volumeMove);\n document.addEventListener(_utils2.default.nameMap.dragEnd, volumeUp);\n _this6.player.template.volumeButton.classList.add('dplayer-volume-active');\n });\n this.player.template.volumeIcon.addEventListener('click', function () {\n if (_this6.player.video.muted) {\n _this6.player.video.muted = false;\n _this6.player.switchVolumeIcon();\n _this6.player.bar.set('volume', _this6.player.volume(), 'width');\n } else {\n _this6.player.video.muted = true;\n _this6.player.template.volumeIcon.innerHTML = _icons2.default.volumeOff;\n _this6.player.bar.set('volume', 0, 'width');\n }\n });\n }\n },\n {\n key: 'initQualityButton',\n value: function initQualityButton() {\n var _this7 = this;\n if (this.player.options.video.quality) {\n this.player.template.qualityList.addEventListener('click', function (e) {\n if (e.target.classList.contains('dplayer-quality-item')) {\n _this7.player.switchQuality(e.target.dataset.index);\n }\n });\n }\n }\n },\n {\n key: 'initScreenshotButton',\n value: function initScreenshotButton() {\n var _this8 = this;\n if (this.player.options.screenshot) {\n this.player.template.camareButton.addEventListener('click', function () {\n var canvas = document.createElement('canvas');\n canvas.width = _this8.player.video.videoWidth;\n canvas.height = _this8.player.video.videoHeight;\n canvas.getContext('2d').drawImage(_this8.player.video, 0, 0, canvas.width, canvas.height);\n var dataURL = void 0;\n canvas.toBlob(function (blob) {\n dataURL = URL.createObjectURL(blob);\n var link = document.createElement('a');\n link.href = dataURL;\n link.download = 'DPlayer.png';\n link.style.display = 'none';\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(dataURL);\n });\n _this8.player.events.trigger('screenshot', dataURL);\n });\n }\n }\n },\n {\n key: 'initSubtitleButton',\n value: function initSubtitleButton() {\n var _this9 = this;\n if (this.player.options.subtitle) {\n this.player.events.on('subtitle_show', function () {\n _this9.player.template.subtitleButton.dataset.balloon = _this9.player.tran('Hide subtitle');\n _this9.player.template.subtitleButtonInner.style.opacity = '';\n _this9.player.user.set('subtitle', 1);\n });\n this.player.events.on('subtitle_hide', function () {\n _this9.player.template.subtitleButton.dataset.balloon = _this9.player.tran('Show subtitle');\n _this9.player.template.subtitleButtonInner.style.opacity = '0.4';\n _this9.player.user.set('subtitle', 0);\n });\n this.player.template.subtitleButton.addEventListener('click', function () {\n _this9.player.subtitle.toggle();\n });\n }\n }\n },\n {\n key: 'setAutoHide',\n value: function setAutoHide() {\n var _this10 = this;\n this.show();\n clearTimeout(this.autoHideTimer);\n this.autoHideTimer = setTimeout(function () {\n if (_this10.player.video.played.length && !_this10.player.paused && !_this10.disableAutoHide) {\n _this10.hide();\n }\n }, 3000);\n }\n },\n {\n key: 'show',\n value: function show() {\n this.player.container.classList.remove('dplayer-hide-controller');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.player.container.classList.add('dplayer-hide-controller');\n this.player.setting.hide();\n this.player.comment && this.player.comment.hide();\n }\n },\n {\n key: 'isShow',\n value: function isShow() {\n return !this.player.container.classList.contains('dplayer-hide-controller');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.isShow()) {\n this.hide();\n } else {\n this.show();\n }\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n clearTimeout(this.autoHideTimer);\n }\n }\n ]);\n return Controller;\n}();\nexports.default = Controller;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bezel = function () {\n function Bezel(container) {\n var _this = this;\n _classCallCheck(this, Bezel);\n this.container = container;\n this.container.addEventListener('animationend', function () {\n _this.container.classList.remove('dplayer-bezel-transition');\n });\n }\n _createClass(Bezel, [{\n key: 'switch',\n value: function _switch(icon) {\n this.container.innerHTML = icon;\n this.container.classList.add('dplayer-bezel-transition');\n }\n }]);\n return Bezel;\n}();\nexports.default = Bezel;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Timer = function () {\n function Timer(player) {\n _classCallCheck(this, Timer);\n this.player = player;\n window.requestAnimationFrame = function () {\n return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {\n window.setTimeout(callback, 1000 / 60);\n };\n }();\n this.types = [\n 'loading',\n 'info',\n 'fps'\n ];\n this.init();\n }\n _createClass(Timer, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.types.map(function (item) {\n if (item !== 'fps') {\n _this['init' + item + 'Checker']();\n }\n return item;\n });\n }\n },\n {\n key: 'initloadingChecker',\n value: function initloadingChecker() {\n var _this2 = this;\n var lastPlayPos = 0;\n var currentPlayPos = 0;\n var bufferingDetected = false;\n this.loadingChecker = setInterval(function () {\n if (_this2.enableloadingChecker) {\n currentPlayPos = _this2.player.video.currentTime;\n if (!bufferingDetected && currentPlayPos === lastPlayPos && !_this2.player.video.paused) {\n _this2.player.container.classList.add('dplayer-loading');\n bufferingDetected = true;\n }\n if (bufferingDetected && currentPlayPos > lastPlayPos && !_this2.player.video.paused) {\n _this2.player.container.classList.remove('dplayer-loading');\n bufferingDetected = false;\n }\n lastPlayPos = currentPlayPos;\n }\n }, 100);\n }\n },\n {\n key: 'initfpsChecker',\n value: function initfpsChecker() {\n var _this3 = this;\n window.requestAnimationFrame(function () {\n if (_this3.enablefpsChecker) {\n _this3.initfpsChecker();\n if (!_this3.fpsStart) {\n _this3.fpsStart = new Date();\n _this3.fpsIndex = 0;\n } else {\n _this3.fpsIndex++;\n var fpsCurrent = new Date();\n if (fpsCurrent - _this3.fpsStart > 1000) {\n _this3.player.infoPanel.fps(_this3.fpsIndex / (fpsCurrent - _this3.fpsStart) * 1000);\n _this3.fpsStart = new Date();\n _this3.fpsIndex = 0;\n }\n }\n } else {\n _this3.fpsStart = 0;\n _this3.fpsIndex = 0;\n }\n });\n }\n },\n {\n key: 'initinfoChecker',\n value: function initinfoChecker() {\n var _this4 = this;\n this.infoChecker = setInterval(function () {\n if (_this4.enableinfoChecker) {\n _this4.player.infoPanel.update();\n }\n }, 1000);\n }\n },\n {\n key: 'enable',\n value: function enable(type) {\n this['enable' + type + 'Checker'] = true;\n if (type === 'fps') {\n this.initfpsChecker();\n }\n }\n },\n {\n key: 'disable',\n value: function disable(type) {\n this['enable' + type + 'Checker'] = false;\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n var _this5 = this;\n this.types.map(function (item) {\n _this5['enable' + item + 'Checker'] = false;\n _this5[item + 'Checker'] && clearInterval(_this5[item + 'Checker']);\n return item;\n });\n }\n }\n ]);\n return Timer;\n}();\nexports.default = Timer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Bar = function () {\n function Bar(template) {\n _classCallCheck(this, Bar);\n this.elements = {};\n this.elements.volume = template.volumeBar;\n this.elements.played = template.playedBar;\n this.elements.loaded = template.loadedBar;\n this.elements.danmaku = template.danmakuOpacityBar;\n }\n _createClass(Bar, [\n {\n key: 'set',\n value: function set(type, percentage, direction) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.elements[type].style[direction] = percentage * 100 + '%';\n }\n },\n {\n key: 'get',\n value: function get(type) {\n return parseFloat(this.elements[type].style.width) / 100;\n }\n }\n ]);\n return Bar;\n}();\nexports.default = Bar;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Subtitle = function () {\n function Subtitle(container, video, options, events) {\n _classCallCheck(this, Subtitle);\n this.container = container;\n this.video = video;\n this.options = options;\n this.events = events;\n this.init();\n }\n _createClass(Subtitle, [\n {\n key: 'init',\n value: function init() {\n var _this = this;\n this.container.style.fontSize = this.options.fontSize;\n this.container.style.bottom = this.options.bottom;\n this.container.style.color = this.options.color;\n if (this.video.textTracks && this.video.textTracks[0]) {\n var track = this.video.textTracks[0];\n track.oncuechange = function () {\n var cue = track.activeCues[0];\n if (cue) {\n _this.container.innerHTML = '';\n var p = document.createElement('p');\n p.appendChild(cue.getCueAsHTML());\n _this.container.appendChild(p);\n } else {\n _this.container.innerHTML = '';\n }\n _this.events.trigger('subtitle_change');\n };\n }\n }\n },\n {\n key: 'show',\n value: function show() {\n this.container.classList.remove('dplayer-subtitle-hide');\n this.events.trigger('subtitle_show');\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.container.classList.add('dplayer-subtitle-hide');\n this.events.trigger('subtitle_hide');\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.container.classList.contains('dplayer-subtitle-hide')) {\n this.show();\n } else {\n this.hide();\n }\n }\n }\n ]);\n return Subtitle;\n}();\nexports.default = Subtitle;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar User = function () {\n function User(player) {\n _classCallCheck(this, User);\n this.storageName = {\n opacity: 'dplayer-danmaku-opacity',\n volume: 'dplayer-volume',\n unlimited: 'dplayer-danmaku-unlimited',\n danmaku: 'dplayer-danmaku-show',\n subtitle: 'dplayer-subtitle-show'\n };\n this.default = {\n opacity: 0.7,\n volume: player.options.volume || 0.7,\n unlimited: (player.options.danmaku && player.options.danmaku.unlimited ? 1 : 0) || 0,\n danmaku: 1,\n subtitle: 1\n };\n this.data = {};\n this.init();\n }\n _createClass(User, [\n {\n key: 'init',\n value: function init() {\n for (var item in this.storageName) {\n var name = this.storageName[item];\n this.data[item] = parseFloat(_utils2.default.storage.get(name) || this.default[item]);\n }\n }\n },\n {\n key: 'get',\n value: function get(key) {\n return this.data[key];\n }\n },\n {\n key: 'set',\n value: function set(key, value) {\n this.data[key] = value;\n _utils2.default.storage.set(this.storageName[key], value);\n }\n }\n ]);\n return User;\n}();\nexports.default = User;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar FullScreen = function () {\n function FullScreen(player) {\n var _this = this;\n _classCallCheck(this, FullScreen);\n this.player = player;\n this.player.events.on('webfullscreen', function () {\n _this.player.resize();\n });\n this.player.events.on('webfullscreen_cancel', function () {\n _this.player.resize();\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n });\n var fullscreenchange = function fullscreenchange() {\n _this.player.resize();\n if (_this.isFullScreen('browser')) {\n _this.player.events.trigger('fullscreen');\n } else {\n _utils2.default.setScrollPosition(_this.lastScrollPosition);\n _this.player.events.trigger('fullscreen_cancel');\n }\n };\n this.player.container.addEventListener('fullscreenchange', fullscreenchange);\n this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);\n this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);\n }\n _createClass(FullScreen, [\n {\n key: 'isFullScreen',\n value: function isFullScreen() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n case 'web':\n return this.player.container.classList.contains('dplayer-fulled');\n }\n }\n },\n {\n key: 'request',\n value: function request() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n var anotherType = type === 'browser' ? 'web' : 'browser';\n var anotherTypeOn = this.isFullScreen(anotherType);\n if (!anotherTypeOn) {\n this.lastScrollPosition = _utils2.default.getScrollPosition();\n }\n switch (type) {\n case 'browser':\n if (this.player.container.requestFullscreen) {\n this.player.container.requestFullscreen();\n } else if (this.player.container.mozRequestFullScreen) {\n this.player.container.mozRequestFullScreen();\n } else if (this.player.container.webkitRequestFullscreen) {\n this.player.container.webkitRequestFullscreen();\n } else if (this.player.video.webkitEnterFullscreen) {\n this.player.video.webkitEnterFullscreen();\n }\n break;\n case 'web':\n this.player.container.classList.add('dplayer-fulled');\n document.body.classList.add('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen');\n break;\n }\n if (anotherTypeOn) {\n this.cancel(anotherType);\n }\n }\n },\n {\n key: 'cancel',\n value: function cancel() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n switch (type) {\n case 'browser':\n if (document.cancelFullScreen) {\n document.cancelFullScreen();\n } else if (document.mozCancelFullScreen) {\n document.mozCancelFullScreen();\n } else if (document.webkitCancelFullScreen) {\n document.webkitCancelFullScreen();\n }\n break;\n case 'web':\n this.player.container.classList.remove('dplayer-fulled');\n document.body.classList.remove('dplayer-web-fullscreen-fix');\n this.player.events.trigger('webfullscreen_cancel');\n break;\n }\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'browser';\n if (this.isFullScreen(type)) {\n this.cancel(type);\n } else {\n this.request(type);\n }\n }\n }\n ]);\n return FullScreen;\n}();\nexports.default = FullScreen;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Events = function () {\n function Events() {\n _classCallCheck(this, Events);\n this.events = {};\n this.videoEvents = [\n 'abort',\n 'canplay',\n 'canplaythrough',\n 'durationchange',\n 'emptied',\n 'ended',\n 'error',\n 'loadeddata',\n 'loadedmetadata',\n 'loadstart',\n 'mozaudioavailable',\n 'pause',\n 'play',\n 'playing',\n 'progress',\n 'ratechange',\n 'seeked',\n 'seeking',\n 'stalled',\n 'suspend',\n 'timeupdate',\n 'volumechange',\n 'waiting'\n ];\n this.playerEvents = [\n 'screenshot',\n 'thumbnails_show',\n 'thumbnails_hide',\n 'danmaku_show',\n 'danmaku_hide',\n 'danmaku_clear',\n 'danmaku_loaded',\n 'danmaku_send',\n 'danmaku_opacity',\n 'contextmenu_show',\n 'contextmenu_hide',\n 'notice_show',\n 'notice_hide',\n 'quality_start',\n 'quality_end',\n 'destroy',\n 'resize',\n 'fullscreen',\n 'fullscreen_cancel',\n 'webfullscreen',\n 'webfullscreen_cancel',\n 'subtitle_show',\n 'subtitle_hide',\n 'subtitle_change'\n ];\n }\n _createClass(Events, [\n {\n key: 'on',\n value: function on(name, callback) {\n if (this.type(name) && typeof callback === 'function') {\n if (!this.events[name]) {\n this.events[name] = [];\n }\n this.events[name].push(callback);\n }\n }\n },\n {\n key: 'trigger',\n value: function trigger(name, info) {\n if (this.events[name] && this.events[name].length) {\n for (var i = 0; i < this.events[name].length; i++) {\n this.events[name][i](info);\n }\n }\n }\n },\n {\n key: 'type',\n value: function type(name) {\n if (this.playerEvents.indexOf(name) !== -1) {\n return 'player';\n } else if (this.videoEvents.indexOf(name) !== -1) {\n return 'video';\n }\n console.error('Unknown event name: ' + name);\n return null;\n }\n }\n ]);\n return Events;\n}();\nexports.default = Events;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Danmaku = function () {\n function Danmaku(options) {\n _classCallCheck(this, Danmaku);\n this.options = options;\n this.container = this.options.container;\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.dan = [];\n this.showing = true;\n this._opacity = this.options.opacity;\n this.events = this.options.events;\n this.unlimited = this.options.unlimited;\n this._measure('');\n this.load();\n }\n _createClass(Danmaku, [\n {\n key: 'load',\n value: function load() {\n var _this = this;\n var apiurl = void 0;\n if (this.options.api.maximum) {\n apiurl = this.options.api.address + 'v3/?id=' + this.options.api.id + '&max=' + this.options.api.maximum;\n } else {\n apiurl = this.options.api.address + 'v3/?id=' + this.options.api.id;\n }\n var endpoints = (this.options.api.addition || []).slice(0);\n endpoints.push(apiurl);\n this.events && this.events.trigger('danmaku_load_start', endpoints);\n this._readAllEndpoints(endpoints, function (results) {\n _this.dan = [].concat.apply([], results).sort(function (a, b) {\n return a.time - b.time;\n });\n window.requestAnimationFrame(function () {\n _this.frame();\n });\n _this.options.callback();\n _this.events && _this.events.trigger('danmaku_load_end');\n });\n }\n },\n {\n key: 'reload',\n value: function reload(newAPI) {\n this.options.api = newAPI;\n this.dan = [];\n this.clear();\n this.load();\n }\n },\n {\n key: '_readAllEndpoints',\n value: function _readAllEndpoints(endpoints, callback) {\n var _this2 = this;\n var results = [];\n var readCount = 0;\n var _loop = function _loop(i) {\n _this2.options.apiBackend.read({\n url: endpoints[i],\n success: function success(data) {\n results[i] = data;\n ++readCount;\n if (readCount === endpoints.length) {\n callback(results);\n }\n },\n error: function error(msg) {\n _this2.options.error(msg || _this2.options.tran('Danmaku load failed'));\n results[i] = [];\n ++readCount;\n if (readCount === endpoints.length) {\n callback(results);\n }\n }\n });\n };\n for (var i = 0; i < endpoints.length; ++i) {\n _loop(i);\n }\n }\n },\n {\n key: 'send',\n value: function send(dan, callback) {\n var _this3 = this;\n var danmakuData = {\n token: this.options.api.token,\n id: this.options.api.id,\n author: this.options.api.user,\n time: this.options.time(),\n text: dan.text,\n color: dan.color,\n type: dan.type\n };\n this.options.apiBackend.send({\n url: this.options.api.address + 'v3/',\n data: danmakuData,\n success: callback,\n error: function error(msg) {\n _this3.options.error(msg || _this3.options.tran('Danmaku send failed'));\n }\n });\n this.dan.splice(this.danIndex, 0, danmakuData);\n this.danIndex++;\n var danmaku = {\n text: this.htmlEncode(danmakuData.text),\n color: danmakuData.color,\n type: danmakuData.type,\n border: '2px solid ' + this.options.borderColor\n };\n this.draw(danmaku);\n this.events && this.events.trigger('danmaku_send', danmakuData);\n }\n },\n {\n key: 'frame',\n value: function frame() {\n var _this4 = this;\n if (this.dan.length && !this.paused && this.showing) {\n var item = this.dan[this.danIndex];\n var dan = [];\n while (item && this.options.time() > parseFloat(item.time)) {\n dan.push(item);\n item = this.dan[++this.danIndex];\n }\n this.draw(dan);\n }\n window.requestAnimationFrame(function () {\n _this4.frame();\n });\n }\n },\n {\n key: 'opacity',\n value: function opacity(percentage) {\n if (percentage !== undefined) {\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.opacity = percentage;\n }\n this._opacity = percentage;\n this.events && this.events.trigger('danmaku_opacity', this._opacity);\n }\n return this._opacity;\n }\n },\n {\n key: 'draw',\n value: function draw(dan) {\n var _this5 = this;\n if (this.showing) {\n var itemHeight = this.options.height;\n var danWidth = this.container.offsetWidth;\n var danHeight = this.container.offsetHeight;\n var itemY = parseInt(danHeight / itemHeight);\n var danItemRight = function danItemRight(ele) {\n var eleWidth = ele.offsetWidth || parseInt(ele.style.width);\n var eleRight = ele.getBoundingClientRect().right || _this5.container.getBoundingClientRect().right + eleWidth;\n return _this5.container.getBoundingClientRect().right - eleRight;\n };\n var danSpeed = function danSpeed(width) {\n return (danWidth + width) / 5;\n };\n var getTunnel = function getTunnel(ele, type, width) {\n var tmp = danWidth / danSpeed(width);\n var _loop2 = function _loop2(i) {\n var item = _this5.danTunnel[type][i + ''];\n if (item && item.length) {\n if (type !== 'right') {\n return 'continue';\n }\n for (var j = 0; j < item.length; j++) {\n var danRight = danItemRight(item[j]) - 10;\n if (danRight <= danWidth - tmp * danSpeed(parseInt(item[j].style.width)) || danRight <= 0) {\n break;\n }\n if (j === item.length - 1) {\n _this5.danTunnel[type][i + ''].push(ele);\n ele.addEventListener('animationend', function () {\n _this5.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n }\n } else {\n _this5.danTunnel[type][i + ''] = [ele];\n ele.addEventListener('animationend', function () {\n _this5.danTunnel[type][i + ''].splice(0, 1);\n });\n return { v: i % itemY };\n }\n };\n for (var i = 0; _this5.unlimited || i < itemY; i++) {\n var _ret2 = _loop2(i);\n switch (_ret2) {\n case 'continue':\n continue;\n default:\n if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof(_ret2)) === 'object')\n return _ret2.v;\n }\n }\n return -1;\n };\n if (Object.prototype.toString.call(dan) !== '[object Array]') {\n dan = [dan];\n }\n var docFragment = document.createDocumentFragment();\n var _loop3 = function _loop3(i) {\n dan[i].type = _utils2.default.number2Type(dan[i].type);\n if (!dan[i].color) {\n dan[i].color = 16777215;\n }\n var item = document.createElement('div');\n item.classList.add('dplayer-danmaku-item');\n item.classList.add('dplayer-danmaku-' + dan[i].type);\n if (dan[i].border) {\n item.innerHTML = '' + dan[i].text + '';\n } else {\n item.innerHTML = dan[i].text;\n }\n item.style.opacity = _this5._opacity;\n item.style.color = _utils2.default.number2Color(dan[i].color);\n item.addEventListener('animationend', function () {\n _this5.container.removeChild(item);\n });\n var itemWidth = _this5._measure(dan[i].text);\n var tunnel = void 0;\n switch (dan[i].type) {\n case 'right':\n tunnel = getTunnel(item, dan[i].type, itemWidth);\n if (tunnel >= 0) {\n item.style.width = itemWidth + 1 + 'px';\n item.style.top = itemHeight * tunnel + 'px';\n item.style.transform = 'translateX(-' + danWidth + 'px)';\n }\n break;\n case 'top':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.top = itemHeight * tunnel + 'px';\n }\n break;\n case 'bottom':\n tunnel = getTunnel(item, dan[i].type);\n if (tunnel >= 0) {\n item.style.bottom = itemHeight * tunnel + 'px';\n }\n break;\n default:\n console.error('Can\\'t handled danmaku type: ' + dan[i].type);\n }\n if (tunnel >= 0) {\n item.classList.add('dplayer-danmaku-move');\n docFragment.appendChild(item);\n }\n };\n for (var i = 0; i < dan.length; i++) {\n _loop3(i);\n }\n this.container.appendChild(docFragment);\n return docFragment;\n }\n }\n },\n {\n key: 'play',\n value: function play() {\n this.paused = false;\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n }\n },\n {\n key: '_measure',\n value: function _measure(text) {\n if (!this.context) {\n var measureStyle = getComputedStyle(this.container.getElementsByClassName('dplayer-danmaku-item')[0], null);\n this.context = document.createElement('canvas').getContext('2d');\n this.context.font = measureStyle.getPropertyValue('font');\n }\n return this.context.measureText(text).width;\n }\n },\n {\n key: 'seek',\n value: function seek() {\n this.clear();\n for (var i = 0; i < this.dan.length; i++) {\n if (this.dan[i].time >= this.options.time()) {\n this.danIndex = i;\n break;\n }\n this.danIndex = this.dan.length;\n }\n }\n },\n {\n key: 'clear',\n value: function clear() {\n this.danTunnel = {\n right: {},\n top: {},\n bottom: {}\n };\n this.danIndex = 0;\n this.options.container.innerHTML = '';\n this.events && this.events.trigger('danmaku_clear');\n }\n },\n {\n key: 'htmlEncode',\n value: function htmlEncode(str) {\n return str.replace(/&/g, '&').replace(//g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g, '/');\n }\n },\n {\n key: 'resize',\n value: function resize() {\n var danWidth = this.container.offsetWidth;\n var items = this.container.getElementsByClassName('dplayer-danmaku-item');\n for (var i = 0; i < items.length; i++) {\n items[i].style.transform = 'translateX(-' + danWidth + 'px)';\n }\n }\n },\n {\n key: 'hide',\n value: function hide() {\n this.showing = false;\n this.pause();\n this.clear();\n this.events && this.events.trigger('danmaku_hide');\n }\n },\n {\n key: 'show',\n value: function show() {\n this.seek();\n this.showing = true;\n this.play();\n this.events && this.events.trigger('danmaku_show');\n }\n },\n {\n key: 'unlimit',\n value: function unlimit(boolean) {\n this.unlimited = boolean;\n }\n }\n ]);\n return Danmaku;\n}();\nexports.default = Danmaku;","'use strict';\nmodule.exports = false;\ntry {\n module.exports = Object.prototype.toString.call(global.process) === '[object process]';\n} catch (e) {\n}","'use strict';\nvar detectNode = require('detect-node');\nvar runtime = Object.create(detectNode ? global : window);\nvar ESCAPE_REG = /[\"&'<>]/;\nruntime.$escape = function (content) {\n return xmlEscape(toString(content));\n};\nruntime.$each = function (data, callback) {\n if (Array.isArray(data)) {\n for (var i = 0, len = data.length; i < len; i++) {\n callback(data[i], i);\n }\n } else {\n for (var _i in data) {\n callback(data[_i], _i);\n }\n }\n};\nfunction toString(value) {\n if (typeof value !== 'string') {\n if (value === undefined || value === null) {\n value = '';\n } else if (typeof value === 'function') {\n value = toString(value.call(value));\n } else {\n value = JSON.stringify(value);\n }\n }\n return value;\n}\n;\nfunction xmlEscape(content) {\n var html = '' + content;\n var regexResult = ESCAPE_REG.exec(html);\n if (!regexResult) {\n return content;\n }\n var result = '';\n var i = void 0, lastIndex = void 0, char = void 0;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34:\n char = '"';\n break;\n case 38:\n char = '&';\n break;\n case 39:\n char = ''';\n break;\n case 60:\n char = '<';\n break;\n case 62:\n char = '>';\n break;\n default:\n continue;\n }\n if (lastIndex !== i) {\n result += html.substring(lastIndex, i);\n }\n lastIndex = i + 1;\n result += char;\n }\n if (lastIndex !== i) {\n return result + html.substring(lastIndex, i);\n } else {\n return result;\n }\n}\n;\nmodule.exports = runtime;","
    \n
    \n {{ include './video.art' video }}\n {{ if options.logo }}\n
    \n \n
    \n {{ /if }}\n
    \n
    \n
    \n
    \n
    \n \n {{ if options.danmaku }}\n {{ tran('Danmaku is loading') }}\n {{ /if }}\n {{@ icons.loading }}\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    {{ tran('Set danmaku color') }}
    \n \n \n \n \n \n \n
    \n
    \n
    {{ tran('Set danmaku type') }}
    \n \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n 0:00 /\n 0:00\n \n {{ if options.live }}\n {{ tran('Live') }}\n {{ /if }}\n
    \n
    \n {{ if options.video.quality }}\n
    \n \n
    \n
    \n {{ each options.video.quality }}\n
    {{ $value.name }}
    \n {{ /each }}\n
    \n
    \n
    \n {{ /if }}\n {{ if options.screenshot }}\n
    \n {{@ icons.camera }}\n
    \n {{ /if }}\n
    \n \n
    \n {{ if options.subtitle }}\n
    \n \n
    \n {{ /if }}\n
    \n \n
    \n
    \n
    \n {{ tran('Speed') }}\n
    {{@ icons.right }}
    \n
    \n
    \n {{ tran('Loop') }}\n
    \n \n \n
    \n
    \n
    \n {{ tran('Show danmaku') }}\n
    \n \n \n
    \n
    \n
    \n {{ tran('Unlimited danmaku') }}\n
    \n \n \n
    \n
    \n
    \n {{ tran('Opacity for danmaku') }}\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n 0.5\n
    \n
    \n 0.75\n
    \n
    \n {{ tran('Normal') }}\n
    \n
    \n 1.25\n
    \n
    \n 1.5\n
    \n
    \n 2\n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    00:00
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    [x]
    \n
    \n Player version\n \n
    \n
    \n Player FPS\n \n
    \n
    \n Video type\n \n
    \n
    \n Video url\n \n
    \n
    \n Video resolution\n \n
    \n
    \n Video duration\n \n
    \n {{ if options.danmaku }}\n
    \n Danamku id\n \n
    \n
    \n Danamku api\n \n
    \n
    \n Danamku amount\n \n
    \n {{ /if }}\n
    \n
    \n {{ each options.contextmenu }}\n
    \n {{ tran($value.text) }}\n
    \n {{ /each }}\n
    \n
    ","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","module.exports = \"\"","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _player = require('../template/player.art');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar Template = function () {\n function Template(options) {\n _classCallCheck(this, Template);\n this.container = options.container;\n this.options = options.options;\n this.index = options.index;\n this.tran = options.tran;\n this.init();\n }\n _createClass(Template, [{\n key: 'init',\n value: function init() {\n this.container.innerHTML = (0, _player2.default)({\n options: this.options,\n index: this.index,\n tran: this.tran,\n icons: _icons2.default,\n video: {\n current: true,\n pic: this.options.video.pic,\n screenshot: this.options.screenshot,\n preload: this.options.preload,\n url: this.options.video.url,\n subtitle: this.options.subtitle\n }\n });\n this.volumeBar = this.container.querySelector('.dplayer-volume-bar-inner');\n this.volumeBarWrap = this.container.querySelector('.dplayer-volume-bar');\n this.volumeBarWrapWrap = this.container.querySelector('.dplayer-volume-bar-wrap');\n this.volumeButton = this.container.querySelector('.dplayer-volume');\n this.volumeIcon = this.container.querySelector('.dplayer-volume-icon .dplayer-icon-content');\n this.playedBar = this.container.querySelector('.dplayer-played');\n this.loadedBar = this.container.querySelector('.dplayer-loaded');\n this.playedBarWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.playedBarTime = this.container.querySelector('.dplayer-bar-time');\n this.danmaku = this.container.querySelector('.dplayer-danmaku');\n this.danmakuLoading = this.container.querySelector('.dplayer-danloading');\n this.video = this.container.querySelector('.dplayer-video-current');\n this.bezel = this.container.querySelector('.dplayer-bezel-icon');\n this.playButton = this.container.querySelector('.dplayer-play-icon');\n this.videoWrap = this.container.querySelector('.dplayer-video-wrap');\n this.controllerMask = this.container.querySelector('.dplayer-controller-mask');\n this.ptime = this.container.querySelector('.dplayer-ptime');\n this.settingButton = this.container.querySelector('.dplayer-setting-icon');\n this.settingBox = this.container.querySelector('.dplayer-setting-box');\n this.mask = this.container.querySelector('.dplayer-mask');\n this.loop = this.container.querySelector('.dplayer-setting-loop');\n this.loopToggle = this.container.querySelector('.dplayer-setting-loop .dplayer-toggle-setting-input');\n this.showDanmaku = this.container.querySelector('.dplayer-setting-showdan');\n this.showDanmakuToggle = this.container.querySelector('.dplayer-showdan-setting-input');\n this.unlimitDanmaku = this.container.querySelector('.dplayer-setting-danunlimit');\n this.unlimitDanmakuToggle = this.container.querySelector('.dplayer-danunlimit-setting-input');\n this.speed = this.container.querySelector('.dplayer-setting-speed');\n this.speedItem = this.container.querySelectorAll('.dplayer-setting-speed-item');\n this.danmakuOpacityBar = this.container.querySelector('.dplayer-danmaku-bar-inner');\n this.danmakuOpacityBarWrap = this.container.querySelector('.dplayer-danmaku-bar');\n this.danmakuOpacityBarWrapWrap = this.container.querySelector('.dplayer-danmaku-bar-wrap');\n this.danmakuOpacityBox = this.container.querySelector('.dplayer-setting-danmaku');\n this.dtime = this.container.querySelector('.dplayer-dtime');\n this.controller = this.container.querySelector('.dplayer-controller');\n this.commentInput = this.container.querySelector('.dplayer-comment-input');\n this.commentButton = this.container.querySelector('.dplayer-comment-icon');\n this.commentSettingBox = this.container.querySelector('.dplayer-comment-setting-box');\n this.commentSettingButton = this.container.querySelector('.dplayer-comment-setting-icon');\n this.commentSettingFill = this.container.querySelector('.dplayer-comment-setting-icon path');\n this.commentSendButton = this.container.querySelector('.dplayer-send-icon');\n this.commentSendFill = this.container.querySelector('.dplayer-send-icon path');\n this.commentColorSettingBox = this.container.querySelector('.dplayer-comment-setting-color');\n this.browserFullButton = this.container.querySelector('.dplayer-full-icon');\n this.webFullButton = this.container.querySelector('.dplayer-full-in-icon');\n this.menu = this.container.querySelector('.dplayer-menu');\n this.menuItem = this.container.querySelectorAll('.dplayer-menu-item');\n this.qualityList = this.container.querySelector('.dplayer-quality-list');\n this.camareButton = this.container.querySelector('.dplayer-camera-icon');\n this.subtitleButton = this.container.querySelector('.dplayer-subtitle-icon');\n this.subtitleButtonInner = this.container.querySelector('.dplayer-subtitle-icon .dplayer-icon-content');\n this.subtitle = this.container.querySelector('.dplayer-subtitle');\n this.qualityButton = this.container.querySelector('.dplayer-quality-icon');\n this.barPreview = this.container.querySelector('.dplayer-bar-preview');\n this.barWrap = this.container.querySelector('.dplayer-bar-wrap');\n this.notice = this.container.querySelector('.dplayer-notice');\n this.infoPanel = this.container.querySelector('.dplayer-info-panel');\n this.infoPanelClose = this.container.querySelector('.dplayer-info-panel-close');\n this.infoVersion = this.container.querySelector('.dplayer-info-panel-item-version .dplayer-info-panel-item-data');\n this.infoFPS = this.container.querySelector('.dplayer-info-panel-item-fps .dplayer-info-panel-item-data');\n this.infoType = this.container.querySelector('.dplayer-info-panel-item-type .dplayer-info-panel-item-data');\n this.infoUrl = this.container.querySelector('.dplayer-info-panel-item-url .dplayer-info-panel-item-data');\n this.infoResolution = this.container.querySelector('.dplayer-info-panel-item-resolution .dplayer-info-panel-item-data');\n this.infoDuration = this.container.querySelector('.dplayer-info-panel-item-duration .dplayer-info-panel-item-data');\n this.infoDanmakuId = this.container.querySelector('.dplayer-info-panel-item-danmaku-id .dplayer-info-panel-item-data');\n this.infoDanmakuApi = this.container.querySelector('.dplayer-info-panel-item-danmaku-api .dplayer-info-panel-item-data');\n this.infoDanmakuAmount = this.container.querySelector('.dplayer-info-panel-item-danmaku-amount .dplayer-info-panel-item-data');\n }\n }]);\n return Template;\n}();\nexports.default = Template;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nfunction i18n(lang) {\n var _this = this;\n this.lang = lang;\n this.tran = function (text) {\n if (tranTxt[_this.lang] && tranTxt[_this.lang][text]) {\n return tranTxt[_this.lang][text];\n } else {\n return text;\n }\n };\n}\nvar tranTxt = {\n 'zh-cn': {\n 'Danmaku is loading': '弹幕加载中',\n 'Top': '顶部',\n 'Bottom': '底部',\n 'Rolling': '滚动',\n 'Input danmaku, hit Enter': '输入弹幕\\uFF0C回车发送',\n 'About author': '关于作者',\n 'DPlayer feedback': '播放器意见反馈',\n 'About DPlayer': '关于 DPlayer 播放器',\n 'Loop': '洗脑循环',\n 'Speed': '速度',\n 'Opacity for danmaku': '弹幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '要输入弹幕内容啊喂\\uFF01',\n 'Set danmaku color': '设置弹幕颜色',\n 'Set danmaku type': '设置弹幕类型',\n 'Show danmaku': '显示弹幕',\n 'Video load failed': '视频加载失败',\n 'Danmaku load failed': '弹幕加载失败',\n 'Danmaku send failed': '弹幕发送失败',\n 'Switching to': '正在切换至',\n 'Switched to': '已经切换至',\n 'quality': '画质',\n 'FF': '快进',\n 'REW': '快退',\n 'Unlimited danmaku': '海量弹幕',\n 'Send danmaku': '发送弹幕',\n 'Setting': '设置',\n 'Full screen': '全屏',\n 'Web full screen': '页面全屏',\n 'Send': '发送',\n 'Screenshot': '截图',\n 's': '秒',\n 'Show subtitle': '显示字幕',\n 'Hide subtitle': '隐藏字幕',\n 'Volume': '音量',\n 'Live': '直播',\n 'Video info': '视频统计信息'\n },\n 'zh-tw': {\n 'Danmaku is loading': '彈幕加載中',\n 'Top': '頂部',\n 'Bottom': '底部',\n 'Rolling': '滾動',\n 'Input danmaku, hit Enter': '輸入彈幕\\uFF0CEnter 發送',\n 'About author': '關於作者',\n 'DPlayer feedback': '播放器意見反饋',\n 'About DPlayer': '關於 DPlayer 播放器',\n 'Loop': '循環播放',\n 'Speed': '速度',\n 'Opacity for danmaku': '彈幕透明度',\n 'Normal': '正常',\n 'Please input danmaku content!': '請輸入彈幕内容啊\\uFF01',\n 'Set danmaku color': '設置彈幕顏色',\n 'Set danmaku type': '設置彈幕類型',\n 'Show danmaku': '顯示彈幕',\n 'Video load failed': '視頻加載失敗',\n 'Danmaku load failed': '彈幕加載失敗',\n 'Danmaku send failed': '彈幕發送失敗',\n 'Switching to': '正在切換至',\n 'Switched to': '已經切換至',\n 'quality': '畫質',\n 'FF': '快進',\n 'REW': '快退',\n 'Unlimited danmaku': '海量彈幕',\n 'Send danmaku': '發送彈幕',\n 'Setting': '設置',\n 'Full screen': '全屏',\n 'Web full screen': '頁面全屏',\n 'Send': '發送',\n 'Screenshot': '截圖',\n 's': '秒',\n 'Show subtitle': '顯示字幕',\n 'Hide subtitle': '隱藏字幕',\n 'Volume': '音量',\n 'Live': '直播',\n 'Video info': '視頻統計信息'\n }\n};\nexports.default = i18n;","'use strict';\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};","'use strict';\nvar Cancel = require('./Cancel');\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n return;\n }\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\nmodule.exports = CancelToken;","'use strict';\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};","'use strict';\nmodule.exports = function isAbsoluteURL(url) {\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};","'use strict';\nvar utils = require('./../utils');\nmodule.exports = function transformData(data, headers, fns) {\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n return data;\n};","'use strict';\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\nvar isAbsoluteURL = require('./../helpers/isAbsoluteURL');\nvar combineURLs = require('./../helpers/combineURLs');\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n if (config.baseURL && !isAbsoluteURL(config.url)) {\n config.url = combineURLs(config.baseURL, config.url);\n }\n config.headers = config.headers || {};\n config.data = transformData(config.data, config.headers, config.transformRequest);\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers || {});\n utils.forEach([\n 'delete',\n 'get',\n 'head',\n 'post',\n 'put',\n 'patch',\n 'common'\n ], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n var adapter = config.adapter || defaults.adapter;\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n response.data = transformData(response.data, response.headers, config.transformResponse);\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n return Promise.reject(reason);\n });\n};","'use strict';\nvar utils = require('./../utils');\nfunction InterceptorManager() {\n this.handlers = [];\n}\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\nmodule.exports = InterceptorManager;","'use strict';\nvar utils = require('./../utils');\nmodule.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n document.cookie = cookie.join('; ');\n },\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() : function nonStandardBrowserEnv() {\n return {\n write: function write() {\n },\n read: function read() {\n return null;\n },\n remove: function remove() {\n }\n };\n}();","'use strict';\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nfunction E() {\n this.message = 'String contains an invalid character';\n}\nE.prototype = new Error();\nE.prototype.code = 5;\nE.prototype.name = 'InvalidCharacterError';\nfunction btoa(input) {\n var str = String(input);\n var output = '';\n for (var block, charCode, idx = 0, map = chars; str.charAt(idx | 0) || (map = '=', idx % 1); output += map.charAt(63 & block >> 8 - idx % 1 * 8)) {\n charCode = str.charCodeAt(idx += 3 / 4);\n if (charCode > 255) {\n throw new E();\n }\n block = block << 8 | charCode;\n }\n return output;\n}\nmodule.exports = btoa;","'use strict';\nvar utils = require('./../utils');\nmodule.exports = utils.isStandardBrowserEnv() ? function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n function resolveURL(url) {\n var href = url;\n if (msie) {\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n urlParsingNode.setAttribute('href', href);\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n originURL = resolveURL(window.location.href);\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() : function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();","'use strict';\nvar utils = require('./../utils');\nvar ignoreDuplicateOf = [\n 'age',\n 'authorization',\n 'content-length',\n 'content-type',\n 'etag',\n 'expires',\n 'from',\n 'host',\n 'if-modified-since',\n 'if-unmodified-since',\n 'last-modified',\n 'location',\n 'max-forwards',\n 'proxy-authorization',\n 'referer',\n 'retry-after',\n 'user-agent'\n];\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n if (!headers) {\n return parsed;\n }\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n return parsed;\n};","'use strict';\nvar utils = require('./../utils');\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n if (!params) {\n return url;\n }\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n serializedParams = parts.join('&');\n }\n if (serializedParams) {\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n return url;\n};","'use strict';\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};","'use strict';\nvar createError = require('./createError');\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};","'use strict';\nvar utils = require('../utils');\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};","'use strict';\nvar defaults = require('./../defaults');\nvar utils = require('./../utils');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\nAxios.prototype.request = function request(config) {\n if (typeof config === 'string') {\n config = utils.merge({ url: arguments[0] }, arguments[1]);\n }\n config = utils.merge(defaults, { method: 'get' }, this.defaults, config);\n config.method = config.method.toLowerCase();\n var chain = [\n dispatchRequest,\n undefined\n ];\n var promise = Promise.resolve(config);\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n return promise;\n};\nutils.forEach([\n 'delete',\n 'get',\n 'head',\n 'options'\n], function forEachMethodNoData(method) {\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\nutils.forEach([\n 'post',\n 'put',\n 'patch'\n], function forEachMethodWithData(method) {\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\nmodule.exports = Axios;","'use strict';\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);\n};\nfunction isBuffer(obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj);\n}\nfunction isSlowBuffer(obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0));\n}","'use strict';\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar defaults = require('./defaults');\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n utils.extend(instance, Axios.prototype, context);\n utils.extend(instance, context);\n return instance;\n}\nvar axios = createInstance(defaults);\naxios.Axios = Axios;\naxios.create = function create(instanceConfig) {\n return createInstance(utils.merge(defaults, instanceConfig));\n};\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\nmodule.exports = axios;\nmodule.exports.default = axios;","'use strict';\nmodule.exports = require('./lib/axios');","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _axios = require('axios');\nvar _axios2 = _interopRequireDefault(_axios);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports.default = {\n send: function send(options) {\n _axios2.default.post(options.url, options.data).then(function (response) {\n var data = response.data;\n if (!data || data.code !== 0) {\n options.error && options.error(data && data.msg);\n return;\n }\n options.success && options.success(data);\n }).catch(function (e) {\n console.error(e);\n options.error && options.error();\n });\n },\n read: function read(options) {\n _axios2.default.get(options.url).then(function (response) {\n var data = response.data;\n if (!data || data.code !== 0) {\n options.error && options.error(data && data.msg);\n return;\n }\n options.success && options.success(data.data.map(function (item) {\n return {\n time: item[0],\n type: item[1],\n color: item[2],\n author: item[3],\n text: item[4]\n };\n }));\n }).catch(function (e) {\n console.error(e);\n options.error && options.error();\n });\n }\n};","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _api = require('./api.js');\nvar _api2 = _interopRequireDefault(_api);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nexports.default = function (options) {\n var defaultOption = {\n container: options.element || document.getElementsByClassName('dplayer')[0],\n live: false,\n autoplay: false,\n theme: '#b7daff',\n loop: false,\n lang: (navigator.language || navigator.browserLanguage).toLowerCase(),\n screenshot: false,\n hotkey: true,\n preload: 'metadata',\n volume: 0.7,\n apiBackend: _api2.default,\n video: {},\n contextmenu: [],\n mutex: true\n };\n for (var defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !options.hasOwnProperty(defaultKey)) {\n options[defaultKey] = defaultOption[defaultKey];\n }\n }\n if (options.video) {\n !options.video.type && (options.video.type = 'auto');\n }\n if (_typeof(options.danmaku) === 'object' && options.danmaku) {\n !options.danmaku.user && (options.danmaku.user = 'DIYgod');\n }\n if (options.subtitle) {\n !options.subtitle.type && (options.subtitle.type = 'webvtt');\n !options.subtitle.fontSize && (options.subtitle.fontSize = '20px');\n !options.subtitle.bottom && (options.subtitle.bottom = '40px');\n !options.subtitle.color && (options.subtitle.color = '#fff');\n }\n if (options.video.quality) {\n options.video.url = options.video.quality[options.video.defaultQuality].url;\n }\n if (options.lang) {\n options.lang = options.lang.toLowerCase();\n }\n options.contextmenu = options.contextmenu.concat([\n {\n text: 'Video info',\n click: function click(player) {\n player.infoPanel.triggle();\n }\n },\n {\n text: 'About author',\n link: 'https://diygod.me'\n },\n {\n text: 'DPlayer v' + DPLAYER_VERSION,\n link: 'https://github.com/MoePlayer/DPlayer'\n }\n ]);\n return options;\n};","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nexports.default = function (callback) {\n var constructor = this.constructor;\n return this.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n return constructor.reject(reason);\n });\n });\n};","'use strict';\n(function (global, undefined) {\n 'use strict';\n if (global.setImmediate) {\n return;\n }\n var nextHandle = 1;\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n function setImmediate(callback) {\n if (typeof callback !== 'function') {\n callback = new Function('' + callback);\n }\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n var task = {\n callback: callback,\n args: args\n };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n function runIfPresent(handle) {\n if (currentlyRunningATask) {\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n function installNextTickImplementation() {\n registerImmediate = function registerImmediate(handle) {\n process.nextTick(function () {\n runIfPresent(handle);\n });\n };\n }\n function canUsePostMessage() {\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function () {\n postMessageIsAsynchronous = false;\n };\n global.postMessage('', '*');\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n function installPostMessageImplementation() {\n var messagePrefix = 'setImmediate$' + Math.random() + '$';\n var onGlobalMessage = function onGlobalMessage(event) {\n if (event.source === global && typeof event.data === 'string' && event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n if (global.addEventListener) {\n global.addEventListener('message', onGlobalMessage, false);\n } else {\n global.attachEvent('onmessage', onGlobalMessage);\n }\n registerImmediate = function registerImmediate(handle) {\n global.postMessage(messagePrefix + handle, '*');\n };\n }\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function (event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n registerImmediate = function registerImmediate(handle) {\n channel.port2.postMessage(handle);\n };\n }\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function registerImmediate(handle) {\n var script = doc.createElement('script');\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n if ({}.toString.call(global.process) === '[object process]') {\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n installMessageChannelImplementation();\n } else if (doc && 'onreadystatechange' in doc.createElement('script')) {\n installReadyStateChangeImplementation();\n } else {\n installSetTimeoutImplementation();\n }\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === 'undefined' ? typeof global === 'undefined' ? undefined : global : self));","'use strict';\nvar apply = Function.prototype.apply;\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n if (timeout) {\n timeout.close();\n }\n};\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function () {\n};\nTimeout.prototype.close = function () {\n this._clearFn.call(window, this._id);\n};\nexports.enroll = function (item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\nexports.unenroll = function (item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\nexports._unrefActive = exports.active = function (item) {\n clearTimeout(item._idleTimeoutId);\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\nrequire('setimmediate');\nexports.setImmediate = setImmediate;\nexports.clearImmediate = clearImmediate;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _typeof = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === 'function' && obj.constructor === Symbol && obj !== Symbol.prototype ? 'symbol' : typeof obj;\n};\nvar _finally = require('./finally');\nvar _finally2 = _interopRequireDefault(_finally);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nvar setTimeoutFunc = setTimeout;\nfunction noop() {\n}\nfunction bind(fn, thisArg) {\n return function () {\n fn.apply(thisArg, arguments);\n };\n}\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function')\n throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n doResolve(fn, this);\n}\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function () {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\nfunction resolve(self, newValue) {\n try {\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (newValue && ((typeof newValue === 'undefined' ? 'undefined' : _typeof(newValue)) === 'object' || typeof newValue === 'function')) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function () {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(function (value) {\n if (done)\n return;\n done = true;\n resolve(self, value);\n }, function (reason) {\n if (done)\n return;\n done = true;\n reject(self, reason);\n });\n } catch (ex) {\n if (done)\n return;\n done = true;\n reject(self, ex);\n }\n}\nPromise.prototype['catch'] = function (onRejected) {\n return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\nPromise.prototype['finally'] = _finally2.default;\nPromise.all = function (arr) {\n return new Promise(function (resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0)\n return resolve([]);\n var remaining = args.length;\n function res(i, val) {\n try {\n if (val && ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(val, function (val) {\n res(i, val);\n }, reject);\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\nPromise.resolve = function (value) {\n if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.constructor === Promise) {\n return value;\n }\n return new Promise(function (resolve) {\n resolve(value);\n });\n};\nPromise.reject = function (value) {\n return new Promise(function (resolve, reject) {\n reject(value);\n });\n};\nPromise.race = function (values) {\n return new Promise(function (resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\nPromise._immediateFn = typeof setImmediate === 'function' && function (fn) {\n setImmediate(fn);\n} || function (fn) {\n setTimeoutFunc(fn, 0);\n};\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err);\n }\n};\nexports.default = Promise;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function (Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\nvar _promisePolyfill = require('promise-polyfill');\nvar _promisePolyfill2 = _interopRequireDefault(_promisePolyfill);\nvar _utils = require('./utils');\nvar _utils2 = _interopRequireDefault(_utils);\nvar _options = require('./options');\nvar _options2 = _interopRequireDefault(_options);\nvar _i18n = require('./i18n');\nvar _i18n2 = _interopRequireDefault(_i18n);\nvar _template = require('./template');\nvar _template2 = _interopRequireDefault(_template);\nvar _icons = require('./icons');\nvar _icons2 = _interopRequireDefault(_icons);\nvar _danmaku = require('./danmaku');\nvar _danmaku2 = _interopRequireDefault(_danmaku);\nvar _events = require('./events');\nvar _events2 = _interopRequireDefault(_events);\nvar _fullscreen = require('./fullscreen');\nvar _fullscreen2 = _interopRequireDefault(_fullscreen);\nvar _user = require('./user');\nvar _user2 = _interopRequireDefault(_user);\nvar _subtitle = require('./subtitle');\nvar _subtitle2 = _interopRequireDefault(_subtitle);\nvar _bar = require('./bar');\nvar _bar2 = _interopRequireDefault(_bar);\nvar _timer = require('./timer');\nvar _timer2 = _interopRequireDefault(_timer);\nvar _bezel = require('./bezel');\nvar _bezel2 = _interopRequireDefault(_bezel);\nvar _controller = require('./controller');\nvar _controller2 = _interopRequireDefault(_controller);\nvar _setting = require('./setting');\nvar _setting2 = _interopRequireDefault(_setting);\nvar _comment = require('./comment');\nvar _comment2 = _interopRequireDefault(_comment);\nvar _hotkey = require('./hotkey');\nvar _hotkey2 = _interopRequireDefault(_hotkey);\nvar _contextmenu = require('./contextmenu');\nvar _contextmenu2 = _interopRequireDefault(_contextmenu);\nvar _infoPanel = require('./info-panel');\nvar _infoPanel2 = _interopRequireDefault(_infoPanel);\nvar _video = require('../template/video.art');\nvar _video2 = _interopRequireDefault(_video);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n}\nvar index = 0;\nvar instances = [];\nvar DPlayer = function () {\n function DPlayer(options) {\n var _this = this;\n _classCallCheck(this, DPlayer);\n this.options = (0, _options2.default)(options);\n if (this.options.video.quality) {\n this.qualityIndex = this.options.video.defaultQuality;\n this.quality = this.options.video.quality[this.options.video.defaultQuality];\n }\n this.tran = new _i18n2.default(this.options.lang).tran;\n this.events = new _events2.default();\n this.user = new _user2.default(this);\n this.container = this.options.container;\n this.container.classList.add('dplayer');\n if (!this.options.danmaku) {\n this.container.classList.add('dplayer-no-danmaku');\n }\n if (this.options.live) {\n this.container.classList.add('dplayer-live');\n }\n if (_utils2.default.isMobile) {\n this.container.classList.add('dplayer-mobile');\n }\n this.arrow = this.container.offsetWidth <= 500;\n if (this.arrow) {\n this.container.classList.add('dplayer-arrow');\n }\n this.template = new _template2.default({\n container: this.container,\n options: this.options,\n index: index,\n tran: this.tran\n });\n this.video = this.template.video;\n this.bar = new _bar2.default(this.template);\n this.bezel = new _bezel2.default(this.template.bezel);\n this.fullScreen = new _fullscreen2.default(this);\n this.controller = new _controller2.default(this);\n if (this.options.danmaku) {\n this.danmaku = new _danmaku2.default({\n container: this.template.danmaku,\n opacity: this.user.get('opacity'),\n callback: function callback() {\n setTimeout(function () {\n _this.template.danmakuLoading.style.display = 'none';\n if (_this.options.autoplay) {\n _this.play();\n }\n }, 0);\n },\n error: function error(msg) {\n _this.notice(msg);\n },\n apiBackend: this.options.apiBackend,\n borderColor: this.options.theme,\n height: this.arrow ? 24 : 30,\n time: function time() {\n return _this.video.currentTime;\n },\n unlimited: this.user.get('unlimited'),\n api: {\n id: this.options.danmaku.id,\n address: this.options.danmaku.api,\n token: this.options.danmaku.token,\n maximum: this.options.danmaku.maximum,\n addition: this.options.danmaku.addition,\n user: this.options.danmaku.user\n },\n events: this.events,\n tran: function tran(msg) {\n return _this.tran(msg);\n }\n });\n this.comment = new _comment2.default(this);\n }\n this.setting = new _setting2.default(this);\n document.addEventListener('click', function () {\n _this.focus = false;\n }, true);\n this.container.addEventListener('click', function () {\n _this.focus = true;\n }, true);\n this.paused = true;\n this.timer = new _timer2.default(this);\n this.hotkey = new _hotkey2.default(this);\n this.contextmenu = new _contextmenu2.default(this);\n this.initVideo(this.video, this.quality && this.quality.type || this.options.video.type);\n this.infoPanel = new _infoPanel2.default(this);\n if (!this.danmaku && this.options.autoplay) {\n this.play();\n }\n index++;\n instances.push(this);\n }\n _createClass(DPlayer, [\n {\n key: 'seek',\n value: function seek(time) {\n time = Math.max(time, 0);\n if (this.video.duration) {\n time = Math.min(time, this.video.duration);\n }\n if (this.video.currentTime < time) {\n this.notice(this.tran('FF') + ' ' + (time - this.video.currentTime).toFixed(0) + ' ' + this.tran('s'));\n } else if (this.video.currentTime > time) {\n this.notice(this.tran('REW') + ' ' + (this.video.currentTime - time).toFixed(0) + ' ' + this.tran('s'));\n }\n this.video.currentTime = time;\n if (this.danmaku) {\n this.danmaku.seek();\n }\n this.bar.set('played', time / this.video.duration, 'width');\n this.template.ptime.innerHTML = _utils2.default.secondToTime(time);\n }\n },\n {\n key: 'play',\n value: function play() {\n var _this2 = this;\n this.paused = false;\n if (this.video.paused) {\n this.bezel.switch(_icons2.default.play);\n }\n this.template.playButton.innerHTML = _icons2.default.pause;\n var playedPromise = _promisePolyfill2.default.resolve(this.video.play());\n playedPromise.catch(function () {\n _this2.pause();\n }).then(function () {\n });\n this.timer.enable('loading');\n this.container.classList.remove('dplayer-paused');\n this.container.classList.add('dplayer-playing');\n if (this.danmaku) {\n this.danmaku.play();\n }\n if (this.options.mutex) {\n for (var i = 0; i < instances.length; i++) {\n if (this !== instances[i]) {\n instances[i].pause();\n }\n }\n }\n }\n },\n {\n key: 'pause',\n value: function pause() {\n this.paused = true;\n this.container.classList.remove('dplayer-loading');\n if (!this.video.paused) {\n this.bezel.switch(_icons2.default.pause);\n }\n this.template.playButton.innerHTML = _icons2.default.play;\n this.video.pause();\n this.timer.disable('loading');\n this.container.classList.remove('dplayer-playing');\n this.container.classList.add('dplayer-paused');\n if (this.danmaku) {\n this.danmaku.pause();\n }\n }\n },\n {\n key: 'switchVolumeIcon',\n value: function switchVolumeIcon() {\n if (this.volume() >= 0.95) {\n this.template.volumeIcon.innerHTML = _icons2.default.volumeUp;\n } else if (this.volume() > 0) {\n this.template.volumeIcon.innerHTML = _icons2.default.volumeDown;\n } else {\n this.template.volumeIcon.innerHTML = _icons2.default.volumeOff;\n }\n }\n },\n {\n key: 'volume',\n value: function volume(percentage, nostorage, nonotice) {\n percentage = parseFloat(percentage);\n if (!isNaN(percentage)) {\n percentage = Math.max(percentage, 0);\n percentage = Math.min(percentage, 1);\n this.bar.set('volume', percentage, 'width');\n var formatPercentage = (percentage * 100).toFixed(0) + '%';\n this.template.volumeBarWrapWrap.dataset.balloon = formatPercentage;\n if (!nostorage) {\n this.user.set('volume', percentage);\n }\n if (!nonotice) {\n this.notice(this.tran('Volume') + ' ' + (percentage * 100).toFixed(0) + '%');\n }\n this.video.volume = percentage;\n if (this.video.muted) {\n this.video.muted = false;\n }\n this.switchVolumeIcon();\n }\n return this.video.volume;\n }\n },\n {\n key: 'toggle',\n value: function toggle() {\n if (this.video.paused) {\n this.play();\n } else {\n this.pause();\n }\n }\n },\n {\n key: 'on',\n value: function on(name, callback) {\n this.events.on(name, callback);\n }\n },\n {\n key: 'switchVideo',\n value: function switchVideo(video, danmakuAPI) {\n this.pause();\n this.video.poster = video.pic ? video.pic : '';\n this.video.src = video.url;\n this.initMSE(this.video, video.type || 'auto');\n if (danmakuAPI) {\n this.template.danmakuLoading.style.display = 'block';\n this.bar.set('played', 0, 'width');\n this.bar.set('loaded', 0, 'width');\n this.template.ptime.innerHTML = '00:00';\n this.template.danmaku.innerHTML = '';\n if (this.danmaku) {\n this.danmaku.reload({\n id: danmakuAPI.id,\n address: danmakuAPI.api,\n token: danmakuAPI.token,\n maximum: danmakuAPI.maximum,\n addition: danmakuAPI.addition,\n user: danmakuAPI.user\n });\n }\n }\n }\n },\n {\n key: 'initMSE',\n value: function initMSE(video, type) {\n var _this3 = this;\n this.type = type;\n if (this.options.video.customType && this.options.video.customType[type]) {\n if (Object.prototype.toString.call(this.options.video.customType[type]) === '[object Function]') {\n this.options.video.customType[type](this.video, this);\n } else {\n console.error('Illegal customType: ' + type);\n }\n } else {\n if (this.type === 'auto') {\n if (/m3u8(#|\\?|$)/i.exec(video.src)) {\n this.type = 'hls';\n } else if (/.flv(#|\\?|$)/i.exec(video.src)) {\n this.type = 'flv';\n } else if (/.mpd(#|\\?|$)/i.exec(video.src)) {\n this.type = 'dash';\n } else {\n this.type = 'normal';\n }\n }\n if (this.type === 'hls' && (video.canPlayType('application/x-mpegURL') || video.canPlayType('application/vnd.apple.mpegURL'))) {\n this.type = 'normal';\n }\n switch (this.type) {\n case 'hls':\n if (Hls) {\n if (Hls.isSupported()) {\n var hls = new Hls();\n hls.loadSource(video.src);\n hls.attachMedia(video);\n } else {\n this.notice('Error: Hls is not supported.');\n }\n } else {\n this.notice('Error: Can\\'t find Hls.');\n }\n break;\n case 'flv':\n if (flvjs && flvjs.isSupported()) {\n if (flvjs.isSupported()) {\n var flvPlayer = flvjs.createPlayer({\n type: 'flv',\n url: video.src\n });\n flvPlayer.attachMediaElement(video);\n flvPlayer.load();\n } else {\n this.notice('Error: flvjs is not supported.');\n }\n } else {\n this.notice('Error: Can\\'t find flvjs.');\n }\n break;\n case 'dash':\n if (dashjs) {\n dashjs.MediaPlayer().create().initialize(video, video.src, false);\n } else {\n this.notice('Error: Can\\'t find dashjs.');\n }\n break;\n case 'webtorrent':\n if (WebTorrent) {\n if (WebTorrent.WEBRTC_SUPPORT) {\n this.container.classList.add('dplayer-loading');\n var client = new WebTorrent();\n var torrentId = video.src;\n client.add(torrentId, function (torrent) {\n var file = torrent.files.find(function (file) {\n return file.name.endsWith('.mp4');\n });\n file.renderTo(_this3.video, { autoplay: _this3.options.autoplay }, function () {\n _this3.container.classList.remove('dplayer-loading');\n });\n });\n } else {\n this.notice('Error: Webtorrent is not supported.');\n }\n } else {\n this.notice('Error: Can\\'t find Webtorrent.');\n }\n break;\n }\n }\n }\n },\n {\n key: 'initVideo',\n value: function initVideo(video, type) {\n var _this4 = this;\n this.initMSE(video, type);\n this.on('durationchange', function () {\n if (video.duration !== 1) {\n _this4.template.dtime.innerHTML = _utils2.default.secondToTime(video.duration);\n }\n });\n this.on('progress', function () {\n var percentage = video.buffered.length ? video.buffered.end(video.buffered.length - 1) / video.duration : 0;\n _this4.bar.set('loaded', percentage, 'width');\n });\n this.on('error', function () {\n _this4.tran && _this4.notice && _this4.type !== 'webtorrent' & _this4.notice(_this4.tran('Video load failed'), -1);\n });\n this.on('ended', function () {\n _this4.bar.set('played', 1, 'width');\n if (!_this4.setting.loop) {\n _this4.pause();\n } else {\n _this4.seek(0);\n video.play();\n }\n if (_this4.danmaku) {\n _this4.danmaku.danIndex = 0;\n }\n });\n this.on('play', function () {\n if (_this4.paused) {\n _this4.play();\n }\n });\n this.on('pause', function () {\n if (!_this4.paused) {\n _this4.pause();\n }\n });\n this.on('timeupdate', function () {\n _this4.bar.set('played', _this4.video.currentTime / _this4.video.duration, 'width');\n var currentTime = _utils2.default.secondToTime(_this4.video.currentTime);\n if (_this4.template.ptime.innerHTML !== currentTime) {\n _this4.template.ptime.innerHTML = currentTime;\n }\n });\n var _loop = function _loop(i) {\n video.addEventListener(_this4.events.videoEvents[i], function () {\n _this4.events.trigger(_this4.events.videoEvents[i]);\n });\n };\n for (var i = 0; i < this.events.videoEvents.length; i++) {\n _loop(i);\n }\n this.volume(this.user.get('volume'), true, true);\n if (this.options.subtitle) {\n this.subtitle = new _subtitle2.default(this.template.subtitle, this.video, this.options.subtitle, this.events);\n if (!this.user.get('subtitle')) {\n this.subtitle.hide();\n }\n }\n }\n },\n {\n key: 'switchQuality',\n value: function switchQuality(index) {\n var _this5 = this;\n if (this.qualityIndex === index || this.switchingQuality) {\n return;\n } else {\n this.qualityIndex = index;\n }\n this.switchingQuality = true;\n this.quality = this.options.video.quality[index];\n this.template.qualityButton.innerHTML = this.quality.name;\n var paused = this.video.paused;\n this.video.pause();\n var videoHTML = (0, _video2.default)({\n current: false,\n pic: null,\n screenshot: this.options.screenshot,\n preload: 'auto',\n url: this.quality.url,\n subtitle: this.options.subtitle\n });\n var videoEle = new DOMParser().parseFromString(videoHTML, 'text/html').body.firstChild;\n this.template.videoWrap.insertBefore(videoEle, this.template.videoWrap.getElementsByTagName('div')[0]);\n this.prevVideo = this.video;\n this.video = videoEle;\n this.initVideo(this.video, this.quality.type || this.options.video.type);\n this.seek(this.prevVideo.currentTime);\n this.notice(this.tran('Switching to') + ' ' + this.quality.name + ' ' + this.tran('quality'), -1);\n this.events.trigger('quality_start', this.quality);\n this.on('canplay', function () {\n if (_this5.prevVideo) {\n if (_this5.video.currentTime !== _this5.prevVideo.currentTime) {\n _this5.seek(_this5.prevVideo.currentTime);\n return;\n }\n _this5.template.videoWrap.removeChild(_this5.prevVideo);\n _this5.video.classList.add('dplayer-video-current');\n if (!paused) {\n _this5.video.play();\n }\n _this5.prevVideo = null;\n _this5.notice(_this5.tran('Switched to') + ' ' + _this5.quality.name + ' ' + _this5.tran('quality'));\n _this5.switchingQuality = false;\n _this5.events.trigger('quality_end');\n }\n });\n }\n },\n {\n key: 'notice',\n value: function notice(text) {\n var _this6 = this;\n var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2000;\n var opacity = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0.8;\n this.template.notice.innerHTML = text;\n this.template.notice.style.opacity = opacity;\n if (this.noticeTime) {\n clearTimeout(this.noticeTime);\n }\n this.events.trigger('notice_show', text);\n if (time > 0) {\n this.noticeTime = setTimeout(function () {\n _this6.template.notice.style.opacity = 0;\n _this6.events.trigger('notice_hide');\n }, time);\n }\n }\n },\n {\n key: 'resize',\n value: function resize() {\n if (this.danmaku) {\n this.danmaku.resize();\n }\n this.events.trigger('resize');\n }\n },\n {\n key: 'speed',\n value: function speed(rate) {\n this.video.playbackRate = rate;\n }\n },\n {\n key: 'destroy',\n value: function destroy() {\n instances.splice(instances.indexOf(this), 1);\n this.pause();\n this.controller.destroy();\n this.timer.destroy();\n this.video.src = '';\n this.container.innerHTML = '';\n this.events.trigger('destroy');\n }\n }\n ], [{\n key: 'version',\n get: function get() {\n return DPLAYER_VERSION;\n }\n }]);\n return DPlayer;\n}();\nexports.default = DPlayer;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nrequire('../css/index.scss');\nvar _player = require('./player');\nvar _player2 = _interopRequireDefault(_player);\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n}\nconsole.log('\\n' + ' %c DPlayer v' + DPLAYER_VERSION + ' ' + GIT_HASH + ' %c http://dplayer.js.org ' + '\\n' + '\\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');\nexports.default = _player2.default;"],"sourceRoot":""} \ No newline at end of file diff --git a/upload/static/js/player/flv.min.js b/upload/static/js/player/flv.min.js new file mode 100644 index 0000000000000000000000000000000000000000..fed09f7e630030c7a6d7c3460efcdd25e8b7a3df --- /dev/null +++ b/upload/static/js/player/flv.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.flvjs=e()}}(function(){var e;return function e(t,n,i){function r(a,o){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!o&&u)return u(a,!0);if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[a]={exports:{}};t[a][0].call(d.exports,function(e){var n=t[a][1][e];return r(n||e)},d,d.exports,e,t,n,i)}return n[a].exports}for(var s="function"==typeof require&&require,a=0;a0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function n(){this.removeListener(e,n),i||(i=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var i=!1;return n.listener=t,this.on(e,n),this},i.prototype.removeListener=function(e,t){var n,i,s,o;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],s=n.length,i=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(n)){for(o=s;o-- >0;)if(n[o]===t||n[o].listener&&n[o].listener===t){i=o;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,n;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(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],3:[function(e,t,n){function i(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function s(e){if(h===setTimeout)return setTimeout(e,0);if((h===i||!h)&&setTimeout)return h=setTimeout,setTimeout(e,0);try{return h(e,0)}catch(t){try{return h.call(null,e,0)}catch(t){return h.call(this,e,0)}}}function a(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function o(){p&&_&&(p=!1,_.length?m=_.concat(m):v=-1,m.length&&u())}function u(){if(!p){var e=s(o);p=!0;for(var t=m.length;t;){for(_=m,m=[];++v1)for(var n=1;n=e[r]&&t0&&e[0].originalDts=t[r].dts&&et[i].lastSample.originalDts&&e=t[i].lastSample.originalDts&&(i===t.length-1||i0&&(r=this._searchNearestSegmentBefore(n.originalBeginDts)+1),this._lastAppendLocation=r,this._list.splice(r,0,n)}},{key:"getLastSegmentBefore",value:function(e){var t=this._searchNearestSegmentBefore(e);return t>=0?this._list[t]:null}},{key:"getLastSampleBefore",value:function(e){var t=this.getLastSegmentBefore(e);return null!=t?t.lastSample:null}},{key:"getLastSyncPointBefore",value:function(e){for(var t=this._searchNearestSegmentBefore(e),n=this._list[t].syncPoints;0===n.length&&t>0;)t--,n=this._list[t].syncPoints;return n.length>0?n[n.length-1]:null}},{key:"type",get:function(){return this._type}},{key:"length",get:function(){return this._list.length}}]),e}()},{}],9:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0&&(i+=";codecs="+n.codec);var r=!1;if(l.default.v(this.TAG,"Received Initialization Segment, mimeType: "+i),this._lastInitSegments[n.type]=n,i!==this._mimeTypes[n.type]){if(this._mimeTypes[n.type])l.default.v(this.TAG,"Notice: "+n.type+" mimeType changed, origin: "+this._mimeTypes[n.type]+", target: "+i);else{r=!0;try{var s=this._sourceBuffers[n.type]=this._mediaSource.addSourceBuffer(i);s.addEventListener("error",this.e.onSourceBufferError),s.addEventListener("updateend",this.e.onSourceBufferUpdateEnd)}catch(e){return l.default.e(this.TAG,e.message),void this._emitter.emit(c.default.ERROR,{code:e.code,msg:e.message})}}this._mimeTypes[n.type]=i}t||this._pendingSegments[n.type].push(n),r||this._sourceBuffers[n.type]&&!this._sourceBuffers[n.type].updating&&this._doAppendSegments(),h.default.safari&&"audio/mpeg"===n.container&&n.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=n.mediaDuration/1e3,this._updateMediaSourceDuration())}},{key:"appendMediaSegment",value:function(e){var t=e;this._pendingSegments[t.type].push(t),this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer();var n=this._sourceBuffers[t.type];!n||n.updating||this._hasPendingRemoveRanges()||this._doAppendSegments()}},{key:"seek",value:function(e){for(var t in this._sourceBuffers)if(this._sourceBuffers[t]){var n=this._sourceBuffers[t];if("open"===this._mediaSource.readyState)try{n.abort()}catch(e){l.default.e(this.TAG,e.message)}this._idrList.clear();var i=this._pendingSegments[t];if(i.splice(0,i.length),"closed"!==this._mediaSource.readyState){for(var r=0;r=1&&e-i.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}}return!1}},{key:"_doCleanupSourceBuffer",value:function(){var e=this._mediaElement.currentTime;for(var t in this._sourceBuffers){var n=this._sourceBuffers[t];if(n){for(var i=n.buffered,r=!1,s=0;s=this._config.autoCleanupMaxBackwardDuration){r=!0;var u=e-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[t].push({start:a,end:u})}}else o0&&(isNaN(t)||n>t)&&(l.default.v(this.TAG,"Update MediaSource duration from "+t+" to "+n),this._mediaSource.duration=n),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}}},{key:"_doRemoveRanges",value:function(){for(var e in this._pendingRemoveRanges)if(this._sourceBuffers[e]&&!this._sourceBuffers[e].updating)for(var t=this._sourceBuffers[e],n=this._pendingRemoveRanges[e];n.length&&!t.updating;){var i=n.shift();t.remove(i.start,i.end)}}},{key:"_doAppendSegments",value:function(){var e=this._pendingSegments;for(var t in e)if(this._sourceBuffers[t]&&!this._sourceBuffers[t].updating&&e[t].length>0){var n=e[t].shift();if(n.timestampOffset){var i=this._sourceBuffers[t].timestampOffset,r=n.timestampOffset/1e3,s=Math.abs(i-r);s>.1&&(l.default.v(this.TAG,"Update MPEG audio timestampOffset from "+i+" to "+r),this._sourceBuffers[t].timestampOffset=r),delete n.timestampOffset}if(!n.data||0===n.data.byteLength)continue;try{this._sourceBuffers[t].appendBuffer(n.data),this._isBufferFull=!1,"video"===t&&n.hasOwnProperty("info")&&this._idrList.appendArray(n.info.syncPoints)}catch(e){this._pendingSegments[t].unshift(n),22===e.code?(this._isBufferFull||this._emitter.emit(c.default.BUFFER_FULL),this._isBufferFull=!0):(l.default.e(this.TAG,e.message),this._emitter.emit(c.default.ERROR,{code:e.code,msg:e.message}))}}}},{key:"_onSourceOpen",value:function(){if(l.default.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._pendingSourceBufferInit.length>0)for(var e=this._pendingSourceBufferInit;e.length;){var t=e.shift();this.appendInitSegment(t,!0)}this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(c.default.SOURCE_OPEN)}},{key:"_onSourceEnded",value:function(){l.default.v(this.TAG,"MediaSource onSourceEnded")}},{key:"_onSourceClose",value:function(){l.default.v(this.TAG,"MediaSource onSourceClose"),this._mediaSource&&null!=this.e&&(this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.e.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.e.onSourceClose))}},{key:"_hasPendingSegments",value:function(){var e=this._pendingSegments;return e.video.length>0||e.audio.length>0}},{key:"_hasPendingRemoveRanges",value:function(){var e=this._pendingRemoveRanges;return e.video.length>0||e.audio.length>0}},{key:"_onSourceBufferUpdateEnd",value:function(){this._requireSetMediaDuration?this._updateMediaSourceDuration():this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(c.default.UPDATE_END)}},{key:"_onSourceBufferError",value:function(e){l.default.e(this.TAG,"SourceBuffer Error: "+e)}}]),e}();n.default=p},{"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./media-segment-info.js":8,"./mse-events.js":10,events:2}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={ERROR:"error",SOURCE_OPEN:"source_open",UPDATE_END:"update_end",BUFFER_FULL:"buffer_full"};n.default=i},{}],11:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){ +function e(e,t){for(var n=0;n0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,r=this._demuxer.parseChunks(e,t);else if((i=m.default.probe(e)).match){this._demuxer=new m.default(i,this._config),this._remuxer||(this._remuxer=new v.default(this._config));var s=this._mediaDataSource;void 0==s.duration||isNaN(s.duration)||(this._demuxer.overridedDuration=s.duration),"boolean"==typeof s.hasAudio&&(this._demuxer.overridedHasAudio=s.hasAudio),"boolean"==typeof s.hasVideo&&(this._demuxer.overridedHasVideo=s.hasVideo),this._demuxer.timestampBase=s.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onMetaDataArrived=this._onMetaDataArrived.bind(this),this._demuxer.onScriptDataArrived=this._onScriptDataArrived.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this),r=this._demuxer.parseChunks(e,t)}else i=null,l.default.e(this.TAG,"Non-FLV, Unsupported media type!"),Promise.resolve().then(function(){n._internalAbort()}),this._emitter.emit(k.default.DEMUX_ERROR,y.default.FORMAT_UNSUPPORTED,"Non-FLV, Unsupported media type"),r=0;return r}},{key:"_onMediaInfo",value:function(e){var t=this;null==this._mediaInfo&&(this._mediaInfo=Object.assign({},e),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,c.default.prototype));var n=Object.assign({},e);Object.setPrototypeOf(n,c.default.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=n,this._reportSegmentMediaInfo(this._currentSegmentIndex),null!=this._pendingSeekTime&&Promise.resolve().then(function(){var e=t._pendingSeekTime;t._pendingSeekTime=null,t.seek(e)})}},{key:"_onMetaDataArrived",value:function(e){this._emitter.emit(k.default.METADATA_ARRIVED,e)}},{key:"_onScriptDataArrived",value:function(e){this._emitter.emit(k.default.SCRIPTDATA_ARRIVED,e)}},{key:"_onIOSeeked",value:function(){this._remuxer.insertDiscontinuity()}},{key:"_onIOComplete",value:function(e){var t=e,n=t+1;n0&&n[0].originalDts===i&&(i=n[0].pts),this._emitter.emit(k.default.RECOMMEND_SEEKPOINT,i)}}},{key:"_enableStatisticsReporter",value:function(){null==this._statisticsReporter&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))}},{key:"_disableStatisticsReporter",value:function(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"_reportSegmentMediaInfo",value:function(e){var t=this._mediaInfo.segments[e],n=Object.assign({},t);n.duration=this._mediaInfo.duration,n.segmentCount=this._mediaInfo.segmentCount,delete n.segments,delete n.keyframesIndex,this._emitter.emit(k.default.MEDIA_INFO,n)}},{key:"_reportStatisticsInfo",value:function(){var e={};e.url=this._ioctl.currentURL,e.hasRedirect=this._ioctl.hasRedirect,e.hasRedirect&&(e.redirectedURL=this._ioctl.currentRedirectedURL),e.speed=this._ioctl.currentSpeed,e.loaderType=this._ioctl.loaderType,e.currentSegmentIndex=this._currentSegmentIndex,e.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(k.default.STATISTICS_INFO,e)}}]),e}());n.default=L},{"../demux/demux-errors.js":16,"../demux/flv-demuxer.js":18,"../io/io-controller.js":23,"../io/loader.js":24,"../remux/mp4-remuxer.js":38,"../utils/browser.js":39,"../utils/logger.js":41,"./media-info.js":7,"./transmuxing-events.js":13,events:2}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={IO_ERROR:"io_error",DEMUX_ERROR:"demux_error",INIT_SEGMENT:"init_segment",MEDIA_SEGMENT:"media_segment",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",METADATA_ARRIVED:"metadata_arrived",SCRIPTDATA_ARRIVED:"scriptdata_arrived",STATISTICS_INFO:"statistics_info",RECOMMEND_SEEKPOINT:"recommend_seekpoint"};n.default=i},{}],14:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r=e("../utils/logger.js"),s=(i(r),e("../utils/logging-control.js")),a=i(s),o=e("../utils/polyfill.js"),u=i(o),l=e("./transmuxing-controller.js"),d=i(l),h=e("./transmuxing-events.js"),f=i(h),c=function(e){function t(t,n){var i={msg:f.default.INIT_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function n(t,n){var i={msg:f.default.MEDIA_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function i(){var t={msg:f.default.LOADING_COMPLETE};e.postMessage(t)}function r(){var t={msg:f.default.RECOVERED_EARLY_EOF};e.postMessage(t)}function s(t){var n={msg:f.default.MEDIA_INFO,data:t};e.postMessage(n)}function o(t){var n={msg:f.default.METADATA_ARRIVED,data:t};e.postMessage(n)}function l(t){var n={msg:f.default.SCRIPTDATA_ARRIVED,data:t};e.postMessage(n)}function h(t){var n={msg:f.default.STATISTICS_INFO,data:t};e.postMessage(n)}function c(t,n){e.postMessage({msg:f.default.IO_ERROR,data:{type:t,info:n}})}function _(t,n){e.postMessage({msg:f.default.DEMUX_ERROR,data:{type:t,info:n}})}function m(t){e.postMessage({msg:f.default.RECOMMEND_SEEKPOINT,data:t})}function p(t,n){e.postMessage({msg:"logcat_callback",data:{type:t,logcat:n}})}var v=null,g=p.bind(this);u.default.install(),e.addEventListener("message",function(u){switch(u.data.cmd){case"init":v=new d.default(u.data.param[0],u.data.param[1]),v.on(f.default.IO_ERROR,c.bind(this)),v.on(f.default.DEMUX_ERROR,_.bind(this)),v.on(f.default.INIT_SEGMENT,t.bind(this)),v.on(f.default.MEDIA_SEGMENT,n.bind(this)),v.on(f.default.LOADING_COMPLETE,i.bind(this)),v.on(f.default.RECOVERED_EARLY_EOF,r.bind(this)),v.on(f.default.MEDIA_INFO,s.bind(this)),v.on(f.default.METADATA_ARRIVED,o.bind(this)),v.on(f.default.SCRIPTDATA_ARRIVED,l.bind(this)),v.on(f.default.STATISTICS_INFO,h.bind(this)),v.on(f.default.RECOMMEND_SEEKPOINT,m.bind(this));break;case"destroy":v&&(v.destroy(),v=null),e.postMessage({msg:"destroyed"});break;case"start":v.start();break;case"stop":v.stop();break;case"seek":v.seek(u.data.param);break;case"pause":v.pause();break;case"resume":v.resume();break;case"logging_config":var p=u.data.param;a.default.applyConfig(p),!0===p.enableCallback?a.default.addLogListener(g):a.default.removeLogListener(g)}})};n.default=c},{"../utils/logger.js":41,"../utils/logging-control.js":42,"../utils/polyfill.js":43,"./transmuxing-controller.js":12,"./transmuxing-events.js":13}],15:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0?(0,l.default)(new Uint8Array(e,t+2,r)):"",{data:s,size:2+r}}},{key:"parseLongString",value:function(e,t,n){if(n<4)throw new d.IllegalStateException("Data not enough when parse LongString");var i=new DataView(e,t,n),r=i.getUint32(0,!h),s=void 0;return s=r>0?(0,l.default)(new Uint8Array(e,t+4,r)):"",{data:s,size:4+r}}},{key:"parseDate",value:function(e,t,n){if(n<10)throw new d.IllegalStateException("Data size invalid when parse Date");var i=new DataView(e,t,n),r=i.getFloat64(0,!h);return r+=60*i.getInt16(8,!h)*1e3,{data:new Date(r),size:10}}},{key:"parseValue",value:function(t,n,i){if(i<1)throw new d.IllegalStateException("Data not enough when parse Value");var r=new DataView(t,n,i),s=1,a=r.getUint8(0),u=void 0,l=!1;try{switch(a){case 0:u=r.getFloat64(1,!h),s+=8;break;case 1:u=!!r.getUint8(1),s+=1;break;case 2:var f=e.parseString(t,n+1,i-1);u=f.data,s+=f.size;break;case 3:u={};var c=0;for(9==(16777215&r.getUint32(i-4,!h))&&(c=3);s32)throw new s.InvalidArgumentException("ExpGolomb: readBits() bits exceeded max 32bits!");if(e<=this._current_word_bits_left){var t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}var n=this._current_word_bits_left?this._current_word:0;n>>>=32-this._current_word_bits_left;var i=e-this._current_word_bits_left;this._fillCurrentWord();var r=Math.min(i,this._current_word_bits_left),a=this._current_word>>>32-r;return this._current_word<<=r,this._current_word_bits_left-=r,n=n<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}},{key:"readUEG",value:function(){var e=this._skipLeadingZero();return this.readBits(e+1)-1}},{key:"readSEG",value:function(){var e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}]),e}();n.default=a},{"../utils/exception.js":40}],18:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}Object.defineProperty(n,"__esModule",{value:!0});var a="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},o=function(){function e(e,t){for(var n=0;n13))return 0;i=e.probe(t).dataOffset}if(this._firstParse){this._firstParse=!1,n+i!==this._dataOffset&&l.default.w(this.TAG,"First time parsing but chunk byteStart invalid!");0!==new DataView(t,i).getUint32(0,!r)&&l.default.w(this.TAG,"PrevTagSize0 !== 0 !!!"),i+=4}for(;it.byteLength)break;var a=s.getUint8(0),o=16777215&s.getUint32(0,!r);if(i+11+o+4>t.byteLength)break;if(8===a||9===a||18===a){var u=s.getUint8(4),d=s.getUint8(5),h=s.getUint8(6),f=s.getUint8(7),c=h|d<<8|u<<16|f<<24;0!==(16777215&s.getUint32(7,!r))&&l.default.w(this.TAG,"Meet tag which has StreamID != 0!");var _=i+11;switch(a){case 8:this._parseAudioData(t,_,o,c);break;case 9:this._parseVideoData(t,_,o,c,n+i);break;case 18:this._parseScriptData(t,_,o)}var m=s.getUint32(11+o,!r);m!==11+o&&l.default.w(this.TAG,"Invalid PrevTagSize "+m),i+=11+o+4}else l.default.w(this.TAG,"Unsupported tag type "+a+", skipped"),i+=11+o+4}return this._isInitialMetadataDispatched()&&this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack),i}},{key:"_parseScriptData",value:function(e,t,n){var i=h.default.parseScriptData(e,t,n);if(i.hasOwnProperty("onMetaData")){if(null==i.onMetaData||"object"!==a(i.onMetaData))return void l.default.w(this.TAG,"Invalid onMetaData structure!");this._metadata&&l.default.w(this.TAG,"Found another onMetaData tag!"),this._metadata=i;var r=this._metadata.onMetaData;if(this._onMetaDataArrived&&this._onMetaDataArrived(Object.assign({},r)),"boolean"==typeof r.hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=r.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),"boolean"==typeof r.hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=r.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),"number"==typeof r.audiodatarate&&(this._mediaInfo.audioDataRate=r.audiodatarate),"number"==typeof r.videodatarate&&(this._mediaInfo.videoDataRate=r.videodatarate),"number"==typeof r.width&&(this._mediaInfo.width=r.width),"number"==typeof r.height&&(this._mediaInfo.height=r.height),"number"==typeof r.duration){if(!this._durationOverrided){var s=Math.floor(r.duration*this._timescale);this._duration=s,this._mediaInfo.duration=s}}else this._mediaInfo.duration=0;if("number"==typeof r.framerate){var o=Math.floor(1e3*r.framerate);if(o>0){var u=o/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=u,this._referenceFrameRate.fps_num=o,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=u}}if("object"===a(r.keyframes)){this._mediaInfo.hasKeyframesIndex=!0;var d=r.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(d),r.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._dispatch=!1,this._mediaInfo.metadata=r,l.default.v(this.TAG,"Parsed onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}Object.keys(i).length>0&&this._onScriptDataArrived&&this._onScriptDataArrived(Object.assign({},i))}},{key:"_parseKeyframesIndex",value:function(e){for(var t=[],n=[],i=1;i>>4;if(2!==a&&10!==a)return void this._onError(m.default.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+a);var o=0,u=(12&s)>>>2;if(!(u>=0&&u<=4))return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+u);o=this._flvSoundRateTable[u];var d=1&s,h=this._audioMetadata,f=this._audioTrack;if(h||(!1===this._hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),h=this._audioMetadata={},h.type="audio",h.id=f.id,h.timescale=this._timescale,h.duration=this._duration,h.audioSampleRate=o,h.channelCount=0===d?1:2),10===a){var c=this._parseAACAudioData(e,t+1,n-1);if(void 0==c)return;if(0===c.packetType){h.config&&l.default.w(this.TAG,"Found another AudioSpecificConfig!");var _=c.data;h.audioSampleRate=_.samplingRate,h.channelCount=_.channelCount,h.codec=_.codec,h.originalCodec=_.originalCodec,h.config=_.config, +h.refSampleDuration=1024/h.audioSampleRate*h.timescale,l.default.v(this.TAG,"Parsed AudioSpecificConfig"),this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._audioInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("audio",h);var p=this._mediaInfo;p.audioCodec=h.originalCodec,p.audioSampleRate=h.audioSampleRate,p.audioChannelCount=h.channelCount,p.hasVideo?null!=p.videoCodec&&(p.mimeType='video/x-flv; codecs="'+p.videoCodec+","+p.audioCodec+'"'):p.mimeType='video/x-flv; codecs="'+p.audioCodec+'"',p.isComplete()&&this._onMediaInfo(p)}else if(1===c.packetType){var v=this._timestampBase+i,g={unit:c.data,length:c.data.byteLength,dts:v,pts:v};f.samples.push(g),f.length+=c.data.length}else l.default.e(this.TAG,"Flv: Unsupported AAC data type "+c.packetType)}else if(2===a){if(!h.codec){var y=this._parseMP3AudioData(e,t+1,n-1,!0);if(void 0==y)return;h.audioSampleRate=y.samplingRate,h.channelCount=y.channelCount,h.codec=y.codec,h.originalCodec=y.originalCodec,h.refSampleDuration=1152/h.audioSampleRate*h.timescale,l.default.v(this.TAG,"Parsed MPEG Audio Frame Header"),this._audioInitialMetadataDispatched=!0,this._onTrackMetadata("audio",h);var E=this._mediaInfo;E.audioCodec=h.codec,E.audioSampleRate=h.audioSampleRate,E.audioChannelCount=h.channelCount,E.audioDataRate=y.bitRate,E.hasVideo?null!=E.videoCodec&&(E.mimeType='video/x-flv; codecs="'+E.videoCodec+","+E.audioCodec+'"'):E.mimeType='video/x-flv; codecs="'+E.audioCodec+'"',E.isComplete()&&this._onMediaInfo(E)}var b=this._parseMP3AudioData(e,t+1,n-1,!1);if(void 0==b)return;var S=this._timestampBase+i,k={unit:b,length:b.byteLength,dts:S,pts:S};f.samples.push(k),f.length+=b.length}}}},{key:"_parseAACAudioData",value:function(e,t,n){if(n<=1)return void l.default.w(this.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!");var i={},r=new Uint8Array(e,t,n);return i.packetType=r[0],0===r[0]?i.data=this._parseAACAudioSpecificConfig(e,t+1,n-1):i.data=r.subarray(1),i}},{key:"_parseAACAudioSpecificConfig",value:function(e,t,n){var i=new Uint8Array(e,t,n),r=null,s=0,a=0,o=0,u=null;if(s=a=i[0]>>>3,(o=(7&i[0])<<1|i[1]>>>7)<0||o>=this._mpegSamplingRates.length)return void this._onError(m.default.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");var l=this._mpegSamplingRates[o],d=(120&i[1])>>>3;if(d<0||d>=8)return void this._onError(m.default.FORMAT_ERROR,"Flv: AAC invalid channel configuration");5===s&&(u=(7&i[1])<<1|i[2]>>>7,i[2]);var h=self.navigator.userAgent.toLowerCase();return-1!==h.indexOf("firefox")?o>=6?(s=5,r=new Array(4),u=o-3):(s=2,r=new Array(2),u=o):-1!==h.indexOf("android")?(s=2,r=new Array(2),u=o):(s=5,u=o,r=new Array(4),o>=6?u=o-3:1===d&&(s=2,r=new Array(2),u=o)),r[0]=s<<3,r[0]|=(15&o)>>>1,r[1]=(15&o)<<7,r[1]|=(15&d)<<3,5===s&&(r[1]|=(15&u)>>>1,r[2]=(1&u)<<7,r[2]|=8,r[3]=0),{config:r,samplingRate:l,channelCount:d,codec:"mp4a.40."+s,originalCodec:"mp4a.40."+a}}},{key:"_parseMP3AudioData",value:function(e,t,n,i){if(n<4)return void l.default.w(this.TAG,"Flv: Invalid MP3 packet, header missing!");var r=(this._littleEndian,new Uint8Array(e,t,n)),s=null;if(i){if(255!==r[0])return;var a=r[1]>>>3&3,o=(6&r[1])>>1,u=(240&r[2])>>>4,d=(12&r[2])>>>2,h=r[3]>>>6&3,f=3!==h?2:1,c=0,_=0;switch(a){case 0:c=this._mpegAudioV25SampleRateTable[d];break;case 2:c=this._mpegAudioV20SampleRateTable[d];break;case 3:c=this._mpegAudioV10SampleRateTable[d]}switch(o){case 1:34,u>>4,o=15&s;if(7!==o)return void this._onError(m.default.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: "+o);this._parseAVCVideoPacket(e,t+1,n-1,i,r,a)}}},{key:"_parseAVCVideoPacket",value:function(e,t,n,i,r,s){if(n<4)return void l.default.w(this.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");var a=this._littleEndian,o=new DataView(e,t,n),u=o.getUint8(0),d=16777215&o.getUint32(0,!a),h=d<<8>>8;if(0===u)this._parseAVCDecoderConfigurationRecord(e,t+4,n-4);else if(1===u)this._parseAVCVideoData(e,t+4,n-4,i,r,s,h);else if(2!==u)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid video packet type "+u)}},{key:"_parseAVCDecoderConfigurationRecord",value:function(e,t,n){if(n<7)return void l.default.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");var i=this._videoMetadata,r=this._videoTrack,s=this._littleEndian,a=new DataView(e,t,n);i?void 0!==i.avcc&&l.default.w(this.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),i=this._videoMetadata={},i.type="video",i.id=r.id,i.timescale=this._timescale,i.duration=this._duration);var o=a.getUint8(0),u=a.getUint8(1);a.getUint8(2),a.getUint8(3);if(1!==o||0===u)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord");if(this._naluLengthSize=1+(3&a.getUint8(4)),3!==this._naluLengthSize&&4!==this._naluLengthSize)return void this._onError(m.default.FORMAT_ERROR,"Flv: Strange NaluLengthSizeMinusOne: "+(this._naluLengthSize-1));var d=31&a.getUint8(5);if(0===d)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No SPS");d>1&&l.default.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: SPS Count = "+d);for(var h=6,f=0;f1&&l.default.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: PPS Count = "+R),h++;for(var A=0;A=n){l.default.w(this.TAG,"Malformed Nalu near timestamp "+_+", offset = "+f+", dataSize = "+n);break}var p=u.getUint32(f,!o);if(3===c&&(p>>>=8),p>n-c)return void l.default.w(this.TAG,"Malformed Nalus near timestamp "+_+", NaluSize > DataSize!");var v=31&u.getUint8(f+c);5===v&&(m=!0);var g=new Uint8Array(e,t+f,c+p),y={type:v,data:g};d.push(y),h+=g.byteLength,f+=c+p}if(d.length){var E=this._videoTrack,b={units:d,length:h,isKeyframe:m,dts:_,cts:a,pts:_+a};m&&(b.fileposition=r),E.samples.push(b),E.length+=h}}},{key:"onTrackMetadata",get:function(){return this._onTrackMetadata},set:function(e){this._onTrackMetadata=e}},{key:"onMediaInfo",get:function(){return this._onMediaInfo},set:function(e){this._onMediaInfo=e}},{key:"onMetaDataArrived",get:function(){return this._onMetaDataArrived},set:function(e){this._onMetaDataArrived=e}},{key:"onScriptDataArrived",get:function(){return this._onScriptDataArrived},set:function(e){this._onScriptDataArrived=e}},{key:"onError",get:function(){return this._onError},set:function(e){this._onError=e}},{key:"onDataAvailable",get:function(){return this._onDataAvailable},set:function(e){this._onDataAvailable=e}},{key:"timestampBase",get:function(){return this._timestampBase},set:function(e){this._timestampBase=e}},{key:"overridedDuration",get:function(){return this._duration},set:function(e){this._durationOverrided=!0,this._duration=e,this._mediaInfo.duration=e}},{key:"overridedHasAudio",set:function(e){this._hasAudioFlagOverrided=!0,this._hasAudio=e,this._mediaInfo.hasAudio=e}},{key:"overridedHasVideo",set:function(e){this._hasVideoFlagOverrided=!0,this._hasVideo=e,this._mediaInfo.hasVideo=e}}],[{key:"probe",value:function(e){var t=new Uint8Array(e),n={match:!1};if(70!==t[0]||76!==t[1]||86!==t[2]||1!==t[3])return n;var i=(4&t[4])>>>2!=0,r=0!=(1&t[4]),a=s(t,5);return a<9?n:{match:!0,consumed:a,dataOffset:a,hasAudioTrack:i,hasVideoTrack:r}}}]),e}();n.default=y},{"../core/media-info.js":7,"../utils/exception.js":40,"../utils/logger.js":41,"./amf-parser.js":15,"./demux-errors.js":16,"./sps-parser.js":19}],19:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=2&&3===t[s]&&0===t[s-1]&&0===t[s-2]||(i[r]=t[s],r++);return new Uint8Array(i.buffer,0,r)}},{key:"parseSPS",value:function(t){var n=e._ebsp2rbsp(t),i=new a.default(n);i.readByte();var r=i.readByte();i.readByte();var s=i.readByte();i.readUEG();var o=e.getProfileString(r),u=e.getLevelString(s),l=1,d=420,h=[0,420,422,444],f=8;if((100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r||138===r||144===r)&&(l=i.readUEG(),3===l&&i.readBits(1),l<=3&&(d=h[l]),f=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool()))for(var c=3!==l?8:12,_=0;_0&&D<16?(A=x[D-1],w=M[D-1]):255===D&&(A=i.readByte()<<8|i.readByte(),w=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){var B=i.readBits(32),j=i.readBits(32);O=i.readBool(),C=j,I=2*B,T=C/I}}var P=1;1===A&&1===w||(P=A/w);var U=0,N=0;if(0===l)U=1,N=2-b;else{var F=3===l?1:2,G=1===l?2:1;U=F,N=G*(2-b)}var V=16*(y+1),z=16*(E+1)*(2-b);V-=(S+k)*U,z-=(L+R)*N;var H=Math.ceil(V*P);return i.destroy(),i=null,{profile_string:o,level_string:u,bit_depth:f,ref_frames:g,chroma_format:d,chroma_format_string:e.getChromaFormatString(d),frame_rate:{fixed:O,fps:T,fps_den:I,fps_num:C},sar_ratio:{width:A,height:w},codec_size:{width:V,height:z},present_size:{width:H,height:z}}}},{key:"_skipScalingList",value:function(e,t){for(var n=8,i=8,r=0,s=0;s=15048,t=!f.default.msedge||e;return self.fetch&&self.ReadableStream&&t}catch(e){return!1}}}]),l(t,[{key:"destroy",value:function(){this.isWorking()&&this.abort(),u(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this)}},{key:"open",value:function(e,t){var n=this;this._dataSource=e,this._range=t;var i=e.url;this._config.reuseRedirectedURL&&void 0!=e.redirectedURL&&(i=e.redirectedURL);var r=this._seekHandler.getConfig(i,t),s=new self.Headers;if("object"===o(r.headers)){var a=r.headers;for(var u in a)a.hasOwnProperty(u)&&s.append(u,a[u])}var l={method:"GET",headers:s,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};if("object"===o(this._config.headers))for(var d in this._config.headers)s.append(d,this._config.headers[d]);!1===e.cors&&(l.mode="same-origin"),e.withCredentials&&(l.credentials="include"),e.referrerPolicy&&(l.referrerPolicy=e.referrerPolicy),this._status=c.LoaderStatus.kConnecting,self.fetch(r.url,l).then(function(e){if(n._requestAbort)return n._requestAbort=!1,void(n._status=c.LoaderStatus.kIdle);if(e.ok&&e.status>=200&&e.status<=299){if(e.url!==r.url&&n._onURLRedirect){var t=n._seekHandler.removeURLParameters(e.url);n._onURLRedirect(t)}var i=e.headers.get("Content-Length");return null!=i&&(n._contentLength=parseInt(i),0!==n._contentLength&&n._onContentLengthKnown&&n._onContentLengthKnown(n._contentLength)),n._pump.call(n,e.body.getReader())}if(n._status=c.LoaderStatus.kError,!n._onError)throw new _.RuntimeException("FetchStreamLoader: Http code invalid, "+e.status+" "+e.statusText);n._onError(c.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:e.status,msg:e.statusText})}).catch(function(e){if(n._status=c.LoaderStatus.kError,!n._onError)throw e;n._onError(c.LoaderErrors.EXCEPTION,{code:-1,msg:e.message})})}},{key:"abort",value:function(){this._requestAbort=!0}},{key:"_pump",value:function(e){var t=this;return e.read().then(function(n){if(n.done)if(null!==t._contentLength&&t._receivedLength0&&(this._stashInitialSize=n.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=3145728,this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,!1===n.enableStashBuffer&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=t,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(t.url),this._refTotalLength=t.filesize?t.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new l.default,this._speedNormalizeList=[64,128,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader()}return s(e,[{key:"destroy",value:function(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null}},{key:"isWorking",value:function(){return this._loader&&this._loader.isWorking()&&!this._paused}},{key:"isPaused",value:function(){return this._paused}},{key:"_selectSeekHandler",value:function(){var e=this._config;if("range"===e.seekType)this._seekHandler=new b.default(this._config.rangeLoadZeroStart);else if("param"===e.seekType){var t=e.seekParamStart||"bstart",n=e.seekParamEnd||"bend";this._seekHandler=new k.default(t,n)}else{if("custom"!==e.seekType)throw new L.InvalidArgumentException("Invalid seekType in config: "+e.seekType);if("function"!=typeof e.customSeekHandler)throw new L.InvalidArgumentException("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new e.customSeekHandler}}},{key:"_selectLoader",value:function(){if(null!=this._config.customLoader)this._loaderClass=this._config.customLoader;else if(this._isWebSocketURL)this._loaderClass=y.default;else if(f.default.isSupported())this._loaderClass=f.default;else if(_.default.isSupported())this._loaderClass=_.default;else{if(!v.default.isSupported())throw new L.RuntimeException("Your browser doesn't support xhr with arraybuffer responseType!");this._loaderClass=v.default}}},{key:"_createLoader",value:function(){this._loader=new this._loaderClass(this._seekHandler,this._config),!1===this._loader.needStashBuffer&&(this._enableStash=!1),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)}},{key:"open",value:function(e){this._currentRange={from:0,to:-1},e&&(this._currentRange.from=e),this._speedSampler.reset(),e||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))}},{key:"abort",value:function(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)}},{key:"pause",value:function(){this.isWorking()&&(this._loader.abort(),0!==this._stashUsed?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)}},{key:"resume",value:function(){if(this._paused){this._paused=!1;var e=this._resumeFrom;this._resumeFrom=0,this._internalSeek(e,!0)}}},{key:"seek",value:function(e){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(e,!0)}},{key:"_internalSeek",value:function(e,t){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(t),this._loader.destroy(),this._loader=null;var n={from:e,to:-1};this._currentRange={from:n.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,n),this._onSeeked&&this._onSeeked()}},{key:"updateUrl",value:function(e){if(!e||"string"!=typeof e||0===e.length)throw new L.InvalidArgumentException("Url must be a non-empty string!");this._dataSource.url=e}},{key:"_expandBuffer",value:function(e){for(var t=this._stashSize;t+10485760){var i=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(n,0,t).set(i,0)}this._stashBuffer=n,this._bufferSize=t}}},{key:"_normalizeSpeed",value:function(e){var t=this._speedNormalizeList,n=t.length-1,i=0,r=0,s=n;if(e=t[i]&&e=512&&e<=1024?Math.floor(1.5*e):2*e)>8192&&(t=8192);var n=1024*t+1048576;this._bufferSize0){var o=this._stashBuffer.slice(0,this._stashUsed),u=this._dispatchChunks(o,this._stashByteStart);if(u0){var l=new Uint8Array(o,u);a.set(l,0),this._stashUsed=l.byteLength,this._stashByteStart+=u}}else this._stashUsed=0,this._stashByteStart+=u;this._stashUsed+e.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+e.byteLength),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength}else{var d=this._dispatchChunks(e,t);if(dthis._bufferSize&&(this._expandBuffer(h),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e,d),0),this._stashUsed+=h,this._stashByteStart=t+d}}}else if(0===this._stashUsed){var f=this._dispatchChunks(e,t);if(fthis._bufferSize&&this._expandBuffer(c);var _=new Uint8Array(this._stashBuffer,0,this._bufferSize);_.set(new Uint8Array(e,f),0),this._stashUsed+=c,this._stashByteStart=t+f}}else{this._stashUsed+e.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+e.byteLength);var m=new Uint8Array(this._stashBuffer,0,this._bufferSize);m.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength;var p=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart);if(p0){var v=new Uint8Array(this._stashBuffer,p);m.set(v,0)}this._stashUsed-=p,this._stashByteStart+=p}}}},{key:"_flushStashBuffer",value:function(e){if(this._stashUsed>0){var t=this._stashBuffer.slice(0,this._stashUsed),n=this._dispatchChunks(t,this._stashByteStart),i=t.byteLength-n;if(n0){var r=new Uint8Array(this._stashBuffer,0,this._bufferSize),s=new Uint8Array(t,n);r.set(s,0),this._stashUsed=s.byteLength,this._stashByteStart+=n}return 0}o.default.w(this.TAG,i+" bytes unconsumed data remain when flush buffer, dropped")}return this._stashUsed=0,this._stashByteStart=0,i}return 0}},{key:"_onLoaderComplete",value:function(e,t){this._flushStashBuffer(!0),this._onComplete&&this._onComplete(this._extraData)}},{key:"_onLoaderError",value:function(e,t){switch(o.default.e(this.TAG,"Loader error, code = "+t.code+", msg = "+t.msg),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,e=d.LoaderErrors.UNRECOVERABLE_EARLY_EOF),e){case d.LoaderErrors.EARLY_EOF:if(!this._config.isLive&&this._totalLength){var n=this._currentRange.to+1;return void(n0)for(var s=n.split("&"),a=0;a0;o[0]!==this._startName&&o[0]!==this._endName&&(u&&(r+="&"),r+=s[a])}return 0===r.length?t:t+"?"+r}}]),e}();n.default=s},{}],26:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=500?this.currentKBps:0}},{key:"averageKBps",get:function(){var e=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/e/1024}}]),e}();n.default=s},{}],28:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(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(n,"__esModule",{value:!0});var a=function e(t,n,i){null===t&&(t=Function.prototype);var r=Object.getOwnPropertyDescriptor(t,n);if(void 0===r){var s=Object.getPrototypeOf(t);return null===s?void 0:e(s,n,i)}if("value"in r)return r.value;var a=r.get;if(void 0!==a)return a.call(i)},o=function(){function e(e,t){for(var n=0;n299)){if(this._status=h.LoaderStatus.kError,!this._onError)throw new f.RuntimeException("MozChunkedLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(h.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else this._status=h.LoaderStatus.kBuffering}}},{key:"_onProgress",value:function(e){if(this._status!==h.LoaderStatus.kError){null===this._contentLength&&null!==e.total&&0!==e.total&&(this._contentLength=e.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));var t=e.target.response,n=this._range.from+this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,n,this._receivedLength)}}},{key:"_onLoadEnd",value:function(e){if(!0===this._requestAbort)return void(this._requestAbort=!1);this._status!==h.LoaderStatus.kError&&(this._status=h.LoaderStatus.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1))}},{key:"_onXhrError",value:function(e){this._status=h.LoaderStatus.kError;var t=0,n=null;if(this._contentLength&&e.loaded=200&&t.status<=299){if(this._status=h.LoaderStatus.kBuffering,void 0!=t.responseURL){var n=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&n!==this._currentRedirectedURL&&(this._currentRedirectedURL=n,this._onURLRedirect&&this._onURLRedirect(n))}var i=t.getResponseHeader("Content-Length");if(null!=i&&null==this._contentLength){var r=parseInt(i);r>0&&(this._contentLength=r,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength))}}else{if(this._status=h.LoaderStatus.kError,!this._onError)throw new f.RuntimeException("MSStreamLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(h.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else if(3===t.readyState&&t.status>=200&&t.status<=299){this._status=h.LoaderStatus.kBuffering;var s=t.response;this._reader.readAsArrayBuffer(s)}}},{key:"_xhrOnError",value:function(e){this._status=h.LoaderStatus.kError;var t=h.LoaderErrors.EXCEPTION,n={code:-1,msg:e.constructor.name+" "+e.type};if(!this._onError)throw new f.RuntimeException(n.msg);this._onError(t,n)}},{key:"_msrOnProgress",value:function(e){var t=e.target,n=t.result;if(null==n)return void this._doReconnectIfNeeded();var i=n.slice(this._lastTimeBufferSize);this._lastTimeBufferSize=n.byteLength;var r=this._totalRange.from+this._receivedLength;this._receivedLength+=i.byteLength,this._onDataArrival&&this._onDataArrival(i,r,this._receivedLength),n.byteLength>=this._bufferLimit&&(d.default.v(this.TAG,"MSStream buffer exceeded max size near "+(r+i.byteLength)+", reconnecting..."),this._doReconnectIfNeeded())}},{key:"_doReconnectIfNeeded",value:function(){if(null==this._contentLength||this._receivedLength=this._contentLength&&(n=this._range.from+this._contentLength-1),this._currentRequestRange={from:t,to:n},this._internalOpen(this._dataSource,this._currentRequestRange)}},{key:"_internalOpen",value:function(e,t){this._lastTimeLoaded=0;var n=e.url;this._config.reuseRedirectedURL&&(void 0!=this._currentRedirectedURL?n=this._currentRedirectedURL:void 0!=e.redirectedURL&&(n=e.redirectedURL));var i=this._seekHandler.getConfig(n,t);this._currentRequestURL=i.url;var r=this._xhr=new XMLHttpRequest;if(r.open("GET",i.url,!0),r.responseType="arraybuffer",r.onreadystatechange=this._onReadyStateChange.bind(this),r.onprogress=this._onProgress.bind(this),r.onload=this._onLoad.bind(this),r.onerror=this._onXhrError.bind(this),e.withCredentials&&(r.withCredentials=!0),"object"===o(i.headers)){var s=i.headers;for(var a in s)s.hasOwnProperty(a)&&r.setRequestHeader(a,s[a])}if("object"===o(this._config.headers)){var u=this._config.headers;for(var l in u)u.hasOwnProperty(l)&&r.setRequestHeader(l,u[l])}r.send()}},{key:"abort",value:function(){this._requestAbort=!0,this._internalAbort(),this._status=_.LoaderStatus.kComplete}},{key:"_internalAbort",value:function(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)}},{key:"_onReadyStateChange",value:function(e){var t=e.target;if(2===t.readyState){if(void 0!=t.responseURL){var n=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&n!==this._currentRedirectedURL&&(this._currentRedirectedURL=n,this._onURLRedirect&&this._onURLRedirect(n))}if(t.status>=200&&t.status<=299){if(this._waitForTotalLength)return;this._status=_.LoaderStatus.kBuffering}else{if(this._status=_.LoaderStatus.kError,!this._onError)throw new m.RuntimeException("RangeLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(_.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}}}},{key:"_onProgress",value:function(e){if(this._status!==_.LoaderStatus.kError){if(null===this._contentLength){var t=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,t=!0;var n=e.total;this._internalAbort(),null!=n&0!==n&&(this._totalLength=n)}if(-1===this._range.to?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,t)return void this._openSubRange();this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}var i=e.loaded-this._lastTimeLoaded;this._lastTimeLoaded=e.loaded,this._speedSampler.addBytes(i)}}},{key:"_normalizeSpeed",value:function(e){var t=this._chunkSizeKBList,n=t.length-1,i=0,r=0,s=n;if(e=t[i]&&e=3&&(t=this._speedSampler.currentKBps),0!==t){var n=this._normalizeSpeed(t);this._currentSpeedNormalized!==n&&(this._currentSpeedNormalized=n,this._currentChunkSizeKB=n)}var i=e.target.response,r=this._range.from+this._receivedLength;this._receivedLength+=i.byteLength;var s=!1;null!=this._contentLength&&this._receivedLength0&&this._receivedLength0&&(this._requestSetTime=!0,this._mediaElement.currentTime=0),this._transmuxer=new p.default(this._mediaDataSource,this._config),this._transmuxer.on(g.default.INIT_SEGMENT,function(t,n){e._msectl.appendInitSegment(n)}),this._transmuxer.on(g.default.MEDIA_SEGMENT,function(t,n){if(e._msectl.appendMediaSegment(n),e._config.lazyLoad&&!e._config.isLive){var i=e._mediaElement.currentTime;n.info.endDts>=1e3*(i+e._config.lazyLoadMaxDuration)&&null==e._progressChecker&&(d.default.v(e.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),e._suspendTransmuxer())}}),this._transmuxer.on(g.default.LOADING_COMPLETE,function(){e._msectl.endOfStream(),e._emitter.emit(_.default.LOADING_COMPLETE)}),this._transmuxer.on(g.default.RECOVERED_EARLY_EOF,function(){e._emitter.emit(_.default.RECOVERED_EARLY_EOF)}),this._transmuxer.on(g.default.IO_ERROR,function(t,n){e._emitter.emit(_.default.ERROR,k.ErrorTypes.NETWORK_ERROR,t,n)}),this._transmuxer.on(g.default.DEMUX_ERROR,function(t,n){e._emitter.emit(_.default.ERROR,k.ErrorTypes.MEDIA_ERROR,t,{code:-1,msg:n})}),this._transmuxer.on(g.default.MEDIA_INFO,function(t){e._mediaInfo=t,e._emitter.emit(_.default.MEDIA_INFO,Object.assign({},t))}),this._transmuxer.on(g.default.METADATA_ARRIVED,function(t){e._emitter.emit(_.default.METADATA_ARRIVED,t)}),this._transmuxer.on(g.default.SCRIPTDATA_ARRIVED,function(t){e._emitter.emit(_.default.SCRIPTDATA_ARRIVED,t)}),this._transmuxer.on(g.default.STATISTICS_INFO,function(t){e._statisticsInfo=e._fillStatisticsInfo(t),e._emitter.emit(_.default.STATISTICS_INFO,Object.assign({},e._statisticsInfo))}),this._transmuxer.on(g.default.RECOMMEND_SEEKPOINT,function(t){e._mediaElement&&!e._config.accurateSeek&&(e._requestSetTime=!0,e._mediaElement.currentTime=t/1e3)}),this._transmuxer.open()}}},{key:"unload",value:function(){this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.seek(0),this._transmuxer&&(this._transmuxer.close(),this._transmuxer.destroy(),this._transmuxer=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_fillStatisticsInfo",value:function(e){if(e.playerType=this._type,!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}},{key:"_onmseUpdateEnd",value:function(){if(this._config.lazyLoad&&!this._config.isLive){for(var e=this._mediaElement.buffered,t=this._mediaElement.currentTime,n=0,i=0;i=t+this._config.lazyLoadMaxDuration&&null==this._progressChecker&&(d.default.v(this.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),this._suspendTransmuxer())}}},{key:"_onmseBufferFull",value:function(){d.default.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),null==this._progressChecker&&this._suspendTransmuxer()}},{key:"_suspendTransmuxer",value:function(){this._transmuxer&&(this._transmuxer.pause(),null==this._progressChecker&&(this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1e3)))}},{key:"_checkProgressAndResume",value:function(){for(var e=this._mediaElement.currentTime,t=this._mediaElement.buffered,n=!1,i=0;i=r&&e=s-this._config.lazyLoadRecoverDuration&&(n=!0);break}}n&&(window.clearInterval(this._progressChecker),this._progressChecker=null,n&&(d.default.v(this.TAG,"Continue loading from paused position"),this._transmuxer.resume()))}},{key:"_isTimepointBuffered",value:function(e){for(var t=this._mediaElement.buffered,n=0;n=i&&e0){var r=this._mediaElement.buffered.start(0);(r<1&&e0&&t.currentTime0){var i=n.start(0);if(i<1&&t0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)}},{key:"unload",value:function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_onvLoadedMetadata",value:function(e){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(d.default.MEDIA_INFO,this.mediaInfo)}},{key:"_reportStatisticsInfo",value:function(){this._emitter.emit(d.default.STATISTICS_INFO,this.statisticsInfo)}},{key:"type",get:function(){return this._type}},{key:"buffered",get:function(){return this._mediaElement.buffered}},{key:"duration",get:function(){return this._mediaElement.duration}},{key:"volume",get:function(){return this._mediaElement.volume},set:function(e){this._mediaElement.volume=e}},{key:"muted",get:function(){return this._mediaElement.muted},set:function(e){this._mediaElement.muted=e}},{key:"currentTime",get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(e){this._mediaElement?this._mediaElement.currentTime=e:this._pendingSeekTime=e}},{key:"mediaInfo",get:function(){var e=this._mediaElement instanceof HTMLAudioElement?"audio/":"video/",t={mimeType:e+this._mediaDataSource.type};return this._mediaElement&&(t.duration=Math.floor(1e3*this._mediaElement.duration),this._mediaElement instanceof HTMLVideoElement&&(t.width=this._mediaElement.videoWidth,t.height=this._mediaElement.videoHeight)),t}},{key:"statisticsInfo",get:function(){var e={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}}]),e}();n.default=c},{"../config.js":5,"../utils/exception.js":40,"./player-events.js":35,events:2}],34:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.ErrorDetails=n.ErrorTypes=void 0;var i=e("../io/loader.js"),r=e("../demux/demux-errors.js"),s=function(e){return e&&e.__esModule?e:{default:e}}(r);n.ErrorTypes={NETWORK_ERROR:"NetworkError",MEDIA_ERROR:"MediaError",OTHER_ERROR:"OtherError"},n.ErrorDetails={NETWORK_EXCEPTION:i.LoaderErrors.EXCEPTION,NETWORK_STATUS_CODE_INVALID:i.LoaderErrors.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:i.LoaderErrors.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:i.LoaderErrors.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:"MediaMSEError",MEDIA_FORMAT_ERROR:s.default.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:s.default.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:s.default.CODEC_UNSUPPORTED}},{"../demux/demux-errors.js":16,"../io/loader.js":24}],35:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={ERROR:"error",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",METADATA_ARRIVED:"metadata_arrived",SCRIPTDATA_ARRIVED:"scriptdata_arrived",STATISTICS_INFO:"statistics_info"};n.default=i},{}],36:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>24&255,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n.set(e,4);for(var a=8,o=0;o>>24&255,t>>>16&255,t>>>8&255,255&t,n>>>24&255,n>>>16&255,n>>>8&255,255&n,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]))}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"tkhd",value:function(t){var n=t.id,i=t.duration,r=t.presentWidth,s=t.presentHeight;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,0,i>>>24&255,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,r>>>8&255,255&r,0,0,s>>>8&255,255&s,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t),e.hdlr(t),e.minf(t))}},{key:"mdhd",value:function(t){var n=t.timescale,i=t.duration;return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}},{key:"hdlr",value:function(t){var n=null;return n="audio"===t.type?e.constants.HDLR_AUDIO:e.constants.HDLR_VIDEO,e.box(e.types.hdlr,n)}},{key:"minf",value:function(t){var n=null;return n="audio"===t.type?e.box(e.types.smhd,e.constants.SMHD):e.box(e.types.vmhd,e.constants.VMHD),e.box(e.types.minf,n,e.dinf(),e.stbl(t))}},{key:"dinf",value:function(){return e.box(e.types.dinf,e.box(e.types.dref,e.constants.DREF))}},{key:"stbl",value:function(t){return e.box(e.types.stbl,e.stsd(t),e.box(e.types.stts,e.constants.STTS),e.box(e.types.stsc,e.constants.STSC),e.box(e.types.stsz,e.constants.STSZ),e.box(e.types.stco,e.constants.STCO))}},{key:"stsd",value:function(t){return"audio"===t.type?"mp3"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp3(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp4a(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.avc1(t))}},{key:"mp3",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types[".mp3"],r)}},{key:"mp4a",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types.mp4a,r,e.esds(t))}},{key:"esds",value:function(t){var n=t.config||[],i=n.length,r=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(n).concat([6,1,2]));return e.box(e.types.esds,r)}},{key:"avc1",value:function(t){var n=t.avcc,i=t.codecWidth,r=t.codecHeight,s=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,i>>>8&255,255&i,r>>>8&255,255&r,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return e.box(e.types.avc1,s,e.box(e.types.avcC,n))}},{key:"mvex",value:function(t){return e.box(e.types.mvex,e.trex(t))}},{key:"trex",value:function(t){var n=t.id,i=new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return e.box(e.types.trex,i)}},{key:"moof",value:function(t,n){return e.box(e.types.moof,e.mfhd(t.sequenceNumber),e.traf(t,n))}},{key:"mfhd",value:function(t){var n=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t]);return e.box(e.types.mfhd,n)}},{key:"traf",value:function(t,n){var i=t.id,r=e.box(e.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),s=e.box(e.types.tfdt,new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n])),a=e.sdtp(t),o=e.trun(t,a.byteLength+16+16+8+16+8+8);return e.box(e.types.traf,r,s,o,a)}},{key:"sdtp",value:function(t){for(var n=t.samples||[],i=n.length,r=new Uint8Array(4+i),s=0;s>>24&255,r>>>16&255,r>>>8&255,255&r,n>>>24&255,n>>>16&255,n>>>8&255,255&n],0);for(var o=0;o>>24&255,u>>>16&255,u>>>8&255,255&u,l>>>24&255,l>>>16&255,l>>>8&255,255&l,d.isLeading<<2|d.dependsOn,d.isDependedOn<<6|d.hasRedundancy<<4|d.isNonSync,0,0,h>>>24&255,h>>>16&255,h>>>8&255,255&h],12+16*o)}return e.box(e.types.trun,a)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();s.init(),n.default=s},{}],38:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n1&&(y=i.pop(),g-=y.length),null!=this._audioStashedLastSample){var E=this._audioStashedLastSample;this._audioStashedLastSample=null,i.unshift(E),g+=E.length}null!=y&&(this._audioStashedLastSample=y);var b=i[0].dts-this._dtsBase;if(this._audioNextDts)r=b-this._audioNextDts;else if(this._audioSegmentInfoList.isEmpty())r=0,this._fillSilentAfterSeek&&!this._videoSegmentInfoList.isEmpty()&&"mp3"!==this._audioMeta.originalCodec&&(m=!0);else{var S=this._audioSegmentInfoList.getLastSampleBefore(b);if(null!=S){var k=b-(S.originalDts+S.duration);k<=3&&(k=0);var L=S.dts+S.duration+k;r=b-L}else r=0}if(m){var R=b-r,A=this._videoSegmentInfoList.getLastSegmentBefore(b);if(null!=A&&A.beginDts=1?C[C.length-1].duration:Math.floor(u);var U=!1,N=null;if(j>1.5*u&&"mp3"!==this._audioMeta.codec&&this._fillAudioTimestampGap&&!c.default.safari){U=!0;var F=Math.abs(j-u),G=Math.ceil(F/u),V=B+u;o.default.w(this.TAG,"Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\ndts: "+(B+j)+" ms, expected: "+(B+Math.round(u))+" ms, delta: "+Math.round(F)+" ms, generate: "+G+" frames");var z=h.default.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);null==z&&(o.default.w(this.TAG,"Unable to generate silent frame for "+this._audioMeta.originalCodec+" with "+this._audioMeta.channelCount+" channels, repeat last frame"),z=x),N=[];for(var H=0;H0){var q=N[N.length-1];q.duration=K-q.dts}var W={dts:K,pts:K,cts:0,unit:z,size:z.byteLength,duration:0,originalDts:M,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};N.push(W),g+=W.size,V+=u}var X=N[N.length-1];X.duration=B+j-X.dts,j=Math.round(u)}C.push({dts:B,pts:B,cts:0,unit:D.unit,size:D.unit.byteLength,duration:j,originalDts:M,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),U&&C.push.apply(C,N)}d?v=new Uint8Array(g):(v=new Uint8Array(g),v[0]=g>>>24&255,v[1]=g>>>16&255,v[2]=g>>>8&255,v[3]=255&g,v.set(l.default.types.mdat,4));for(var Y=0;Y1&&(c=i.pop(),f-=c.length),null!=this._videoStashedLastSample){var m=this._videoStashedLastSample;this._videoStashedLastSample=null,i.unshift(m),f+=m.length}null!=c&&(this._videoStashedLastSample=c);var p=i[0].dts-this._dtsBase;if(this._videoNextDts)r=p-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())r=0;else{var v=this._videoSegmentInfoList.getLastSampleBefore(p);if(null!=v){var g=p-(v.originalDts+v.duration);g<=3&&(g=0);var y=v.dts+v.duration+g;r=p-y}else r=0}for(var E=new _.MediaSegmentInfo,b=[],S=0;S=1?b[b.length-1].duration:Math.floor(this._videoMeta.refSampleDuration);if(R){var I=new _.SampleInfo(A,T,O,k.dts,!0);I.fileposition=k.fileposition,E.appendSyncPoint(I)}b.push({dts:A,pts:T,cts:w,units:k.units,size:k.length,isKeyframe:R,duration:O,originalDts:L,flags:{isLeading:0,dependsOn:R?2:1,isDependedOn:R?1:0,hasRedundancy:0,isNonSync:R?0:1}})}h=new Uint8Array(f),h[0]=f>>>24&255,h[1]=f>>>16&255,h[2]=f>>>8&255,h[3]=255&f,h.set(l.default.types.mdat,4);for(var D=0;D=0&&/(rv)(?::| )([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(e)||[],n=/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(android)/.exec(e)||/(windows)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||[],r={browser:t[5]||t[3]||t[1]||"",version:t[2]||t[4]||"0",majorVersion:t[4]||t[2]||"0",platform:n[0]||""},s={};if(r.browser){s[r.browser]=!0;var a=r.majorVersion.split(".");s.version={major:parseInt(r.majorVersion,10),string:r.version},a.length>1&&(s.version.minor=parseInt(a[1],10)),a.length>2&&(s.version.build=parseInt(a[2],10))}r.platform&&(s[r.platform]=!0),(s.chrome||s.opr||s.safari)&&(s.webkit=!0),(s.rv||s.iemobile)&&(s.rv&&delete s.rv,r.browser="msie",s.msie=!0),s.edge&&(delete s.edge,r.browser="msedge",s.msedge=!0),s.opr&&(r.browser="opera",s.opera=!0),s.safari&&s.android&&(r.browser="android",s.android=!0),s.name=r.browser,s.platform=r.platform;for(var o in i)i.hasOwnProperty(o)&&delete i[o];Object.assign(i,s)}(),n.default=i},{}],40:[function(e,t,n){"use strict";function i(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 r(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)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","error",i),e.ENABLE_ERROR&&(console.error?console.error(i):console.warn?console.warn(i):console.log(i))}},{key:"i",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","info",i),e.ENABLE_INFO&&(console.info?console.info(i):console.log(i))}},{key:"w",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","warn",i),e.ENABLE_WARN&&(console.warn?console.warn(i):console.log(i))}},{key:"d",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","debug",i),e.ENABLE_DEBUG&&(console.debug?console.debug(i):console.log(i))}},{key:"v",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","verbose",i),e.ENABLE_VERBOSE&&console.log(i)}}]),e}();o.GLOBAL_TAG="flv.js",o.FORCE_GLOBAL_TAG=!1,o.ENABLE_ERROR=!0,o.ENABLE_INFO=!0,o.ENABLE_WARN=!0,o.ENABLE_DEBUG=!0,o.ENABLE_VERBOSE=!0,o.ENABLE_CALLBACK=!1,o.emitter=new a.default,n.default=o},{events:2}],42:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0){var n=e.getConfig();t.emit("change",n)}}},{key:"registerListener",value:function(t){e.emitter.addListener("change",t)}},{key:"removeListener",value:function(t){e.emitter.removeListener("change",t)}},{key:"addLogListener",value:function(t){l.default.emitter.addListener("log",t),l.default.emitter.listenerCount("log")>0&&(l.default.ENABLE_CALLBACK=!0,e._notifyChange())}},{key:"removeLogListener",value:function(t){l.default.emitter.removeListener("log",t),0===l.default.emitter.listenerCount("log")&&(l.default.ENABLE_CALLBACK=!1,e._notifyChange())}},{key:"forceGlobalTag",get:function(){return l.default.FORCE_GLOBAL_TAG},set:function(t){l.default.FORCE_GLOBAL_TAG=t,e._notifyChange()}},{key:"globalTag",get:function(){return l.default.GLOBAL_TAG},set:function(t){l.default.GLOBAL_TAG=t,e._notifyChange()}},{key:"enableAll",get:function(){return l.default.ENABLE_VERBOSE&&l.default.ENABLE_DEBUG&&l.default.ENABLE_INFO&&l.default.ENABLE_WARN&&l.default.ENABLE_ERROR},set:function(t){l.default.ENABLE_VERBOSE=t,l.default.ENABLE_DEBUG=t,l.default.ENABLE_INFO=t,l.default.ENABLE_WARN=t,l.default.ENABLE_ERROR=t,e._notifyChange()}},{key:"enableDebug",get:function(){return l.default.ENABLE_DEBUG},set:function(t){l.default.ENABLE_DEBUG=t,e._notifyChange()}},{key:"enableVerbose",get:function(){return l.default.ENABLE_VERBOSE},set:function(t){l.default.ENABLE_VERBOSE=t,e._notifyChange()}},{key:"enableInfo",get:function(){return l.default.ENABLE_INFO},set:function(t){l.default.ENABLE_INFO=t,e._notifyChange()}},{key:"enableWarn",get:function(){return l.default.ENABLE_WARN},set:function(t){l.default.ENABLE_WARN=t,e._notifyChange()}},{key:"enableError",get:function(){return l.default.ENABLE_ERROR},set:function(t){l.default.ENABLE_ERROR=t,e._notifyChange()}}]),e}();d.emitter=new o.default,n.default=d},{"./logger.js":41,events:2}],43:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=128){t.push(String.fromCharCode(65535&a)),r+=2;continue}}}else if(n[r]<240){if(i(n,r,2)){var o=(15&n[r])<<12|(63&n[r+1])<<6|63&n[r+2];if(o>=2048&&55296!=(63488&o)){t.push(String.fromCharCode(65535&o)),r+=3;continue}}}else if(n[r]<248&&i(n,r,3)){var u=(7&n[r])<<18|(63&n[r+1])<<12|(63&n[r+2])<<6|63&n[r+3];if(u>65536&&u<1114112){u-=65536,t.push(String.fromCharCode(u>>>10|55296)),t.push(String.fromCharCode(1023&u|56320)),r+=4;continue}}t.push(String.fromCharCode(65533)),++r}return t.join("")}Object.defineProperty(n,"__esModule",{value:!0}),n.default=r},{}]},{},[21])(21)}); +//# sourceMappingURL=flv.min.js.map diff --git a/upload/static/js/player/flv.min.js.map b/upload/static/js/player/flv.min.js.map new file mode 100644 index 0000000000000000000000000000000000000000..047b6697ec8dd4f7629adfb7495ddb7c3336780f --- /dev/null +++ b/upload/static/js/player/flv.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","node_modules/es6-promise/dist/es6-promise.js","node_modules/events/events.js","node_modules/process/browser.js","node_modules/webworkify/index.js","src/config.js","src/core/features.js","src/core/media-info.js","src/core/media-segment-info.js","src/core/mse-controller.js","src/core/mse-events.js","src/core/transmuxer.js","src/core/transmuxing-controller.js","src/core/transmuxing-events.js","src/core/transmuxing-worker.js","src/demux/amf-parser.js","src/demux/demux-errors.js","src/demux/exp-golomb.js","src/demux/flv-demuxer.js","src/demux/sps-parser.js","src/flv.js","src/index.js","src/io/fetch-stream-loader.js","src/io/io-controller.js","src/io/loader.js","src/io/param-seek-handler.js","src/io/range-seek-handler.js","src/io/speed-sampler.js","src/io/websocket-loader.js","src/io/xhr-moz-chunked-loader.js","src/io/xhr-msstream-loader.js","src/io/xhr-range-loader.js","src/player/flv-player.js","src/player/native-player.js","src/player/player-errors.js","src/player/player-events.js","src/remux/aac-silent.js","src/remux/mp4-generator.js","src/remux/mp4-remuxer.js","src/utils/browser.js","src/utils/exception.js","src/utils/logger.js","src/utils/logging-control.js","src/utils/polyfill.js","src/utils/utf8-conv.js"],"names":["f","exports","module","define","amd","g","window","global","self","this","flvjs","e","t","n","r","s","o","u","a","require","i","Error","code","l","call","length","1","_dereq_","factory","ES6Promise","objectOrFunction","x","type","isFunction","setScheduler","scheduleFn","customSchedulerFn","setAsap","asapFn","asap","useVertxTimer","vertxNext","flush","useSetTimeout","globalSetTimeout","setTimeout","len","callback","queue","undefined","then","onFulfillment","onRejection","parent","child","constructor","noop","PROMISE_ID","makePromise","_state","arguments","invokeCallback","_result","subscribe","resolve$1","object","Constructor","promise","resolve","selfFulfillment","TypeError","cannotReturnOwn","getThen","error","TRY_CATCH_ERROR","tryThen","then$$1","value","fulfillmentHandler","rejectionHandler","handleForeignThenable","thenable","sealed","fulfill","reason","reject","_label","handleOwnThenable","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","publishRejection","_onerror","publish","PENDING","_subscribers","subscribers","settled","detail","tryCatch","hasCallback","succeeded","failed","initializePromise","resolver","nextId","id","validationError","all","entries","Enumerator","race","isArray","_","reject$1","needsResolver","needsNew","polyfill","local","Function","P","Promise","promiseToString","Object","prototype","toString","cast","Promise$1","_isArray","Array","arg","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","nextTick","iterations","observer","node","document","createTextNode","observe","characterData","data","channel","port1","onmessage","port2","postMessage","vertx","runOnLoop","runOnContext","Math","random","substring","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","entry","c","resolve$$1","_then","_settledAt","_willSettleAt","state","enumerator","catch","finally","_setScheduler","_setAsap","_asap","EventEmitter","_events","_maxListeners","isNumber","isObject","isUndefined","defaultMaxListeners","setMaxListeners","isNaN","emit","er","handler","args","listeners","err","context","slice","apply","addListener","listener","m","newListener","push","warned","console","trace","on","once","removeListener","fired","list","position","splice","removeAllListeners","key","listenerCount","evlistener","emitter","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","concat","queueIndex","drainQueue","timeout","run","Item","array","title","browser","env","argv","version","versions","off","prependListener","prependOnceListener","name","binding","cwd","chdir","dir","umask","bundleFn","sources","cache","stringify","JSON","fn","options","resolveSources","workerSources","depPath","depKey","wkey","cacheKeys","keys","exp","default","floor","pow","wcache","skey","scache","src","map","join","URL","webkitURL","mozURL","msURL","blob","Blob","bare","workerUrl","createObjectURL","worker","Worker","objectURL","createDefaultConfig","assign","defaultConfig","enableWorker","enableStashBuffer","stashInitialSize","isLive","lazyLoad","lazyLoadMaxDuration","lazyLoadRecoverDuration","deferLoadAfterSourceOpen","autoCleanupMaxBackwardDuration","autoCleanupMinBackwardDuration","statisticsInfoReportInterval","fixAudioTimestampGap","accurateSeek","seekType","seekParamStart","seekParamEnd","rangeLoadZeroStart","customSeekHandler","reuseRedirectedURL","headers","customLoader","_ioController","_config","Features","MediaSource","isTypeSupported","ioctl","_ioController2","loaderType","destroy","mimeType","videoElement","createElement","canPlay","canPlayType","features","mseFlvPlayback","mseLiveFlvPlayback","networkStreamIO","networkLoaderName","nativeMP4H264Playback","nativeWebmVP8Playback","nativeWebmVP9Playback","supportMSEH264Playback","supportNetworkStreamIO","getNetworkLoaderTypeName","supportNativeMediaPlayback","MediaInfo","_classCallCheck","duration","hasAudio","hasVideo","audioCodec","videoCodec","audioDataRate","videoDataRate","audioSampleRate","audioChannelCount","width","height","fps","profile","level","refFrames","chromaFormat","sarNum","sarDen","metadata","segments","segmentCount","hasKeyframesIndex","keyframesIndex","audioInfoComplete","videoInfoComplete","milliseconds","table","keyframeIdx","_search","times","index","fileposition","filepositions","idx","last","mid","lbound","ubound","SampleInfo","dts","pts","originalDts","isSync","isSyncPoint","MediaSegmentInfo","beginDts","endDts","beginPts","endPts","originalBeginDts","originalEndDts","syncPoints","firstSample","lastSample","sampleInfo","IDRSampleList","_list","clear","MediaSegmentInfoList","_type","_lastAppendLocation","_searchNearestSegmentBefore","mediaSegmentInfo","msi","lastAppendIdx","insertIdx","segment","getLastSegmentBefore","segmentIdx","_logger","_browser","_mseEvents","_mediaSegmentInfo","_exception","MSEController","config","TAG","_emitter","_events2","autoCleanupSourceBuffer","onSourceOpen","_onSourceOpen","bind","onSourceEnded","_onSourceEnded","onSourceClose","_onSourceClose","onSourceBufferError","_onSourceBufferError","onSourceBufferUpdateEnd","_onSourceBufferUpdateEnd","_mediaSource","_mediaSourceObjectURL","_mediaElement","_isBufferFull","_hasPendingEos","_requireSetMediaDuration","_pendingMediaDuration","_pendingSourceBufferInit","_mimeTypes","video","audio","_sourceBuffers","_lastInitSegments","_pendingSegments","_pendingRemoveRanges","_idrList","detachMediaElement","event","mediaElement","IllegalStateException","ms","addEventListener","ps","sb","readyState","removeSourceBuffer","_logger2","message","removeEventListener","endOfStream","removeAttribute","revokeObjectURL","initSegment","deferred","is","container","codec","firstInitSegment","v","addSourceBuffer","_mseEvents2","ERROR","msg","updating","_doAppendSegments","_browser2","safari","mediaDuration","_updateMediaSourceDuration","mediaSegment","_needCleanupSourceBuffer","_doCleanupSourceBuffer","_hasPendingRemoveRanges","seconds","abort","buffered","start","end","_doRemoveRanges","lastInitSegment","_hasPendingSegments","getLastSyncPointBeforeDts","currentTime","doRemove","removeEnd","current","target","ranges","range","shift","remove","pendingSegments","timestampOffset","currentOffset","targetOffset","delta","abs","byteLength","appendBuffer","hasOwnProperty","appendArray","info","unshift","BUFFER_FULL","pendings","appendInitSegment","SOURCE_OPEN","prr","UPDATE_END","MSEEvents","_loggingControl","_transmuxingController","_transmuxingEvents","_transmuxingWorker","_mediaInfo","Transmuxer","mediaDataSource","work","_worker","_transmuxingWorker2","_workerDestroying","_onWorkerMessage","cmd","param","onLoggingConfigChanged","_onLoggingConfigChanged","_loggingControl2","registerListener","getConfig","_controller","_transmuxingController2","ctl","_transmuxingEvents2","IO_ERROR","_onIOError","DEMUX_ERROR","_onDemuxError","INIT_SEGMENT","_onInitSegment","MEDIA_SEGMENT","_onMediaSegment","LOADING_COMPLETE","_onLoadingComplete","RECOVERED_EARLY_EOF","_onRecoveredEarlyEof","MEDIA_INFO","_onMediaInfo","METADATA_ARRIVED","_onMetaDataArrived","SCRIPTDATA_ARRIVED","_onScriptDataArrived","STATISTICS_INFO","_onStatisticsInfo","RECOMMEND_SEEKPOINT","_onRecommendSeekpoint","stop","seek","pause","resume","_this","_this2","_this3","_this4","mediaInfo","_this5","_this6","_this7","statisticsInfo","_this8","_this9","_this10","_this11","terminate","setPrototypeOf","_mediaInfo2","logcat","_flvDemuxer","_mp4Remuxer","_demuxErrors","TransmuxingController","filesize","url","cors","withCredentials","_mediaDataSource","_currentSegmentIndex","totalDuration","forEach","timestampBase","referrerPolicy","_demuxer","_remuxer","_ioctl","_pendingSeekTime","_pendingResolveSeekPoint","_statisticsReporter","_disableStatisticsReporter","_loadSegment","_enableStatisticsReporter","segmentIndex","optionalFrom","dataSource","onError","_onIOException","onSeeked","_onIOSeeked","onComplete","_onIOComplete","onRedirect","_onIORedirect","onRecoveredEarlyEof","_onIORecoveredEarlyEof","bindDataSource","onDataArrival","_onInitChunkArrival","open","_internalAbort","isWorking","isPaused","isSeekable","targetSegmentIndex","_searchSegmentIndexContains","segmentInfo","keyframe","getNearestKeyframe","targetSegmentInfo","insertDiscontinuity","_keyframe","resetMediaInfo","_reportSegmentMediaInfo","byteStart","probeData","consumed","parseChunks","_flvDemuxer2","probe","match","_mp4Remuxer2","mds","overridedDuration","overridedHasAudio","overridedHasVideo","_onDemuxException","onMediaInfo","onMetaDataArrived","onScriptDataArrived","onInitSegment","_onRemuxerInitSegmentArrival","onMediaSegment","_onRemuxerMediaSegmentArrival","_demuxErrors2","FORMAT_UNSUPPORTED","extraData","nextSegmentIndex","flushStashedSamples","redirectedURL","seekpoint","setInterval","_reportStatisticsInfo","clearInterval","exportInfo","currentURL","hasRedirect","currentRedirectedURL","speed","currentSpeed","currentSegmentIndex","totalSegmentCount","TransmuxingEvents","_polyfill","TransmuxingWorker","obj","onLoadingComplete","onStatisticsInfo","statInfo","onIOError","onDemuxError","onRecommendSeekpoint","onLogcatCallback","str","controller","logcatListener","_polyfill2","install","applyConfig","enableCallback","addLogListener","removeLogListener","_utf8Conv","le","buf","ArrayBuffer","DataView","setInt16","Int16Array","AMF","arrayBuffer","dataOffset","dataSize","parseValue","size","parseString","isObjectEnd","objectEnd","parseObject","getUint16","_utf8Conv2","Uint8Array","getUint32","timestamp","getFloat64","getInt16","Date","offset","getUint8","amfstr","terminal","amfobj","_terminal","amfvar","parseVariable","strictArrayLength","val","date","parseDate","amfLongStr","w","DemuxErrors","OK","FORMAT_ERROR","CODEC_UNSUPPORTED","ExpGolomb","uint8array","_buffer","_buffer_index","_total_bytes","_total_bits","_current_word","_current_word_bits_left","buffer_bytes_left","bytes_read","min","word","set","subarray","buffer","bits","InvalidArgumentException","result","bits_need_left","_fillCurrentWord","bits_read_next","result2","readBits","zero_count","_skipLeadingZero","leading_zeros","readUEG","ReadBig32","_amfParser","_spsParser","FLVDemuxer","_onError","_onTrackMetadata","_onDataAvailable","_dataOffset","_firstParse","_dispatch","_hasAudio","hasAudioTrack","_hasVideo","hasVideoTrack","_hasAudioFlagOverrided","_hasVideoFlagOverrided","_audioInitialMetadataDispatched","_videoInitialMetadataDispatched","_metadata","_audioMetadata","_videoMetadata","_naluLengthSize","_timestampBase","_timescale","_duration","_durationOverrided","_referenceFrameRate","fixed","fps_num","fps_den","_flvSoundRateTable","_mpegSamplingRates","_mpegAudioV10SampleRateTable","_mpegAudioV20SampleRateTable","_mpegAudioV25SampleRateTable","_mpegAudioL1BitRateTable","_mpegAudioL2BitRateTable","_mpegAudioL3BitRateTable","_videoTrack","sequenceNumber","samples","_audioTrack","_littleEndian","loader","chunk","_v","tagType","ts2","ts1","ts0","ts3","_parseAudioData","_parseVideoData","_parseScriptData","prevTagSize","_isInitialMetadataDispatched","scriptData","_amfParser2","parseScriptData","onMetaData","_typeof","audiodatarate","videodatarate","framerate","keyframes","_parseKeyframesIndex","isComplete","time","tagTimestamp","soundSpec","soundFormat","soundRate","soundRateIndex","soundType","meta","track","timescale","channelCount","aacData","_parseAACAudioData","packetType","misc","samplingRate","originalCodec","refSampleDuration","mi","aacSample","unit","_misc","_parseMP3AudioData","_mi","bitRate","_dts","mp3Sample","_parseAACAudioSpecificConfig","audioObjectType","originalAudioObjectType","samplingIndex","extensionSamplingIndex","samplingFrequence","channelConfig","userAgent","navigator","toLowerCase","indexOf","requestHeader","ver","layer","bitrate_index","sampling_freq_index","channel_mode","channel_count","sample_rate","bit_rate","tagPosition","spec","frameType","codecId","_parseAVCVideoPacket","cts_unsigned","cts","_parseAVCDecoderConfigurationRecord","_parseAVCVideoData","avcc","avcProfile","spsCount","sps","_spsParser2","parseSPS","codecWidth","codec_size","codecHeight","presentWidth","present_size","presentHeight","profile_string","level_string","bitDepth","bit_depth","chroma_format","sarRatio","sar_ratio","frameRate","frame_rate","codecArray","codecString","j","h","ref_frames","chroma_format_string","ppsCount","_i","_len","units","lengthSize","naluSize","unitType","avcSample","isKeyframe","base","mismatch","_expGolomb","SPSParser","src_length","dst","dst_idx","rbsp","_ebsp2rbsp","gb","_expGolomb2","readByte","profile_idc","level_idc","getProfileString","getLevelString","chroma_format_idc","chroma_format_table","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","sar_width","sar_height","fps_fixed","aspect_ratio_idc","sar_w_table","sar_h_table","num_units_in_tick","time_scale","sarScale","crop_unit_x","crop_unit_y","sub_wc","sub_hc","codec_width","codec_height","present_width","ceil","getChromaFormatString","count","last_scale","next_scale","delta_scale","toFixed","chroma","createPlayer","optionalConfig","_flvPlayer2","_nativePlayer2","isSupported","_features2","getFeatureList","_features","_loader","_flvPlayer","_nativePlayer","_playerEvents","_playerErrors","BaseLoader","LoaderStatus","LoaderErrors","Events","_playerEvents2","ErrorTypes","ErrorDetails","FlvPlayer","NativePlayer","LoggingControl","defineProperty","enumerable","get","FetchStreamLoader","seekHandler","_possibleConstructorReturn","__proto__","getPrototypeOf","_seekHandler","_needStash","_requestAbort","_contentLength","_receivedLength","isWorkWellEdge","msedge","minor","browserNotBlacklisted","fetch","ReadableStream","_get","_dataSource","_range","sourceURL","seekConfig","Headers","configHeaders","append","params","method","mode","_key","credentials","_status","kConnecting","res","kIdle","ok","status","_onURLRedirect","removeURLParameters","lengthHeader","parseInt","_onContentLengthKnown","_pump","body","getReader","kError","RuntimeException","statusText","HTTP_STATUS_CODE_INVALID","EXCEPTION","reader","read","done","EARLY_EOF","kComplete","_onComplete","from","cancel","kBuffering","_onDataArrival","_speedSampler","_fetchStreamLoader","_xhrMozChunkedLoader","_xhrMsstreamLoader","_xhrRangeLoader","_websocketLoader","_rangeSeekHandler","_paramSeekHandler","IOController","_extraData","_stashInitialSize","_stashUsed","_stashSize","_bufferSize","_stashBuffer","_stashByteStart","_enableStash","_loaderClass","_isWebSocketURL","test","_refTotalLength","_totalLength","_fullRequestFlag","_currentRange","_redirectedURL","_speedNormalized","_speedSampler2","_speedNormalizeList","_isEarlyEofReconnecting","_paused","_resumeFrom","_onSeeked","_onRedirect","_selectSeekHandler","_selectLoader","_createLoader","_rangeSeekHandler2","paramStart","paramEnd","_paramSeekHandler2","_websocketLoader2","_fetchStreamLoader2","_xhrMozChunkedLoader2","_xhrRangeLoader2","needStashBuffer","onContentLengthKnown","onURLRedirect","_onLoaderChunkArrival","_onLoaderComplete","_onLoaderError","to","reset","bytes","_internalSeek","dropUnconsumed","_flushStashBuffer","requestRange","expectedBytes","bufferNewSize","newBuffer","stashOldArray","normalized","stashSizeKB","bufferSize","_expandBuffer","chunks","contentLength","receivedLength","addBytes","KBps","lastSecondKBps","_normalizeSpeed","_adjustStashSize","_stashArray2","_stashArray3","_consumed2","_dispatchChunks","_remainArray","_consumed3","_remain","remain","stashArray","_stashArray","_consumed","remainArray","UNRECOVERABLE_EARLY_EOF","nextFrom","CONNECTING_TIMEOUT","typeName","NotImplementedException","ParamSeekHandler","_startName","_endName","baseUrl","needAnd","seekedURL","baseURL","split","queryIndex","resultParams","pairs","pair","requireAnd","RangeSeekHandler","zeroStart","_zeroStart","SpeedSampler","_firstCheckpoint","_lastCheckpoint","_intervalBytes","_totalBytes","_lastSecondBytes","performance","now","_now","durationSeconds","currentKBps","WebSocketLoader","_ws","WebSocket","ws","binaryType","onopen","_onWebSocketOpen","onclose","_onWebSocketClose","_onWebSocketMessage","onerror","_onWebSocketError","close","_dispatchArrayBuffer","FileReader","onload","readAsArrayBuffer","arraybuffer","MozChunkedLoader","_xhr","xhr","XMLHttpRequest","responseType","onreadystatechange","onprogress","onloadend","_requestURL","_onReadyStateChange","_onProgress","_onLoadEnd","_onXhrError","setRequestHeader","_headers","send","responseURL","total","response","loaded","MSStreamLoader","_reader","_totalRange","_currentRequestURL","_currentRedirectedURL","_bufferLimit","_lastTimeBufferSize","_isReconnecting","MSStream","MSStreamReader","_internalOpen","isSubrange","_msrOnProgress","_msrOnLoad","_msrOnError","_xhrOnReadyStateChange","_xhrOnError","getResponseHeader","msstream","bigbuffer","_doReconnectIfNeeded","RangeLoader","_chunkSizeKBList","_currentChunkSizeKB","_currentSpeedNormalized","_zeroSpeedChunkCount","_waitForTotalLength","_totalLengthReceived","_currentRequestRange","_lastTimeLoaded","useRefTotalLength","_openSubRange","chunkSize","_onLoad","openNextRange","reportComplete","_transmuxer","_mseController","onvLoadedMetadata","_onvLoadedMetadata","onvSeeking","_onvSeeking","onvCanPlay","_onvCanPlay","onvStalled","_onvStalled","onvProgress","_onvProgress","_requestSetTime","_seekpointRecord","_progressChecker","_msectl","_mseSourceOpened","_hasPendingLoad","_receivedCanPlay","_statisticsInfo","chromeNeedIDRFix","chrome","major","build","_alwaysSeekKeyframe","msie","unload","_mseController2","_onmseUpdateEnd","_onmseBufferFull","load","MEDIA_ERROR","MEDIA_MSE_ERROR","attachMediaElement","_transmuxer2","appendMediaSegment","_suspendTransmuxer","NETWORK_ERROR","_fillStatisticsInfo","play","playerType","HTMLVideoElement","hasQualityInfo","decoded","dropped","getVideoPlaybackQuality","quality","totalVideoFrames","droppedVideoFrames","webkitDecodedFrameCount","webkitDroppedFrameCount","decodedFrames","droppedFrames","currentRangeEnd","_checkProgressAndResume","needResume","directSeek","_isTimepointBuffered","directSeekBegin","directSeekBeginTime","videoBeginTime","idr","recordTime","_checkAndApplyUnbufferedSeekpoint","stalled","media","seekPoint","_checkAndResumeStuckPlayback","volume","muted","preload","mediaPrefix","HTMLAudioElement","videoWidth","videoHeight","OTHER_ERROR","NETWORK_EXCEPTION","NETWORK_STATUS_CODE_INVALID","NETWORK_TIMEOUT","NETWORK_UNRECOVERABLE_EARLY_EOF","MEDIA_FORMAT_ERROR","MEDIA_FORMAT_UNSUPPORTED","MEDIA_CODEC_UNSUPPORTED","PlayerEvents","AAC","MP4","types","avc1","avcC","btrt","dinf","dref","esds","ftyp","hdlr","mdat","mdhd","mdia","mfhd","minf","moof","moov","mp4a","mvex","mvhd","sdtp","stbl","stco","stsc","stsd","stsz","stts","tfdt","tfhd","traf","trak","trun","trex","tkhd","vmhd","smhd",".mp3","charCodeAt","constants","FTYP","STSD_PREFIX","STTS","STSC","STCO","STSZ","HDLR_VIDEO","HDLR_AUDIO","DREF","SMHD","VMHD","datas","arrayCount","box","trackId","xmhd","mp3","sampleRate","configSize","baseMediaDecodeTime","sampleCount","flags","isLeading","dependsOn","isDependedOn","hasRedundancy","isNonSync","init","_mp4Generator","_aacSilent","MP4Remuxer","_isLive","_dtsBase","_dtsBaseInited","_audioDtsBase","Infinity","_videoDtsBase","_audioNextDts","_videoNextDts","_audioStashedLastSample","_videoStashedLastSample","_audioMeta","_videoMeta","_audioSegmentInfoList","_videoSegmentInfoList","_forceFirstIDR","_fillSilentAfterSeek","_mp3UseMpegAudio","firefox","_fillAudioTimestampGap","producer","onDataAvailable","remux","onTrackMetadata","_onTrackMetadataReceived","audioTrack","videoTrack","_calculateDtsBase","_remuxVideo","_remuxAudio","metabox","_mp4Generator2","generateInitSegment","videoSample","audioSample","force","dtsCorrection","firstDts","lastDts","mpegRawTrack","firstSegmentAfterSeek","insertPrefixSilentFrame","mdatbox","mdatBytes","pop","sample","firstSampleOriginalDts","isEmpty","_lastSample","getLastSampleBefore","distance","expectedDts","firstSampleDts","videoSegment","silentUnit","_aacSilent2","getSilentFrame","silentFrameDuration","mp4Samples","_sample","sampleDuration","_nextDts","needFillSilentFrames","silentFrames","frameCount","currentDts","round","_silentUnit","intDts","previousFrame","frame","lastFrame","_unit","latest","moofbox","_mergeBoxes","firstPts","lastPts","_lastSample2","_sample2","_nextDts2","syncPoint","appendSyncPoint","_i2","Browser","ua","exec","platform_match","matched","majorVersion","platform","versionArray","string","opr","webkit","rv","iemobile","edge","android","_message","Log","tag","FORCE_GLOBAL_TAG","GLOBAL_TAG","ENABLE_CALLBACK","ENABLE_ERROR","warn","log","ENABLE_INFO","ENABLE_WARN","ENABLE_DEBUG","debug","ENABLE_VERBOSE","globalTag","forceGlobalTag","enableVerbose","enableDebug","enableInfo","enableWarn","enableError","_notifyChange","enable","Polyfill","proto","output","source","checkContinuation","checkLength","decodeUTF8","out","String","fromCharCode","ucs4","_ucs","_ucs2"],"mappings":"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","file":"flv.min.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nfunction EventEmitter() {\n this._events = this._events || {};\n this._maxListeners = this._maxListeners || undefined;\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function(n) {\n if (!isNumber(n) || n < 0 || isNaN(n))\n throw TypeError('n must be a positive number');\n this._maxListeners = n;\n return this;\n};\n\nEventEmitter.prototype.emit = function(type) {\n var er, handler, len, args, i, listeners;\n\n if (!this._events)\n this._events = {};\n\n // If there is no 'error' event listener then throw.\n if (type === 'error') {\n if (!this._events.error ||\n (isObject(this._events.error) && !this._events.error.length)) {\n er = arguments[1];\n if (er instanceof Error) {\n throw er; // Unhandled 'error' event\n } else {\n // At least give some kind of context to the user\n var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n err.context = er;\n throw err;\n }\n }\n }\n\n handler = this._events[type];\n\n if (isUndefined(handler))\n return false;\n\n if (isFunction(handler)) {\n switch (arguments.length) {\n // fast cases\n case 1:\n handler.call(this);\n break;\n case 2:\n handler.call(this, arguments[1]);\n break;\n case 3:\n handler.call(this, arguments[1], arguments[2]);\n break;\n // slower\n default:\n args = Array.prototype.slice.call(arguments, 1);\n handler.apply(this, args);\n }\n } else if (isObject(handler)) {\n args = Array.prototype.slice.call(arguments, 1);\n listeners = handler.slice();\n len = listeners.length;\n for (i = 0; i < len; i++)\n listeners[i].apply(this, args);\n }\n\n return true;\n};\n\nEventEmitter.prototype.addListener = function(type, listener) {\n var m;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events)\n this._events = {};\n\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (this._events.newListener)\n this.emit('newListener', type,\n isFunction(listener.listener) ?\n listener.listener : listener);\n\n if (!this._events[type])\n // Optimize the case of one listener. Don't need the extra array object.\n this._events[type] = listener;\n else if (isObject(this._events[type]))\n // If we've already got an array, just append.\n this._events[type].push(listener);\n else\n // Adding the second element, need to change to array.\n this._events[type] = [this._events[type], listener];\n\n // Check for listener leak\n if (isObject(this._events[type]) && !this._events[type].warned) {\n if (!isUndefined(this._maxListeners)) {\n m = this._maxListeners;\n } else {\n m = EventEmitter.defaultMaxListeners;\n }\n\n if (m && m > 0 && this._events[type].length > m) {\n this._events[type].warned = true;\n console.error('(node) warning: possible EventEmitter memory ' +\n 'leak detected. %d listeners added. ' +\n 'Use emitter.setMaxListeners() to increase limit.',\n this._events[type].length);\n if (typeof console.trace === 'function') {\n // not supported in IE 10\n console.trace();\n }\n }\n }\n\n return this;\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.once = function(type, listener) {\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n var fired = false;\n\n function g() {\n this.removeListener(type, g);\n\n if (!fired) {\n fired = true;\n listener.apply(this, arguments);\n }\n }\n\n g.listener = listener;\n this.on(type, g);\n\n return this;\n};\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener = function(type, listener) {\n var list, position, length, i;\n\n if (!isFunction(listener))\n throw TypeError('listener must be a function');\n\n if (!this._events || !this._events[type])\n return this;\n\n list = this._events[type];\n length = list.length;\n position = -1;\n\n if (list === listener ||\n (isFunction(list.listener) && list.listener === listener)) {\n delete this._events[type];\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n\n } else if (isObject(list)) {\n for (i = length; i-- > 0;) {\n if (list[i] === listener ||\n (list[i].listener && list[i].listener === listener)) {\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (list.length === 1) {\n list.length = 0;\n delete this._events[type];\n } else {\n list.splice(position, 1);\n }\n\n if (this._events.removeListener)\n this.emit('removeListener', type, listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.removeAllListeners = function(type) {\n var key, listeners;\n\n if (!this._events)\n return this;\n\n // not listening for removeListener, no need to emit\n if (!this._events.removeListener) {\n if (arguments.length === 0)\n this._events = {};\n else if (this._events[type])\n delete this._events[type];\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n for (key in this._events) {\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = {};\n return this;\n }\n\n listeners = this._events[type];\n\n if (isFunction(listeners)) {\n this.removeListener(type, listeners);\n } else if (listeners) {\n // LIFO order\n while (listeners.length)\n this.removeListener(type, listeners[listeners.length - 1]);\n }\n delete this._events[type];\n\n return this;\n};\n\nEventEmitter.prototype.listeners = function(type) {\n var ret;\n if (!this._events || !this._events[type])\n ret = [];\n else if (isFunction(this._events[type]))\n ret = [this._events[type]];\n else\n ret = this._events[type].slice();\n return ret;\n};\n\nEventEmitter.prototype.listenerCount = function(type) {\n if (this._events) {\n var evlistener = this._events[type];\n\n if (isFunction(evlistener))\n return 1;\n else if (evlistener)\n return evlistener.length;\n }\n return 0;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n return emitter.listenerCount(type);\n};\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn, options) {\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp && exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n 'function(require,module,exports){' + fn + '(self); }',\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n 'function(require,module,exports){' +\n // try to call default if defined to also support babel esmodule exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);' +\n '}',\n scache\n ];\n\n var workerSources = {};\n resolveSources(skey);\n\n function resolveSources(key) {\n workerSources[key] = true;\n\n for (var depPath in sources[key][1]) {\n var depKey = sources[key][1][depPath];\n if (!workerSources[depKey]) {\n resolveSources(depKey);\n }\n }\n }\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(workerSources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n var blob = new Blob([src], { type: 'text/javascript' });\n if (options && options.bare) { return blob; }\n var workerUrl = URL.createObjectURL(blob);\n var worker = new Worker(workerUrl);\n worker.objectURL = workerUrl;\n return worker;\n};\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const defaultConfig = {\n enableWorker: false,\n enableStashBuffer: true,\n stashInitialSize: undefined,\n\n isLive: false,\n\n lazyLoad: true,\n lazyLoadMaxDuration: 3 * 60,\n lazyLoadRecoverDuration: 30,\n deferLoadAfterSourceOpen: true,\n\n // autoCleanupSourceBuffer: default as false, leave unspecified\n autoCleanupMaxBackwardDuration: 3 * 60,\n autoCleanupMinBackwardDuration: 2 * 60,\n\n statisticsInfoReportInterval: 600,\n\n fixAudioTimestampGap: true,\n\n accurateSeek: false,\n seekType: 'range', // [range, param, custom]\n seekParamStart: 'bstart',\n seekParamEnd: 'bend',\n rangeLoadZeroStart: false,\n customSeekHandler: undefined,\n reuseRedirectedURL: false,\n // referrerPolicy: leave as unspecified\n\n headers: undefined,\n customLoader: undefined\n};\n\nexport function createDefaultConfig() {\n return Object.assign({}, defaultConfig);\n}","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport IOController from '../io/io-controller.js';\nimport {createDefaultConfig} from '../config.js';\n\nclass Features {\n\n static supportMSEH264Playback() {\n return window.MediaSource &&\n window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n }\n\n static supportNetworkStreamIO() {\n let ioctl = new IOController({}, createDefaultConfig());\n let loaderType = ioctl.loaderType;\n ioctl.destroy();\n return loaderType == 'fetch-stream-loader' || loaderType == 'xhr-moz-chunked-loader';\n }\n\n static getNetworkLoaderTypeName() {\n let ioctl = new IOController({}, createDefaultConfig());\n let loaderType = ioctl.loaderType;\n ioctl.destroy();\n return loaderType;\n }\n\n static supportNativeMediaPlayback(mimeType) {\n if (Features.videoElement == undefined) {\n Features.videoElement = window.document.createElement('video');\n }\n let canPlay = Features.videoElement.canPlayType(mimeType);\n return canPlay === 'probably' || canPlay == 'maybe';\n }\n\n static getFeatureList() {\n let features = {\n mseFlvPlayback: false,\n mseLiveFlvPlayback: false,\n networkStreamIO: false,\n networkLoaderName: '',\n nativeMP4H264Playback: false,\n nativeWebmVP8Playback: false,\n nativeWebmVP9Playback: false\n };\n\n features.mseFlvPlayback = Features.supportMSEH264Playback();\n features.networkStreamIO = Features.supportNetworkStreamIO();\n features.networkLoaderName = Features.getNetworkLoaderTypeName();\n features.mseLiveFlvPlayback = features.mseFlvPlayback && features.networkStreamIO;\n features.nativeMP4H264Playback = Features.supportNativeMediaPlayback('video/mp4; codecs=\"avc1.42001E, mp4a.40.2\"');\n features.nativeWebmVP8Playback = Features.supportNativeMediaPlayback('video/webm; codecs=\"vp8.0, vorbis\"');\n features.nativeWebmVP9Playback = Features.supportNativeMediaPlayback('video/webm; codecs=\"vp9\"');\n\n return features;\n }\n\n}\n\nexport default Features;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass MediaInfo {\n\n constructor() {\n this.mimeType = null;\n this.duration = null;\n\n this.hasAudio = null;\n this.hasVideo = null;\n this.audioCodec = null;\n this.videoCodec = null;\n this.audioDataRate = null;\n this.videoDataRate = null;\n\n this.audioSampleRate = null;\n this.audioChannelCount = null;\n\n this.width = null;\n this.height = null;\n this.fps = null;\n this.profile = null;\n this.level = null;\n this.refFrames = null;\n this.chromaFormat = null;\n this.sarNum = null;\n this.sarDen = null;\n\n this.metadata = null;\n this.segments = null; // MediaInfo[]\n this.segmentCount = null;\n this.hasKeyframesIndex = null;\n this.keyframesIndex = null;\n }\n\n isComplete() {\n let audioInfoComplete = (this.hasAudio === false) ||\n (this.hasAudio === true &&\n this.audioCodec != null &&\n this.audioSampleRate != null &&\n this.audioChannelCount != null);\n\n let videoInfoComplete = (this.hasVideo === false) ||\n (this.hasVideo === true &&\n this.videoCodec != null &&\n this.width != null &&\n this.height != null &&\n this.fps != null &&\n this.profile != null &&\n this.level != null &&\n this.refFrames != null &&\n this.chromaFormat != null &&\n this.sarNum != null &&\n this.sarDen != null);\n\n // keyframesIndex may not be present\n return this.mimeType != null &&\n this.duration != null &&\n this.metadata != null &&\n this.hasKeyframesIndex != null &&\n audioInfoComplete &&\n videoInfoComplete;\n }\n\n isSeekable() {\n return this.hasKeyframesIndex === true;\n }\n\n getNearestKeyframe(milliseconds) {\n if (this.keyframesIndex == null) {\n return null;\n }\n\n let table = this.keyframesIndex;\n let keyframeIdx = this._search(table.times, milliseconds);\n\n return {\n index: keyframeIdx,\n milliseconds: table.times[keyframeIdx],\n fileposition: table.filepositions[keyframeIdx]\n };\n }\n\n _search(list, value) {\n let idx = 0;\n\n let last = list.length - 1;\n let mid = 0;\n let lbound = 0;\n let ubound = last;\n\n if (value < list[0]) {\n idx = 0;\n lbound = ubound + 1; // skip search\n }\n\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2);\n if (mid === last || (value >= list[mid] && value < list[mid + 1])) {\n idx = mid;\n break;\n } else if (list[mid] < value) {\n lbound = mid + 1;\n } else {\n ubound = mid - 1;\n }\n }\n\n return idx;\n }\n\n}\n\nexport default MediaInfo;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Represents an media sample (audio / video)\nexport class SampleInfo {\n\n constructor(dts, pts, duration, originalDts, isSync) {\n this.dts = dts;\n this.pts = pts;\n this.duration = duration;\n this.originalDts = originalDts;\n this.isSyncPoint = isSync;\n this.fileposition = null;\n }\n\n}\n\n// Media Segment concept is defined in Media Source Extensions spec.\n// Particularly in ISO BMFF format, an Media Segment contains a moof box followed by a mdat box.\nexport class MediaSegmentInfo {\n\n constructor() {\n this.beginDts = 0;\n this.endDts = 0;\n this.beginPts = 0;\n this.endPts = 0;\n this.originalBeginDts = 0;\n this.originalEndDts = 0;\n this.syncPoints = []; // SampleInfo[n], for video IDR frames only\n this.firstSample = null; // SampleInfo\n this.lastSample = null; // SampleInfo\n }\n\n appendSyncPoint(sampleInfo) { // also called Random Access Point\n sampleInfo.isSyncPoint = true;\n this.syncPoints.push(sampleInfo);\n }\n\n}\n\n// Ordered list for recording video IDR frames, sorted by originalDts\nexport class IDRSampleList {\n\n constructor() {\n this._list = [];\n }\n\n clear() {\n this._list = [];\n }\n\n appendArray(syncPoints) {\n let list = this._list;\n\n if (syncPoints.length === 0) {\n return;\n }\n\n if (list.length > 0 && syncPoints[0].originalDts < list[list.length - 1].originalDts) {\n this.clear();\n }\n\n Array.prototype.push.apply(list, syncPoints);\n }\n\n getLastSyncPointBeforeDts(dts) {\n if (this._list.length == 0) {\n return null;\n }\n\n let list = this._list;\n let idx = 0;\n let last = list.length - 1;\n let mid = 0;\n let lbound = 0;\n let ubound = last;\n\n if (dts < list[0].dts) {\n idx = 0;\n lbound = ubound + 1;\n }\n\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2);\n if (mid === last || (dts >= list[mid].dts && dts < list[mid + 1].dts)) {\n idx = mid;\n break;\n } else if (list[mid].dts < dts) {\n lbound = mid + 1;\n } else {\n ubound = mid - 1;\n }\n }\n return this._list[idx];\n }\n\n}\n\n// Data structure for recording information of media segments in single track.\nexport class MediaSegmentInfoList {\n\n constructor(type) {\n this._type = type;\n this._list = [];\n this._lastAppendLocation = -1; // cached last insert location\n }\n\n get type() {\n return this._type;\n }\n\n get length() {\n return this._list.length;\n }\n\n isEmpty() {\n return this._list.length === 0;\n }\n\n clear() {\n this._list = [];\n this._lastAppendLocation = -1;\n }\n\n _searchNearestSegmentBefore(originalBeginDts) {\n let list = this._list;\n if (list.length === 0) {\n return -2;\n }\n let last = list.length - 1;\n let mid = 0;\n let lbound = 0;\n let ubound = last;\n\n let idx = 0;\n\n if (originalBeginDts < list[0].originalBeginDts) {\n idx = -1;\n return idx;\n }\n\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2);\n if (mid === last || (originalBeginDts > list[mid].lastSample.originalDts &&\n (originalBeginDts < list[mid + 1].originalBeginDts))) {\n idx = mid;\n break;\n } else if (list[mid].originalBeginDts < originalBeginDts) {\n lbound = mid + 1;\n } else {\n ubound = mid - 1;\n }\n }\n return idx;\n }\n\n _searchNearestSegmentAfter(originalBeginDts) {\n return this._searchNearestSegmentBefore(originalBeginDts) + 1;\n }\n\n append(mediaSegmentInfo) {\n let list = this._list;\n let msi = mediaSegmentInfo;\n let lastAppendIdx = this._lastAppendLocation;\n let insertIdx = 0;\n\n if (lastAppendIdx !== -1 && lastAppendIdx < list.length &&\n msi.originalBeginDts >= list[lastAppendIdx].lastSample.originalDts &&\n ((lastAppendIdx === list.length - 1) ||\n (lastAppendIdx < list.length - 1 &&\n msi.originalBeginDts < list[lastAppendIdx + 1].originalBeginDts))) {\n insertIdx = lastAppendIdx + 1; // use cached location idx\n } else {\n if (list.length > 0) {\n insertIdx = this._searchNearestSegmentBefore(msi.originalBeginDts) + 1;\n }\n }\n\n this._lastAppendLocation = insertIdx;\n this._list.splice(insertIdx, 0, msi);\n }\n\n getLastSegmentBefore(originalBeginDts) {\n let idx = this._searchNearestSegmentBefore(originalBeginDts);\n if (idx >= 0) {\n return this._list[idx];\n } else { // -1\n return null;\n }\n }\n\n getLastSampleBefore(originalBeginDts) {\n let segment = this.getLastSegmentBefore(originalBeginDts);\n if (segment != null) {\n return segment.lastSample;\n } else {\n return null;\n }\n }\n\n getLastSyncPointBefore(originalBeginDts) {\n let segmentIdx = this._searchNearestSegmentBefore(originalBeginDts);\n let syncPoints = this._list[segmentIdx].syncPoints;\n while (syncPoints.length === 0 && segmentIdx > 0) {\n segmentIdx--;\n syncPoints = this._list[segmentIdx].syncPoints;\n }\n if (syncPoints.length > 0) {\n return syncPoints[syncPoints.length - 1];\n } else {\n return null;\n }\n }\n\n}","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport Log from '../utils/logger.js';\nimport Browser from '../utils/browser.js';\nimport MSEEvents from './mse-events.js';\nimport {SampleInfo, IDRSampleList} from './media-segment-info.js';\nimport {IllegalStateException} from '../utils/exception.js';\n\n// Media Source Extensions controller\nclass MSEController {\n\n constructor(config) {\n this.TAG = 'MSEController';\n\n this._config = config;\n this._emitter = new EventEmitter();\n\n if (this._config.isLive && this._config.autoCleanupSourceBuffer == undefined) {\n // For live stream, do auto cleanup by default\n this._config.autoCleanupSourceBuffer = true;\n }\n\n this.e = {\n onSourceOpen: this._onSourceOpen.bind(this),\n onSourceEnded: this._onSourceEnded.bind(this),\n onSourceClose: this._onSourceClose.bind(this),\n onSourceBufferError: this._onSourceBufferError.bind(this),\n onSourceBufferUpdateEnd: this._onSourceBufferUpdateEnd.bind(this)\n };\n\n this._mediaSource = null;\n this._mediaSourceObjectURL = null;\n this._mediaElement = null;\n\n this._isBufferFull = false;\n this._hasPendingEos = false;\n\n this._requireSetMediaDuration = false;\n this._pendingMediaDuration = 0;\n\n this._pendingSourceBufferInit = [];\n this._mimeTypes = {\n video: null,\n audio: null\n };\n this._sourceBuffers = {\n video: null,\n audio: null\n };\n this._lastInitSegments = {\n video: null,\n audio: null\n };\n this._pendingSegments = {\n video: [],\n audio: []\n };\n this._pendingRemoveRanges = {\n video: [],\n audio: []\n };\n this._idrList = new IDRSampleList();\n }\n\n destroy() {\n if (this._mediaElement || this._mediaSource) {\n this.detachMediaElement();\n }\n this.e = null;\n this._emitter.removeAllListeners();\n this._emitter = null;\n }\n\n on(event, listener) {\n this._emitter.addListener(event, listener);\n }\n\n off(event, listener) {\n this._emitter.removeListener(event, listener);\n }\n\n attachMediaElement(mediaElement) {\n if (this._mediaSource) {\n throw new IllegalStateException('MediaSource has been attached to an HTMLMediaElement!');\n }\n let ms = this._mediaSource = new window.MediaSource();\n ms.addEventListener('sourceopen', this.e.onSourceOpen);\n ms.addEventListener('sourceended', this.e.onSourceEnded);\n ms.addEventListener('sourceclose', this.e.onSourceClose);\n\n this._mediaElement = mediaElement;\n this._mediaSourceObjectURL = window.URL.createObjectURL(this._mediaSource);\n mediaElement.src = this._mediaSourceObjectURL;\n }\n\n detachMediaElement() {\n if (this._mediaSource) {\n let ms = this._mediaSource;\n for (let type in this._sourceBuffers) {\n // pending segments should be discard\n let ps = this._pendingSegments[type];\n ps.splice(0, ps.length);\n this._pendingSegments[type] = null;\n this._pendingRemoveRanges[type] = null;\n this._lastInitSegments[type] = null;\n\n // remove all sourcebuffers\n let sb = this._sourceBuffers[type];\n if (sb) {\n if (ms.readyState !== 'closed') {\n // ms edge can throw an error: Unexpected call to method or property access\n try {\n ms.removeSourceBuffer(sb);\n } catch (error) {\n Log.e(this.TAG, error.message);\n }\n sb.removeEventListener('error', this.e.onSourceBufferError);\n sb.removeEventListener('updateend', this.e.onSourceBufferUpdateEnd);\n }\n this._mimeTypes[type] = null;\n this._sourceBuffers[type] = null;\n }\n }\n if (ms.readyState === 'open') {\n try {\n ms.endOfStream();\n } catch (error) {\n Log.e(this.TAG, error.message);\n }\n }\n ms.removeEventListener('sourceopen', this.e.onSourceOpen);\n ms.removeEventListener('sourceended', this.e.onSourceEnded);\n ms.removeEventListener('sourceclose', this.e.onSourceClose);\n this._pendingSourceBufferInit = [];\n this._isBufferFull = false;\n this._idrList.clear();\n this._mediaSource = null;\n }\n\n if (this._mediaElement) {\n this._mediaElement.src = '';\n this._mediaElement.removeAttribute('src');\n this._mediaElement = null;\n }\n if (this._mediaSourceObjectURL) {\n window.URL.revokeObjectURL(this._mediaSourceObjectURL);\n this._mediaSourceObjectURL = null;\n }\n }\n\n appendInitSegment(initSegment, deferred) {\n if (!this._mediaSource || this._mediaSource.readyState !== 'open') {\n // sourcebuffer creation requires mediaSource.readyState === 'open'\n // so we defer the sourcebuffer creation, until sourceopen event triggered\n this._pendingSourceBufferInit.push(initSegment);\n // make sure that this InitSegment is in the front of pending segments queue\n this._pendingSegments[initSegment.type].push(initSegment);\n return;\n }\n\n let is = initSegment;\n let mimeType = `${is.container}`;\n if (is.codec && is.codec.length > 0) {\n mimeType += `;codecs=${is.codec}`;\n }\n\n let firstInitSegment = false;\n\n Log.v(this.TAG, 'Received Initialization Segment, mimeType: ' + mimeType);\n this._lastInitSegments[is.type] = is;\n\n if (mimeType !== this._mimeTypes[is.type]) {\n if (!this._mimeTypes[is.type]) { // empty, first chance create sourcebuffer\n firstInitSegment = true;\n try {\n let sb = this._sourceBuffers[is.type] = this._mediaSource.addSourceBuffer(mimeType);\n sb.addEventListener('error', this.e.onSourceBufferError);\n sb.addEventListener('updateend', this.e.onSourceBufferUpdateEnd);\n } catch (error) {\n Log.e(this.TAG, error.message);\n this._emitter.emit(MSEEvents.ERROR, {code: error.code, msg: error.message});\n return;\n }\n } else {\n Log.v(this.TAG, `Notice: ${is.type} mimeType changed, origin: ${this._mimeTypes[is.type]}, target: ${mimeType}`);\n }\n this._mimeTypes[is.type] = mimeType;\n }\n\n if (!deferred) {\n // deferred means this InitSegment has been pushed to pendingSegments queue\n this._pendingSegments[is.type].push(is);\n }\n if (!firstInitSegment) { // append immediately only if init segment in subsequence\n if (this._sourceBuffers[is.type] && !this._sourceBuffers[is.type].updating) {\n this._doAppendSegments();\n }\n }\n if (Browser.safari && is.container === 'audio/mpeg' && is.mediaDuration > 0) {\n // 'audio/mpeg' track under Safari may cause MediaElement's duration to be NaN\n // Manually correct MediaSource.duration to make progress bar seekable, and report right duration\n this._requireSetMediaDuration = true;\n this._pendingMediaDuration = is.mediaDuration / 1000; // in seconds\n this._updateMediaSourceDuration();\n }\n }\n\n appendMediaSegment(mediaSegment) {\n let ms = mediaSegment;\n this._pendingSegments[ms.type].push(ms);\n\n if (this._config.autoCleanupSourceBuffer && this._needCleanupSourceBuffer()) {\n this._doCleanupSourceBuffer();\n }\n\n let sb = this._sourceBuffers[ms.type];\n if (sb && !sb.updating && !this._hasPendingRemoveRanges()) {\n this._doAppendSegments();\n }\n }\n\n seek(seconds) {\n // remove all appended buffers\n for (let type in this._sourceBuffers) {\n if (!this._sourceBuffers[type]) {\n continue;\n }\n\n // abort current buffer append algorithm\n let sb = this._sourceBuffers[type];\n if (this._mediaSource.readyState === 'open') {\n try {\n // If range removal algorithm is running, InvalidStateError will be throwed\n // Ignore it.\n sb.abort();\n } catch (error) {\n Log.e(this.TAG, error.message);\n }\n }\n\n // IDRList should be clear\n this._idrList.clear();\n\n // pending segments should be discard\n let ps = this._pendingSegments[type];\n ps.splice(0, ps.length);\n\n if (this._mediaSource.readyState === 'closed') {\n // Parent MediaSource object has been detached from HTMLMediaElement\n continue;\n }\n\n // record ranges to be remove from SourceBuffer\n for (let i = 0; i < sb.buffered.length; i++) {\n let start = sb.buffered.start(i);\n let end = sb.buffered.end(i);\n this._pendingRemoveRanges[type].push({start, end});\n }\n\n // if sb is not updating, let's remove ranges now!\n if (!sb.updating) {\n this._doRemoveRanges();\n }\n\n // Safari 10 may get InvalidStateError in the later appendBuffer() after SourceBuffer.remove() call\n // Internal parser's state may be invalid at this time. Re-append last InitSegment to workaround.\n // Related issue: https://bugs.webkit.org/show_bug.cgi?id=159230\n if (Browser.safari) {\n let lastInitSegment = this._lastInitSegments[type];\n if (lastInitSegment) {\n this._pendingSegments[type].push(lastInitSegment);\n if (!sb.updating) {\n this._doAppendSegments();\n }\n }\n }\n }\n }\n\n endOfStream() {\n let ms = this._mediaSource;\n let sb = this._sourceBuffers;\n if (!ms || ms.readyState !== 'open') {\n if (ms && ms.readyState === 'closed' && this._hasPendingSegments()) {\n // If MediaSource hasn't turned into open state, and there're pending segments\n // Mark pending endOfStream, defer call until all pending segments appended complete\n this._hasPendingEos = true;\n }\n return;\n }\n if (sb.video && sb.video.updating || sb.audio && sb.audio.updating) {\n // If any sourcebuffer is updating, defer endOfStream operation\n // See _onSourceBufferUpdateEnd()\n this._hasPendingEos = true;\n } else {\n this._hasPendingEos = false;\n // Notify media data loading complete\n // This is helpful for correcting total duration to match last media segment\n // Otherwise MediaElement's ended event may not be triggered\n ms.endOfStream();\n }\n }\n\n getNearestKeyframe(dts) {\n return this._idrList.getLastSyncPointBeforeDts(dts);\n }\n\n _needCleanupSourceBuffer() {\n if (!this._config.autoCleanupSourceBuffer) {\n return false;\n }\n\n let currentTime = this._mediaElement.currentTime;\n\n for (let type in this._sourceBuffers) {\n let sb = this._sourceBuffers[type];\n if (sb) {\n let buffered = sb.buffered;\n if (buffered.length >= 1) {\n if (currentTime - buffered.start(0) >= this._config.autoCleanupMaxBackwardDuration) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n _doCleanupSourceBuffer() {\n let currentTime = this._mediaElement.currentTime;\n\n for (let type in this._sourceBuffers) {\n let sb = this._sourceBuffers[type];\n if (sb) {\n let buffered = sb.buffered;\n let doRemove = false;\n\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n\n if (start <= currentTime && currentTime < end + 3) { // padding 3 seconds\n if (currentTime - start >= this._config.autoCleanupMaxBackwardDuration) {\n doRemove = true;\n let removeEnd = currentTime - this._config.autoCleanupMinBackwardDuration;\n this._pendingRemoveRanges[type].push({start: start, end: removeEnd});\n }\n } else if (end < currentTime) {\n doRemove = true;\n this._pendingRemoveRanges[type].push({start: start, end: end});\n }\n }\n\n if (doRemove && !sb.updating) {\n this._doRemoveRanges();\n }\n }\n }\n }\n\n _updateMediaSourceDuration() {\n let sb = this._sourceBuffers;\n if (this._mediaElement.readyState === 0 || this._mediaSource.readyState !== 'open') {\n return;\n }\n if ((sb.video && sb.video.updating) || (sb.audio && sb.audio.updating)) {\n return;\n }\n\n let current = this._mediaSource.duration;\n let target = this._pendingMediaDuration;\n\n if (target > 0 && (isNaN(current) || target > current)) {\n Log.v(this.TAG, `Update MediaSource duration from ${current} to ${target}`);\n this._mediaSource.duration = target;\n }\n\n this._requireSetMediaDuration = false;\n this._pendingMediaDuration = 0;\n }\n\n _doRemoveRanges() {\n for (let type in this._pendingRemoveRanges) {\n if (!this._sourceBuffers[type] || this._sourceBuffers[type].updating) {\n continue;\n }\n let sb = this._sourceBuffers[type];\n let ranges = this._pendingRemoveRanges[type];\n while (ranges.length && !sb.updating) {\n let range = ranges.shift();\n sb.remove(range.start, range.end);\n }\n }\n }\n\n _doAppendSegments() {\n let pendingSegments = this._pendingSegments;\n\n for (let type in pendingSegments) {\n if (!this._sourceBuffers[type] || this._sourceBuffers[type].updating) {\n continue;\n }\n\n if (pendingSegments[type].length > 0) {\n let segment = pendingSegments[type].shift();\n\n if (segment.timestampOffset) {\n // For MPEG audio stream in MSE, if unbuffered-seeking occurred\n // We need explicitly set timestampOffset to the desired point in timeline for mpeg SourceBuffer.\n let currentOffset = this._sourceBuffers[type].timestampOffset;\n let targetOffset = segment.timestampOffset / 1000; // in seconds\n\n let delta = Math.abs(currentOffset - targetOffset);\n if (delta > 0.1) { // If time delta > 100ms\n Log.v(this.TAG, `Update MPEG audio timestampOffset from ${currentOffset} to ${targetOffset}`);\n this._sourceBuffers[type].timestampOffset = targetOffset;\n }\n delete segment.timestampOffset;\n }\n\n if (!segment.data || segment.data.byteLength === 0) {\n // Ignore empty buffer\n continue;\n }\n\n try {\n this._sourceBuffers[type].appendBuffer(segment.data);\n this._isBufferFull = false;\n if (type === 'video' && segment.hasOwnProperty('info')) {\n this._idrList.appendArray(segment.info.syncPoints);\n }\n } catch (error) {\n this._pendingSegments[type].unshift(segment);\n if (error.code === 22) { // QuotaExceededError\n /* Notice that FireFox may not throw QuotaExceededError if SourceBuffer is full\n * Currently we can only do lazy-load to avoid SourceBuffer become scattered.\n * SourceBuffer eviction policy may be changed in future version of FireFox.\n *\n * Related issues:\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1279885\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1280023\n */\n\n // report buffer full, abort network IO\n if (!this._isBufferFull) {\n this._emitter.emit(MSEEvents.BUFFER_FULL);\n }\n this._isBufferFull = true;\n } else {\n Log.e(this.TAG, error.message);\n this._emitter.emit(MSEEvents.ERROR, {code: error.code, msg: error.message});\n }\n }\n }\n }\n }\n\n _onSourceOpen() {\n Log.v(this.TAG, 'MediaSource onSourceOpen');\n this._mediaSource.removeEventListener('sourceopen', this.e.onSourceOpen);\n // deferred sourcebuffer creation / initialization\n if (this._pendingSourceBufferInit.length > 0) {\n let pendings = this._pendingSourceBufferInit;\n while (pendings.length) {\n let segment = pendings.shift();\n this.appendInitSegment(segment, true);\n }\n }\n // there may be some pending media segments, append them\n if (this._hasPendingSegments()) {\n this._doAppendSegments();\n }\n this._emitter.emit(MSEEvents.SOURCE_OPEN);\n }\n\n _onSourceEnded() {\n // fired on endOfStream\n Log.v(this.TAG, 'MediaSource onSourceEnded');\n }\n\n _onSourceClose() {\n // fired on detaching from media element\n Log.v(this.TAG, 'MediaSource onSourceClose');\n if (this._mediaSource && this.e != null) {\n this._mediaSource.removeEventListener('sourceopen', this.e.onSourceOpen);\n this._mediaSource.removeEventListener('sourceended', this.e.onSourceEnded);\n this._mediaSource.removeEventListener('sourceclose', this.e.onSourceClose);\n }\n }\n\n _hasPendingSegments() {\n let ps = this._pendingSegments;\n return ps.video.length > 0 || ps.audio.length > 0;\n }\n\n _hasPendingRemoveRanges() {\n let prr = this._pendingRemoveRanges;\n return prr.video.length > 0 || prr.audio.length > 0;\n }\n\n _onSourceBufferUpdateEnd() {\n if (this._requireSetMediaDuration) {\n this._updateMediaSourceDuration();\n } else if (this._hasPendingRemoveRanges()) {\n this._doRemoveRanges();\n } else if (this._hasPendingSegments()) {\n this._doAppendSegments();\n } else if (this._hasPendingEos) {\n this.endOfStream();\n }\n this._emitter.emit(MSEEvents.UPDATE_END);\n }\n\n _onSourceBufferError(e) {\n Log.e(this.TAG, `SourceBuffer Error: ${e}`);\n // this error might not always be fatal, just ignore it\n }\n\n}\n\nexport default MSEController;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst MSEEvents = {\n ERROR: 'error',\n SOURCE_OPEN: 'source_open',\n UPDATE_END: 'update_end',\n BUFFER_FULL: 'buffer_full'\n};\n\nexport default MSEEvents;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport Log from '../utils/logger.js';\nimport LoggingControl from '../utils/logging-control.js';\nimport TransmuxingController from './transmuxing-controller.js';\nimport TransmuxingEvents from './transmuxing-events.js';\nimport TransmuxingWorker from './transmuxing-worker.js';\nimport MediaInfo from './media-info.js';\n\nclass Transmuxer {\n\n constructor(mediaDataSource, config) {\n this.TAG = 'Transmuxer';\n this._emitter = new EventEmitter();\n\n if (config.enableWorker && typeof (Worker) !== 'undefined') {\n try {\n let work = require('webworkify');\n this._worker = work(TransmuxingWorker);\n this._workerDestroying = false;\n this._worker.addEventListener('message', this._onWorkerMessage.bind(this));\n this._worker.postMessage({cmd: 'init', param: [mediaDataSource, config]});\n this.e = {\n onLoggingConfigChanged: this._onLoggingConfigChanged.bind(this)\n };\n LoggingControl.registerListener(this.e.onLoggingConfigChanged);\n this._worker.postMessage({cmd: 'logging_config', param: LoggingControl.getConfig()});\n } catch (error) {\n Log.e(this.TAG, 'Error while initialize transmuxing worker, fallback to inline transmuxing');\n this._worker = null;\n this._controller = new TransmuxingController(mediaDataSource, config);\n }\n } else {\n this._controller = new TransmuxingController(mediaDataSource, config);\n }\n\n if (this._controller) {\n let ctl = this._controller;\n ctl.on(TransmuxingEvents.IO_ERROR, this._onIOError.bind(this));\n ctl.on(TransmuxingEvents.DEMUX_ERROR, this._onDemuxError.bind(this));\n ctl.on(TransmuxingEvents.INIT_SEGMENT, this._onInitSegment.bind(this));\n ctl.on(TransmuxingEvents.MEDIA_SEGMENT, this._onMediaSegment.bind(this));\n ctl.on(TransmuxingEvents.LOADING_COMPLETE, this._onLoadingComplete.bind(this));\n ctl.on(TransmuxingEvents.RECOVERED_EARLY_EOF, this._onRecoveredEarlyEof.bind(this));\n ctl.on(TransmuxingEvents.MEDIA_INFO, this._onMediaInfo.bind(this));\n ctl.on(TransmuxingEvents.METADATA_ARRIVED, this._onMetaDataArrived.bind(this));\n ctl.on(TransmuxingEvents.SCRIPTDATA_ARRIVED, this._onScriptDataArrived.bind(this));\n ctl.on(TransmuxingEvents.STATISTICS_INFO, this._onStatisticsInfo.bind(this));\n ctl.on(TransmuxingEvents.RECOMMEND_SEEKPOINT, this._onRecommendSeekpoint.bind(this));\n }\n }\n\n destroy() {\n if (this._worker) {\n if (!this._workerDestroying) {\n this._workerDestroying = true;\n this._worker.postMessage({cmd: 'destroy'});\n LoggingControl.removeListener(this.e.onLoggingConfigChanged);\n this.e = null;\n }\n } else {\n this._controller.destroy();\n this._controller = null;\n }\n this._emitter.removeAllListeners();\n this._emitter = null;\n }\n\n on(event, listener) {\n this._emitter.addListener(event, listener);\n }\n\n off(event, listener) {\n this._emitter.removeListener(event, listener);\n }\n\n hasWorker() {\n return this._worker != null;\n }\n\n open() {\n if (this._worker) {\n this._worker.postMessage({cmd: 'start'});\n } else {\n this._controller.start();\n }\n }\n\n close() {\n if (this._worker) {\n this._worker.postMessage({cmd: 'stop'});\n } else {\n this._controller.stop();\n }\n }\n\n seek(milliseconds) {\n if (this._worker) {\n this._worker.postMessage({cmd: 'seek', param: milliseconds});\n } else {\n this._controller.seek(milliseconds);\n }\n }\n\n pause() {\n if (this._worker) {\n this._worker.postMessage({cmd: 'pause'});\n } else {\n this._controller.pause();\n }\n }\n\n resume() {\n if (this._worker) {\n this._worker.postMessage({cmd: 'resume'});\n } else {\n this._controller.resume();\n }\n }\n\n _onInitSegment(type, initSegment) {\n // do async invoke\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.INIT_SEGMENT, type, initSegment);\n });\n }\n\n _onMediaSegment(type, mediaSegment) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.MEDIA_SEGMENT, type, mediaSegment);\n });\n }\n\n _onLoadingComplete() {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.LOADING_COMPLETE);\n });\n }\n\n _onRecoveredEarlyEof() {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.RECOVERED_EARLY_EOF);\n });\n }\n\n _onMediaInfo(mediaInfo) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.MEDIA_INFO, mediaInfo);\n });\n }\n\n _onMetaDataArrived(metadata) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.METADATA_ARRIVED, metadata);\n });\n }\n\n _onScriptDataArrived(data) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.SCRIPTDATA_ARRIVED, data);\n });\n }\n\n _onStatisticsInfo(statisticsInfo) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.STATISTICS_INFO, statisticsInfo);\n });\n }\n\n _onIOError(type, info) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.IO_ERROR, type, info);\n });\n }\n\n _onDemuxError(type, info) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.DEMUX_ERROR, type, info);\n });\n }\n\n _onRecommendSeekpoint(milliseconds) {\n Promise.resolve().then(() => {\n this._emitter.emit(TransmuxingEvents.RECOMMEND_SEEKPOINT, milliseconds);\n });\n }\n\n _onLoggingConfigChanged(config) {\n if (this._worker) {\n this._worker.postMessage({cmd: 'logging_config', param: config});\n }\n }\n\n _onWorkerMessage(e) {\n let message = e.data;\n let data = message.data;\n\n if (message.msg === 'destroyed' || this._workerDestroying) {\n this._workerDestroying = false;\n this._worker.terminate();\n this._worker = null;\n return;\n }\n\n switch (message.msg) {\n case TransmuxingEvents.INIT_SEGMENT:\n case TransmuxingEvents.MEDIA_SEGMENT:\n this._emitter.emit(message.msg, data.type, data.data);\n break;\n case TransmuxingEvents.LOADING_COMPLETE:\n case TransmuxingEvents.RECOVERED_EARLY_EOF:\n this._emitter.emit(message.msg);\n break;\n case TransmuxingEvents.MEDIA_INFO:\n Object.setPrototypeOf(data, MediaInfo.prototype);\n this._emitter.emit(message.msg, data);\n break;\n case TransmuxingEvents.METADATA_ARRIVED:\n case TransmuxingEvents.SCRIPTDATA_ARRIVED:\n case TransmuxingEvents.STATISTICS_INFO:\n this._emitter.emit(message.msg, data);\n break;\n case TransmuxingEvents.IO_ERROR:\n case TransmuxingEvents.DEMUX_ERROR:\n this._emitter.emit(message.msg, data.type, data.info);\n break;\n case TransmuxingEvents.RECOMMEND_SEEKPOINT:\n this._emitter.emit(message.msg, data);\n break;\n case 'logcat_callback':\n Log.emitter.emit('log', data.type, data.logcat);\n break;\n default:\n break;\n }\n }\n\n}\n\nexport default Transmuxer;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport Log from '../utils/logger.js';\nimport Browser from '../utils/browser.js';\nimport MediaInfo from './media-info.js';\nimport FLVDemuxer from '../demux/flv-demuxer.js';\nimport MP4Remuxer from '../remux/mp4-remuxer.js';\nimport DemuxErrors from '../demux/demux-errors.js';\nimport IOController from '../io/io-controller.js';\nimport TransmuxingEvents from './transmuxing-events.js';\nimport {LoaderStatus, LoaderErrors} from '../io/loader.js';\n\n// Transmuxing (IO, Demuxing, Remuxing) controller, with multipart support\nclass TransmuxingController {\n\n constructor(mediaDataSource, config) {\n this.TAG = 'TransmuxingController';\n this._emitter = new EventEmitter();\n\n this._config = config;\n\n // treat single part media as multipart media, which has only one segment\n if (!mediaDataSource.segments) {\n mediaDataSource.segments = [{\n duration: mediaDataSource.duration,\n filesize: mediaDataSource.filesize,\n url: mediaDataSource.url\n }];\n }\n\n // fill in default IO params if not exists\n if (typeof mediaDataSource.cors !== 'boolean') {\n mediaDataSource.cors = true;\n }\n if (typeof mediaDataSource.withCredentials !== 'boolean') {\n mediaDataSource.withCredentials = false;\n }\n\n this._mediaDataSource = mediaDataSource;\n this._currentSegmentIndex = 0;\n let totalDuration = 0;\n\n this._mediaDataSource.segments.forEach((segment) => {\n // timestampBase for each segment, and calculate total duration\n segment.timestampBase = totalDuration;\n totalDuration += segment.duration;\n // params needed by IOController\n segment.cors = mediaDataSource.cors;\n segment.withCredentials = mediaDataSource.withCredentials;\n // referrer policy control, if exist\n if (config.referrerPolicy) {\n segment.referrerPolicy = config.referrerPolicy;\n }\n });\n\n if (!isNaN(totalDuration) && this._mediaDataSource.duration !== totalDuration) {\n this._mediaDataSource.duration = totalDuration;\n }\n\n this._mediaInfo = null;\n this._demuxer = null;\n this._remuxer = null;\n this._ioctl = null;\n\n this._pendingSeekTime = null;\n this._pendingResolveSeekPoint = null;\n\n this._statisticsReporter = null;\n }\n\n destroy() {\n this._mediaInfo = null;\n this._mediaDataSource = null;\n\n if (this._statisticsReporter) {\n this._disableStatisticsReporter();\n }\n if (this._ioctl) {\n this._ioctl.destroy();\n this._ioctl = null;\n }\n if (this._demuxer) {\n this._demuxer.destroy();\n this._demuxer = null;\n }\n if (this._remuxer) {\n this._remuxer.destroy();\n this._remuxer = null;\n }\n\n this._emitter.removeAllListeners();\n this._emitter = null;\n }\n\n on(event, listener) {\n this._emitter.addListener(event, listener);\n }\n\n off(event, listener) {\n this._emitter.removeListener(event, listener);\n }\n\n start() {\n this._loadSegment(0);\n this._enableStatisticsReporter();\n }\n\n _loadSegment(segmentIndex, optionalFrom) {\n this._currentSegmentIndex = segmentIndex;\n let dataSource = this._mediaDataSource.segments[segmentIndex];\n\n let ioctl = this._ioctl = new IOController(dataSource, this._config, segmentIndex);\n ioctl.onError = this._onIOException.bind(this);\n ioctl.onSeeked = this._onIOSeeked.bind(this);\n ioctl.onComplete = this._onIOComplete.bind(this);\n ioctl.onRedirect = this._onIORedirect.bind(this);\n ioctl.onRecoveredEarlyEof = this._onIORecoveredEarlyEof.bind(this);\n\n if (optionalFrom) {\n this._demuxer.bindDataSource(this._ioctl);\n } else {\n ioctl.onDataArrival = this._onInitChunkArrival.bind(this);\n }\n\n ioctl.open(optionalFrom);\n }\n\n stop() {\n this._internalAbort();\n this._disableStatisticsReporter();\n }\n\n _internalAbort() {\n if (this._ioctl) {\n this._ioctl.destroy();\n this._ioctl = null;\n }\n }\n\n pause() { // take a rest\n if (this._ioctl && this._ioctl.isWorking()) {\n this._ioctl.pause();\n this._disableStatisticsReporter();\n }\n }\n\n resume() {\n if (this._ioctl && this._ioctl.isPaused()) {\n this._ioctl.resume();\n this._enableStatisticsReporter();\n }\n }\n\n seek(milliseconds) {\n if (this._mediaInfo == null || !this._mediaInfo.isSeekable()) {\n return;\n }\n\n let targetSegmentIndex = this._searchSegmentIndexContains(milliseconds);\n\n if (targetSegmentIndex === this._currentSegmentIndex) {\n // intra-segment seeking\n let segmentInfo = this._mediaInfo.segments[targetSegmentIndex];\n\n if (segmentInfo == undefined) {\n // current segment loading started, but mediainfo hasn't received yet\n // wait for the metadata loaded, then seek to expected position\n this._pendingSeekTime = milliseconds;\n } else {\n let keyframe = segmentInfo.getNearestKeyframe(milliseconds);\n this._remuxer.seek(keyframe.milliseconds);\n this._ioctl.seek(keyframe.fileposition);\n // Will be resolved in _onRemuxerMediaSegmentArrival()\n this._pendingResolveSeekPoint = keyframe.milliseconds;\n }\n } else {\n // cross-segment seeking\n let targetSegmentInfo = this._mediaInfo.segments[targetSegmentIndex];\n\n if (targetSegmentInfo == undefined) {\n // target segment hasn't been loaded. We need metadata then seek to expected time\n this._pendingSeekTime = milliseconds;\n this._internalAbort();\n this._remuxer.seek();\n this._remuxer.insertDiscontinuity();\n this._loadSegment(targetSegmentIndex);\n // Here we wait for the metadata loaded, then seek to expected position\n } else {\n // We have target segment's metadata, direct seek to target position\n let keyframe = targetSegmentInfo.getNearestKeyframe(milliseconds);\n this._internalAbort();\n this._remuxer.seek(milliseconds);\n this._remuxer.insertDiscontinuity();\n this._demuxer.resetMediaInfo();\n this._demuxer.timestampBase = this._mediaDataSource.segments[targetSegmentIndex].timestampBase;\n this._loadSegment(targetSegmentIndex, keyframe.fileposition);\n this._pendingResolveSeekPoint = keyframe.milliseconds;\n this._reportSegmentMediaInfo(targetSegmentIndex);\n }\n }\n\n this._enableStatisticsReporter();\n }\n\n _searchSegmentIndexContains(milliseconds) {\n let segments = this._mediaDataSource.segments;\n let idx = segments.length - 1;\n\n for (let i = 0; i < segments.length; i++) {\n if (milliseconds < segments[i].timestampBase) {\n idx = i - 1;\n break;\n }\n }\n return idx;\n }\n\n _onInitChunkArrival(data, byteStart) {\n let probeData = null;\n let consumed = 0;\n\n if (byteStart > 0) {\n // IOController seeked immediately after opened, byteStart > 0 callback may received\n this._demuxer.bindDataSource(this._ioctl);\n this._demuxer.timestampBase = this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase;\n\n consumed = this._demuxer.parseChunks(data, byteStart);\n } else if ((probeData = FLVDemuxer.probe(data)).match) {\n // Always create new FLVDemuxer\n this._demuxer = new FLVDemuxer(probeData, this._config);\n\n if (!this._remuxer) {\n this._remuxer = new MP4Remuxer(this._config);\n }\n\n let mds = this._mediaDataSource;\n if (mds.duration != undefined && !isNaN(mds.duration)) {\n this._demuxer.overridedDuration = mds.duration;\n }\n if (typeof mds.hasAudio === 'boolean') {\n this._demuxer.overridedHasAudio = mds.hasAudio;\n }\n if (typeof mds.hasVideo === 'boolean') {\n this._demuxer.overridedHasVideo = mds.hasVideo;\n }\n\n this._demuxer.timestampBase = mds.segments[this._currentSegmentIndex].timestampBase;\n\n this._demuxer.onError = this._onDemuxException.bind(this);\n this._demuxer.onMediaInfo = this._onMediaInfo.bind(this);\n this._demuxer.onMetaDataArrived = this._onMetaDataArrived.bind(this);\n this._demuxer.onScriptDataArrived = this._onScriptDataArrived.bind(this);\n\n this._remuxer.bindDataSource(this._demuxer\n .bindDataSource(this._ioctl\n ));\n\n this._remuxer.onInitSegment = this._onRemuxerInitSegmentArrival.bind(this);\n this._remuxer.onMediaSegment = this._onRemuxerMediaSegmentArrival.bind(this);\n\n consumed = this._demuxer.parseChunks(data, byteStart);\n } else {\n probeData = null;\n Log.e(this.TAG, 'Non-FLV, Unsupported media type!');\n Promise.resolve().then(() => {\n this._internalAbort();\n });\n this._emitter.emit(TransmuxingEvents.DEMUX_ERROR, DemuxErrors.FORMAT_UNSUPPORTED, 'Non-FLV, Unsupported media type');\n\n consumed = 0;\n }\n\n return consumed;\n }\n\n _onMediaInfo(mediaInfo) {\n if (this._mediaInfo == null) {\n // Store first segment's mediainfo as global mediaInfo\n this._mediaInfo = Object.assign({}, mediaInfo);\n this._mediaInfo.keyframesIndex = null;\n this._mediaInfo.segments = [];\n this._mediaInfo.segmentCount = this._mediaDataSource.segments.length;\n Object.setPrototypeOf(this._mediaInfo, MediaInfo.prototype);\n }\n\n let segmentInfo = Object.assign({}, mediaInfo);\n Object.setPrototypeOf(segmentInfo, MediaInfo.prototype);\n this._mediaInfo.segments[this._currentSegmentIndex] = segmentInfo;\n\n // notify mediaInfo update\n this._reportSegmentMediaInfo(this._currentSegmentIndex);\n\n if (this._pendingSeekTime != null) {\n Promise.resolve().then(() => {\n let target = this._pendingSeekTime;\n this._pendingSeekTime = null;\n this.seek(target);\n });\n }\n }\n\n _onMetaDataArrived(metadata) {\n this._emitter.emit(TransmuxingEvents.METADATA_ARRIVED, metadata);\n }\n\n _onScriptDataArrived(data) {\n this._emitter.emit(TransmuxingEvents.SCRIPTDATA_ARRIVED, data);\n }\n\n _onIOSeeked() {\n this._remuxer.insertDiscontinuity();\n }\n\n _onIOComplete(extraData) {\n let segmentIndex = extraData;\n let nextSegmentIndex = segmentIndex + 1;\n\n if (nextSegmentIndex < this._mediaDataSource.segments.length) {\n this._internalAbort();\n this._remuxer.flushStashedSamples();\n this._loadSegment(nextSegmentIndex);\n } else {\n this._remuxer.flushStashedSamples();\n this._emitter.emit(TransmuxingEvents.LOADING_COMPLETE);\n this._disableStatisticsReporter();\n }\n }\n\n _onIORedirect(redirectedURL) {\n let segmentIndex = this._ioctl.extraData;\n this._mediaDataSource.segments[segmentIndex].redirectedURL = redirectedURL;\n }\n\n _onIORecoveredEarlyEof() {\n this._emitter.emit(TransmuxingEvents.RECOVERED_EARLY_EOF);\n }\n\n _onIOException(type, info) {\n Log.e(this.TAG, `IOException: type = ${type}, code = ${info.code}, msg = ${info.msg}`);\n this._emitter.emit(TransmuxingEvents.IO_ERROR, type, info);\n this._disableStatisticsReporter();\n }\n\n _onDemuxException(type, info) {\n Log.e(this.TAG, `DemuxException: type = ${type}, info = ${info}`);\n this._emitter.emit(TransmuxingEvents.DEMUX_ERROR, type, info);\n }\n\n _onRemuxerInitSegmentArrival(type, initSegment) {\n this._emitter.emit(TransmuxingEvents.INIT_SEGMENT, type, initSegment);\n }\n\n _onRemuxerMediaSegmentArrival(type, mediaSegment) {\n if (this._pendingSeekTime != null) {\n // Media segments after new-segment cross-seeking should be dropped.\n return;\n }\n this._emitter.emit(TransmuxingEvents.MEDIA_SEGMENT, type, mediaSegment);\n\n // Resolve pending seekPoint\n if (this._pendingResolveSeekPoint != null && type === 'video') {\n let syncPoints = mediaSegment.info.syncPoints;\n let seekpoint = this._pendingResolveSeekPoint;\n this._pendingResolveSeekPoint = null;\n\n // Safari: Pass PTS for recommend_seekpoint\n if (Browser.safari && syncPoints.length > 0 && syncPoints[0].originalDts === seekpoint) {\n seekpoint = syncPoints[0].pts;\n }\n // else: use original DTS (keyframe.milliseconds)\n\n this._emitter.emit(TransmuxingEvents.RECOMMEND_SEEKPOINT, seekpoint);\n }\n }\n\n _enableStatisticsReporter() {\n if (this._statisticsReporter == null) {\n this._statisticsReporter = self.setInterval(\n this._reportStatisticsInfo.bind(this),\n this._config.statisticsInfoReportInterval);\n }\n }\n\n _disableStatisticsReporter() {\n if (this._statisticsReporter) {\n self.clearInterval(this._statisticsReporter);\n this._statisticsReporter = null;\n }\n }\n\n _reportSegmentMediaInfo(segmentIndex) {\n let segmentInfo = this._mediaInfo.segments[segmentIndex];\n let exportInfo = Object.assign({}, segmentInfo);\n\n exportInfo.duration = this._mediaInfo.duration;\n exportInfo.segmentCount = this._mediaInfo.segmentCount;\n delete exportInfo.segments;\n delete exportInfo.keyframesIndex;\n\n this._emitter.emit(TransmuxingEvents.MEDIA_INFO, exportInfo);\n }\n\n _reportStatisticsInfo() {\n let info = {};\n\n info.url = this._ioctl.currentURL;\n info.hasRedirect = this._ioctl.hasRedirect;\n if (info.hasRedirect) {\n info.redirectedURL = this._ioctl.currentRedirectedURL;\n }\n\n info.speed = this._ioctl.currentSpeed;\n info.loaderType = this._ioctl.loaderType;\n info.currentSegmentIndex = this._currentSegmentIndex;\n info.totalSegmentCount = this._mediaDataSource.segments.length;\n\n this._emitter.emit(TransmuxingEvents.STATISTICS_INFO, info);\n }\n\n}\n\nexport default TransmuxingController;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst TransmuxingEvents = {\n IO_ERROR: 'io_error',\n DEMUX_ERROR: 'demux_error',\n INIT_SEGMENT: 'init_segment',\n MEDIA_SEGMENT: 'media_segment',\n LOADING_COMPLETE: 'loading_complete',\n RECOVERED_EARLY_EOF: 'recovered_early_eof',\n MEDIA_INFO: 'media_info',\n METADATA_ARRIVED: 'metadata_arrived',\n SCRIPTDATA_ARRIVED: 'scriptdata_arrived',\n STATISTICS_INFO: 'statistics_info',\n RECOMMEND_SEEKPOINT: 'recommend_seekpoint'\n};\n\nexport default TransmuxingEvents;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport LoggingControl from '../utils/logging-control.js';\nimport Polyfill from '../utils/polyfill.js';\nimport TransmuxingController from './transmuxing-controller.js';\nimport TransmuxingEvents from './transmuxing-events.js';\n\n/* post message to worker:\n data: {\n cmd: string\n param: any\n }\n\n receive message from worker:\n data: {\n msg: string,\n data: any\n }\n */\n\nlet TransmuxingWorker = function (self) {\n\n let TAG = 'TransmuxingWorker';\n let controller = null;\n let logcatListener = onLogcatCallback.bind(this);\n\n Polyfill.install();\n\n self.addEventListener('message', function (e) {\n switch (e.data.cmd) {\n case 'init':\n controller = new TransmuxingController(e.data.param[0], e.data.param[1]);\n controller.on(TransmuxingEvents.IO_ERROR, onIOError.bind(this));\n controller.on(TransmuxingEvents.DEMUX_ERROR, onDemuxError.bind(this));\n controller.on(TransmuxingEvents.INIT_SEGMENT, onInitSegment.bind(this));\n controller.on(TransmuxingEvents.MEDIA_SEGMENT, onMediaSegment.bind(this));\n controller.on(TransmuxingEvents.LOADING_COMPLETE, onLoadingComplete.bind(this));\n controller.on(TransmuxingEvents.RECOVERED_EARLY_EOF, onRecoveredEarlyEof.bind(this));\n controller.on(TransmuxingEvents.MEDIA_INFO, onMediaInfo.bind(this));\n controller.on(TransmuxingEvents.METADATA_ARRIVED, onMetaDataArrived.bind(this));\n controller.on(TransmuxingEvents.SCRIPTDATA_ARRIVED, onScriptDataArrived.bind(this));\n controller.on(TransmuxingEvents.STATISTICS_INFO, onStatisticsInfo.bind(this));\n controller.on(TransmuxingEvents.RECOMMEND_SEEKPOINT, onRecommendSeekpoint.bind(this));\n break;\n case 'destroy':\n if (controller) {\n controller.destroy();\n controller = null;\n }\n self.postMessage({msg: 'destroyed'});\n break;\n case 'start':\n controller.start();\n break;\n case 'stop':\n controller.stop();\n break;\n case 'seek':\n controller.seek(e.data.param);\n break;\n case 'pause':\n controller.pause();\n break;\n case 'resume':\n controller.resume();\n break;\n case 'logging_config': {\n let config = e.data.param;\n LoggingControl.applyConfig(config);\n\n if (config.enableCallback === true) {\n LoggingControl.addLogListener(logcatListener);\n } else {\n LoggingControl.removeLogListener(logcatListener);\n }\n break;\n }\n }\n });\n\n function onInitSegment(type, initSegment) {\n let obj = {\n msg: TransmuxingEvents.INIT_SEGMENT,\n data: {\n type: type,\n data: initSegment\n }\n };\n self.postMessage(obj, [initSegment.data]); // data: ArrayBuffer\n }\n\n function onMediaSegment(type, mediaSegment) {\n let obj = {\n msg: TransmuxingEvents.MEDIA_SEGMENT,\n data: {\n type: type,\n data: mediaSegment\n }\n };\n self.postMessage(obj, [mediaSegment.data]); // data: ArrayBuffer\n }\n\n function onLoadingComplete() {\n let obj = {\n msg: TransmuxingEvents.LOADING_COMPLETE\n };\n self.postMessage(obj);\n }\n\n function onRecoveredEarlyEof() {\n let obj = {\n msg: TransmuxingEvents.RECOVERED_EARLY_EOF\n };\n self.postMessage(obj);\n }\n\n function onMediaInfo(mediaInfo) {\n let obj = {\n msg: TransmuxingEvents.MEDIA_INFO,\n data: mediaInfo\n };\n self.postMessage(obj);\n }\n\n function onMetaDataArrived(metadata) {\n let obj = {\n msg: TransmuxingEvents.METADATA_ARRIVED,\n data: metadata\n };\n self.postMessage(obj);\n }\n\n function onScriptDataArrived(data) {\n let obj = {\n msg: TransmuxingEvents.SCRIPTDATA_ARRIVED,\n data: data\n };\n self.postMessage(obj);\n }\n\n function onStatisticsInfo(statInfo) {\n let obj = {\n msg: TransmuxingEvents.STATISTICS_INFO,\n data: statInfo\n };\n self.postMessage(obj);\n }\n\n function onIOError(type, info) {\n self.postMessage({\n msg: TransmuxingEvents.IO_ERROR,\n data: {\n type: type,\n info: info\n }\n });\n }\n\n function onDemuxError(type, info) {\n self.postMessage({\n msg: TransmuxingEvents.DEMUX_ERROR,\n data: {\n type: type,\n info: info\n }\n });\n }\n\n function onRecommendSeekpoint(milliseconds) {\n self.postMessage({\n msg: TransmuxingEvents.RECOMMEND_SEEKPOINT,\n data: milliseconds\n });\n }\n\n function onLogcatCallback(type, str) {\n self.postMessage({\n msg: 'logcat_callback',\n data: {\n type: type,\n logcat: str\n }\n });\n }\n\n};\n\nexport default TransmuxingWorker;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport decodeUTF8 from '../utils/utf8-conv.js';\nimport {IllegalStateException} from '../utils/exception.js';\n\nlet le = (function () {\n let buf = new ArrayBuffer(2);\n (new DataView(buf)).setInt16(0, 256, true); // little-endian write\n return (new Int16Array(buf))[0] === 256; // platform-spec read, if equal then LE\n})();\n\nclass AMF {\n\n static parseScriptData(arrayBuffer, dataOffset, dataSize) {\n let data = {};\n\n try {\n let name = AMF.parseValue(arrayBuffer, dataOffset, dataSize);\n let value = AMF.parseValue(arrayBuffer, dataOffset + name.size, dataSize - name.size);\n\n data[name.data] = value.data;\n } catch (e) {\n Log.e('AMF', e.toString());\n }\n\n return data;\n }\n\n static parseObject(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 3) {\n throw new IllegalStateException('Data not enough when parse ScriptDataObject');\n }\n let name = AMF.parseString(arrayBuffer, dataOffset, dataSize);\n let value = AMF.parseValue(arrayBuffer, dataOffset + name.size, dataSize - name.size);\n let isObjectEnd = value.objectEnd;\n\n return {\n data: {\n name: name.data,\n value: value.data\n },\n size: name.size + value.size,\n objectEnd: isObjectEnd\n };\n }\n\n static parseVariable(arrayBuffer, dataOffset, dataSize) {\n return AMF.parseObject(arrayBuffer, dataOffset, dataSize);\n }\n\n static parseString(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 2) {\n throw new IllegalStateException('Data not enough when parse String');\n }\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n let length = v.getUint16(0, !le);\n\n let str;\n if (length > 0) {\n str = decodeUTF8(new Uint8Array(arrayBuffer, dataOffset + 2, length));\n } else {\n str = '';\n }\n\n return {\n data: str,\n size: 2 + length\n };\n }\n\n static parseLongString(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 4) {\n throw new IllegalStateException('Data not enough when parse LongString');\n }\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n let length = v.getUint32(0, !le);\n\n let str;\n if (length > 0) {\n str = decodeUTF8(new Uint8Array(arrayBuffer, dataOffset + 4, length));\n } else {\n str = '';\n }\n\n return {\n data: str,\n size: 4 + length\n };\n }\n\n static parseDate(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 10) {\n throw new IllegalStateException('Data size invalid when parse Date');\n }\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n let timestamp = v.getFloat64(0, !le);\n let localTimeOffset = v.getInt16(8, !le);\n timestamp += localTimeOffset * 60 * 1000; // get UTC time\n\n return {\n data: new Date(timestamp),\n size: 8 + 2\n };\n }\n\n static parseValue(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 1) {\n throw new IllegalStateException('Data not enough when parse Value');\n }\n\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n\n let offset = 1;\n let type = v.getUint8(0);\n let value;\n let objectEnd = false;\n\n try {\n switch (type) {\n case 0: // Number(Double) type\n value = v.getFloat64(1, !le);\n offset += 8;\n break;\n case 1: { // Boolean type\n let b = v.getUint8(1);\n value = b ? true : false;\n offset += 1;\n break;\n }\n case 2: { // String type\n let amfstr = AMF.parseString(arrayBuffer, dataOffset + 1, dataSize - 1);\n value = amfstr.data;\n offset += amfstr.size;\n break;\n }\n case 3: { // Object(s) type\n value = {};\n let terminal = 0; // workaround for malformed Objects which has missing ScriptDataObjectEnd\n if ((v.getUint32(dataSize - 4, !le) & 0x00FFFFFF) === 9) {\n terminal = 3;\n }\n while (offset < dataSize - 4) { // 4 === type(UI8) + ScriptDataObjectEnd(UI24)\n let amfobj = AMF.parseObject(arrayBuffer, dataOffset + offset, dataSize - offset - terminal);\n if (amfobj.objectEnd)\n break;\n value[amfobj.data.name] = amfobj.data.value;\n offset += amfobj.size;\n }\n if (offset <= dataSize - 3) {\n let marker = v.getUint32(offset - 1, !le) & 0x00FFFFFF;\n if (marker === 9) {\n offset += 3;\n }\n }\n break;\n }\n case 8: { // ECMA array type (Mixed array)\n value = {};\n offset += 4; // ECMAArrayLength(UI32)\n let terminal = 0; // workaround for malformed MixedArrays which has missing ScriptDataObjectEnd\n if ((v.getUint32(dataSize - 4, !le) & 0x00FFFFFF) === 9) {\n terminal = 3;\n }\n while (offset < dataSize - 8) { // 8 === type(UI8) + ECMAArrayLength(UI32) + ScriptDataVariableEnd(UI24)\n let amfvar = AMF.parseVariable(arrayBuffer, dataOffset + offset, dataSize - offset - terminal);\n if (amfvar.objectEnd)\n break;\n value[amfvar.data.name] = amfvar.data.value;\n offset += amfvar.size;\n }\n if (offset <= dataSize - 3) {\n let marker = v.getUint32(offset - 1, !le) & 0x00FFFFFF;\n if (marker === 9) {\n offset += 3;\n }\n }\n break;\n }\n case 9: // ScriptDataObjectEnd\n value = undefined;\n offset = 1;\n objectEnd = true;\n break;\n case 10: { // Strict array type\n // ScriptDataValue[n]. NOTE: according to video_file_format_spec_v10_1.pdf\n value = [];\n let strictArrayLength = v.getUint32(1, !le);\n offset += 4;\n for (let i = 0; i < strictArrayLength; i++) {\n let val = AMF.parseValue(arrayBuffer, dataOffset + offset, dataSize - offset);\n value.push(val.data);\n offset += val.size;\n }\n break;\n }\n case 11: { // Date type\n let date = AMF.parseDate(arrayBuffer, dataOffset + 1, dataSize - 1);\n value = date.data;\n offset += date.size;\n break;\n }\n case 12: { // Long string type\n let amfLongStr = AMF.parseString(arrayBuffer, dataOffset + 1, dataSize - 1);\n value = amfLongStr.data;\n offset += amfLongStr.size;\n break;\n }\n default:\n // ignore and skip\n offset = dataSize;\n Log.w('AMF', 'Unsupported AMF value type ' + type);\n }\n } catch (e) {\n Log.e('AMF', e.toString());\n }\n\n return {\n data: value,\n size: offset,\n objectEnd: objectEnd\n };\n }\n\n}\n\nexport default AMF;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DemuxErrors = {\n OK: 'OK',\n FORMAT_ERROR: 'FormatError',\n FORMAT_UNSUPPORTED: 'FormatUnsupported',\n CODEC_UNSUPPORTED: 'CodecUnsupported'\n};\n\nexport default DemuxErrors;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {IllegalStateException, InvalidArgumentException} from '../utils/exception.js';\n\n// Exponential-Golomb buffer decoder\nclass ExpGolomb {\n\n constructor(uint8array) {\n this.TAG = 'ExpGolomb';\n\n this._buffer = uint8array;\n this._buffer_index = 0;\n this._total_bytes = uint8array.byteLength;\n this._total_bits = uint8array.byteLength * 8;\n this._current_word = 0;\n this._current_word_bits_left = 0;\n }\n\n destroy() {\n this._buffer = null;\n }\n\n _fillCurrentWord() {\n let buffer_bytes_left = this._total_bytes - this._buffer_index;\n if (buffer_bytes_left <= 0)\n throw new IllegalStateException('ExpGolomb: _fillCurrentWord() but no bytes available');\n\n let bytes_read = Math.min(4, buffer_bytes_left);\n let word = new Uint8Array(4);\n word.set(this._buffer.subarray(this._buffer_index, this._buffer_index + bytes_read));\n this._current_word = new DataView(word.buffer).getUint32(0, false);\n\n this._buffer_index += bytes_read;\n this._current_word_bits_left = bytes_read * 8;\n }\n\n readBits(bits) {\n if (bits > 32)\n throw new InvalidArgumentException('ExpGolomb: readBits() bits exceeded max 32bits!');\n\n if (bits <= this._current_word_bits_left) {\n let result = this._current_word >>> (32 - bits);\n this._current_word <<= bits;\n this._current_word_bits_left -= bits;\n return result;\n }\n\n let result = this._current_word_bits_left ? this._current_word : 0;\n result = result >>> (32 - this._current_word_bits_left);\n let bits_need_left = bits - this._current_word_bits_left;\n\n this._fillCurrentWord();\n let bits_read_next = Math.min(bits_need_left, this._current_word_bits_left);\n\n let result2 = this._current_word >>> (32 - bits_read_next);\n this._current_word <<= bits_read_next;\n this._current_word_bits_left -= bits_read_next;\n\n result = (result << bits_read_next) | result2;\n return result;\n }\n\n readBool() {\n return this.readBits(1) === 1;\n }\n\n readByte() {\n return this.readBits(8);\n }\n\n _skipLeadingZero() {\n let zero_count;\n for (zero_count = 0; zero_count < this._current_word_bits_left; zero_count++) {\n if (0 !== (this._current_word & (0x80000000 >>> zero_count))) {\n this._current_word <<= zero_count;\n this._current_word_bits_left -= zero_count;\n return zero_count;\n }\n }\n this._fillCurrentWord();\n return zero_count + this._skipLeadingZero();\n }\n\n readUEG() { // unsigned exponential golomb\n let leading_zeros = this._skipLeadingZero();\n return this.readBits(leading_zeros + 1) - 1;\n }\n\n readSEG() { // signed exponential golomb\n let value = this.readUEG();\n if (value & 0x01) {\n return (value + 1) >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n\n}\n\nexport default ExpGolomb;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport AMF from './amf-parser.js';\nimport SPSParser from './sps-parser.js';\nimport DemuxErrors from './demux-errors.js';\nimport MediaInfo from '../core/media-info.js';\nimport {IllegalStateException} from '../utils/exception.js';\n\nfunction Swap16(src) {\n return (((src >>> 8) & 0xFF) |\n ((src & 0xFF) << 8));\n}\n\nfunction Swap32(src) {\n return (((src & 0xFF000000) >>> 24) |\n ((src & 0x00FF0000) >>> 8) |\n ((src & 0x0000FF00) << 8) |\n ((src & 0x000000FF) << 24));\n}\n\nfunction ReadBig32(array, index) {\n return ((array[index] << 24) |\n (array[index + 1] << 16) |\n (array[index + 2] << 8) |\n (array[index + 3]));\n}\n\n\nclass FLVDemuxer {\n\n constructor(probeData, config) {\n this.TAG = 'FLVDemuxer';\n\n this._config = config;\n\n this._onError = null;\n this._onMediaInfo = null;\n this._onMetaDataArrived = null;\n this._onScriptDataArrived = null;\n this._onTrackMetadata = null;\n this._onDataAvailable = null;\n\n this._dataOffset = probeData.dataOffset;\n this._firstParse = true;\n this._dispatch = false;\n\n this._hasAudio = probeData.hasAudioTrack;\n this._hasVideo = probeData.hasVideoTrack;\n\n this._hasAudioFlagOverrided = false;\n this._hasVideoFlagOverrided = false;\n\n this._audioInitialMetadataDispatched = false;\n this._videoInitialMetadataDispatched = false;\n\n this._mediaInfo = new MediaInfo();\n this._mediaInfo.hasAudio = this._hasAudio;\n this._mediaInfo.hasVideo = this._hasVideo;\n this._metadata = null;\n this._audioMetadata = null;\n this._videoMetadata = null;\n\n this._naluLengthSize = 4;\n this._timestampBase = 0; // int32, in milliseconds\n this._timescale = 1000;\n this._duration = 0; // int32, in milliseconds\n this._durationOverrided = false;\n this._referenceFrameRate = {\n fixed: true,\n fps: 23.976,\n fps_num: 23976,\n fps_den: 1000\n };\n\n this._flvSoundRateTable = [5500, 11025, 22050, 44100, 48000];\n\n this._mpegSamplingRates = [\n 96000, 88200, 64000, 48000, 44100, 32000,\n 24000, 22050, 16000, 12000, 11025, 8000, 7350\n ];\n\n this._mpegAudioV10SampleRateTable = [44100, 48000, 32000, 0];\n this._mpegAudioV20SampleRateTable = [22050, 24000, 16000, 0];\n this._mpegAudioV25SampleRateTable = [11025, 12000, 8000, 0];\n\n this._mpegAudioL1BitRateTable = [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1];\n this._mpegAudioL2BitRateTable = [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1];\n this._mpegAudioL3BitRateTable = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1];\n\n this._videoTrack = {type: 'video', id: 1, sequenceNumber: 0, samples: [], length: 0};\n this._audioTrack = {type: 'audio', id: 2, sequenceNumber: 0, samples: [], length: 0};\n\n this._littleEndian = (function () {\n let buf = new ArrayBuffer(2);\n (new DataView(buf)).setInt16(0, 256, true); // little-endian write\n return (new Int16Array(buf))[0] === 256; // platform-spec read, if equal then LE\n })();\n }\n\n destroy() {\n this._mediaInfo = null;\n this._metadata = null;\n this._audioMetadata = null;\n this._videoMetadata = null;\n this._videoTrack = null;\n this._audioTrack = null;\n\n this._onError = null;\n this._onMediaInfo = null;\n this._onMetaDataArrived = null;\n this._onScriptDataArrived = null;\n this._onTrackMetadata = null;\n this._onDataAvailable = null;\n }\n\n static probe(buffer) {\n let data = new Uint8Array(buffer);\n let mismatch = {match: false};\n\n if (data[0] !== 0x46 || data[1] !== 0x4C || data[2] !== 0x56 || data[3] !== 0x01) {\n return mismatch;\n }\n\n let hasAudio = ((data[4] & 4) >>> 2) !== 0;\n let hasVideo = (data[4] & 1) !== 0;\n\n let offset = ReadBig32(data, 5);\n\n if (offset < 9) {\n return mismatch;\n }\n\n return {\n match: true,\n consumed: offset,\n dataOffset: offset,\n hasAudioTrack: hasAudio,\n hasVideoTrack: hasVideo\n };\n }\n\n bindDataSource(loader) {\n loader.onDataArrival = this.parseChunks.bind(this);\n return this;\n }\n\n // prototype: function(type: string, metadata: any): void\n get onTrackMetadata() {\n return this._onTrackMetadata;\n }\n\n set onTrackMetadata(callback) {\n this._onTrackMetadata = callback;\n }\n\n // prototype: function(mediaInfo: MediaInfo): void\n get onMediaInfo() {\n return this._onMediaInfo;\n }\n\n set onMediaInfo(callback) {\n this._onMediaInfo = callback;\n }\n\n get onMetaDataArrived() {\n return this._onMetaDataArrived;\n }\n\n set onMetaDataArrived(callback) {\n this._onMetaDataArrived = callback;\n }\n\n get onScriptDataArrived() {\n return this._onScriptDataArrived;\n }\n\n set onScriptDataArrived(callback) {\n this._onScriptDataArrived = callback;\n }\n\n // prototype: function(type: number, info: string): void\n get onError() {\n return this._onError;\n }\n\n set onError(callback) {\n this._onError = callback;\n }\n\n // prototype: function(videoTrack: any, audioTrack: any): void\n get onDataAvailable() {\n return this._onDataAvailable;\n }\n\n set onDataAvailable(callback) {\n this._onDataAvailable = callback;\n }\n\n // timestamp base for output samples, must be in milliseconds\n get timestampBase() {\n return this._timestampBase;\n }\n\n set timestampBase(base) {\n this._timestampBase = base;\n }\n\n get overridedDuration() {\n return this._duration;\n }\n\n // Force-override media duration. Must be in milliseconds, int32\n set overridedDuration(duration) {\n this._durationOverrided = true;\n this._duration = duration;\n this._mediaInfo.duration = duration;\n }\n\n // Force-override audio track present flag, boolean\n set overridedHasAudio(hasAudio) {\n this._hasAudioFlagOverrided = true;\n this._hasAudio = hasAudio;\n this._mediaInfo.hasAudio = hasAudio;\n }\n\n // Force-override video track present flag, boolean\n set overridedHasVideo(hasVideo) {\n this._hasVideoFlagOverrided = true;\n this._hasVideo = hasVideo;\n this._mediaInfo.hasVideo = hasVideo;\n }\n\n resetMediaInfo() {\n this._mediaInfo = new MediaInfo();\n }\n\n _isInitialMetadataDispatched() {\n if (this._hasAudio && this._hasVideo) { // both audio & video\n return this._audioInitialMetadataDispatched && this._videoInitialMetadataDispatched;\n }\n if (this._hasAudio && !this._hasVideo) { // audio only\n return this._audioInitialMetadataDispatched;\n }\n if (!this._hasAudio && this._hasVideo) { // video only\n return this._videoInitialMetadataDispatched;\n }\n return false;\n }\n\n // function parseChunks(chunk: ArrayBuffer, byteStart: number): number;\n parseChunks(chunk, byteStart) {\n if (!this._onError || !this._onMediaInfo || !this._onTrackMetadata || !this._onDataAvailable) {\n throw new IllegalStateException('Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified');\n }\n\n let offset = 0;\n let le = this._littleEndian;\n\n if (byteStart === 0) { // buffer with FLV header\n if (chunk.byteLength > 13) {\n let probeData = FLVDemuxer.probe(chunk);\n offset = probeData.dataOffset;\n } else {\n return 0;\n }\n }\n\n if (this._firstParse) { // handle PreviousTagSize0 before Tag1\n this._firstParse = false;\n if (byteStart + offset !== this._dataOffset) {\n Log.w(this.TAG, 'First time parsing but chunk byteStart invalid!');\n }\n\n let v = new DataView(chunk, offset);\n let prevTagSize0 = v.getUint32(0, !le);\n if (prevTagSize0 !== 0) {\n Log.w(this.TAG, 'PrevTagSize0 !== 0 !!!');\n }\n offset += 4;\n }\n\n while (offset < chunk.byteLength) {\n this._dispatch = true;\n\n let v = new DataView(chunk, offset);\n\n if (offset + 11 + 4 > chunk.byteLength) {\n // data not enough for parsing an flv tag\n break;\n }\n\n let tagType = v.getUint8(0);\n let dataSize = v.getUint32(0, !le) & 0x00FFFFFF;\n\n if (offset + 11 + dataSize + 4 > chunk.byteLength) {\n // data not enough for parsing actual data body\n break;\n }\n\n if (tagType !== 8 && tagType !== 9 && tagType !== 18) {\n Log.w(this.TAG, `Unsupported tag type ${tagType}, skipped`);\n // consume the whole tag (skip it)\n offset += 11 + dataSize + 4;\n continue;\n }\n\n let ts2 = v.getUint8(4);\n let ts1 = v.getUint8(5);\n let ts0 = v.getUint8(6);\n let ts3 = v.getUint8(7);\n\n let timestamp = ts0 | (ts1 << 8) | (ts2 << 16) | (ts3 << 24);\n\n let streamId = v.getUint32(7, !le) & 0x00FFFFFF;\n if (streamId !== 0) {\n Log.w(this.TAG, 'Meet tag which has StreamID != 0!');\n }\n\n let dataOffset = offset + 11;\n\n switch (tagType) {\n case 8: // Audio\n this._parseAudioData(chunk, dataOffset, dataSize, timestamp);\n break;\n case 9: // Video\n this._parseVideoData(chunk, dataOffset, dataSize, timestamp, byteStart + offset);\n break;\n case 18: // ScriptDataObject\n this._parseScriptData(chunk, dataOffset, dataSize);\n break;\n }\n\n let prevTagSize = v.getUint32(11 + dataSize, !le);\n if (prevTagSize !== 11 + dataSize) {\n Log.w(this.TAG, `Invalid PrevTagSize ${prevTagSize}`);\n }\n\n offset += 11 + dataSize + 4; // tagBody + dataSize + prevTagSize\n }\n\n // dispatch parsed frames to consumer (typically, the remuxer)\n if (this._isInitialMetadataDispatched()) {\n if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) {\n this._onDataAvailable(this._audioTrack, this._videoTrack);\n }\n }\n\n return offset; // consumed bytes, just equals latest offset index\n }\n\n _parseScriptData(arrayBuffer, dataOffset, dataSize) {\n let scriptData = AMF.parseScriptData(arrayBuffer, dataOffset, dataSize);\n\n if (scriptData.hasOwnProperty('onMetaData')) {\n if (scriptData.onMetaData == null || typeof scriptData.onMetaData !== 'object') {\n Log.w(this.TAG, 'Invalid onMetaData structure!');\n return;\n }\n if (this._metadata) {\n Log.w(this.TAG, 'Found another onMetaData tag!');\n }\n this._metadata = scriptData;\n let onMetaData = this._metadata.onMetaData;\n\n if (this._onMetaDataArrived) {\n this._onMetaDataArrived(Object.assign({}, onMetaData));\n }\n\n if (typeof onMetaData.hasAudio === 'boolean') { // hasAudio\n if (this._hasAudioFlagOverrided === false) {\n this._hasAudio = onMetaData.hasAudio;\n this._mediaInfo.hasAudio = this._hasAudio;\n }\n }\n if (typeof onMetaData.hasVideo === 'boolean') { // hasVideo\n if (this._hasVideoFlagOverrided === false) {\n this._hasVideo = onMetaData.hasVideo;\n this._mediaInfo.hasVideo = this._hasVideo;\n }\n }\n if (typeof onMetaData.audiodatarate === 'number') { // audiodatarate\n this._mediaInfo.audioDataRate = onMetaData.audiodatarate;\n }\n if (typeof onMetaData.videodatarate === 'number') { // videodatarate\n this._mediaInfo.videoDataRate = onMetaData.videodatarate;\n }\n if (typeof onMetaData.width === 'number') { // width\n this._mediaInfo.width = onMetaData.width;\n }\n if (typeof onMetaData.height === 'number') { // height\n this._mediaInfo.height = onMetaData.height;\n }\n if (typeof onMetaData.duration === 'number') { // duration\n if (!this._durationOverrided) {\n let duration = Math.floor(onMetaData.duration * this._timescale);\n this._duration = duration;\n this._mediaInfo.duration = duration;\n }\n } else {\n this._mediaInfo.duration = 0;\n }\n if (typeof onMetaData.framerate === 'number') { // framerate\n let fps_num = Math.floor(onMetaData.framerate * 1000);\n if (fps_num > 0) {\n let fps = fps_num / 1000;\n this._referenceFrameRate.fixed = true;\n this._referenceFrameRate.fps = fps;\n this._referenceFrameRate.fps_num = fps_num;\n this._referenceFrameRate.fps_den = 1000;\n this._mediaInfo.fps = fps;\n }\n }\n if (typeof onMetaData.keyframes === 'object') { // keyframes\n this._mediaInfo.hasKeyframesIndex = true;\n let keyframes = onMetaData.keyframes;\n this._mediaInfo.keyframesIndex = this._parseKeyframesIndex(keyframes);\n onMetaData.keyframes = null; // keyframes has been extracted, remove it\n } else {\n this._mediaInfo.hasKeyframesIndex = false;\n }\n this._dispatch = false;\n this._mediaInfo.metadata = onMetaData;\n Log.v(this.TAG, 'Parsed onMetaData');\n if (this._mediaInfo.isComplete()) {\n this._onMediaInfo(this._mediaInfo);\n }\n }\n\n if (Object.keys(scriptData).length > 0) {\n if (this._onScriptDataArrived) {\n this._onScriptDataArrived(Object.assign({}, scriptData));\n }\n }\n }\n\n _parseKeyframesIndex(keyframes) {\n let times = [];\n let filepositions = [];\n\n // ignore first keyframe which is actually AVC Sequence Header (AVCDecoderConfigurationRecord)\n for (let i = 1; i < keyframes.times.length; i++) {\n let time = this._timestampBase + Math.floor(keyframes.times[i] * 1000);\n times.push(time);\n filepositions.push(keyframes.filepositions[i]);\n }\n\n return {\n times: times,\n filepositions: filepositions\n };\n }\n\n _parseAudioData(arrayBuffer, dataOffset, dataSize, tagTimestamp) {\n if (dataSize <= 1) {\n Log.w(this.TAG, 'Flv: Invalid audio packet, missing SoundData payload!');\n return;\n }\n\n if (this._hasAudioFlagOverrided === true && this._hasAudio === false) {\n // If hasAudio: false indicated explicitly in MediaDataSource,\n // Ignore all the audio packets\n return;\n }\n\n let le = this._littleEndian;\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n\n let soundSpec = v.getUint8(0);\n\n let soundFormat = soundSpec >>> 4;\n if (soundFormat !== 2 && soundFormat !== 10) { // MP3 or AAC\n this._onError(DemuxErrors.CODEC_UNSUPPORTED, 'Flv: Unsupported audio codec idx: ' + soundFormat);\n return;\n }\n\n let soundRate = 0;\n let soundRateIndex = (soundSpec & 12) >>> 2;\n if (soundRateIndex >= 0 && soundRateIndex <= 4) {\n soundRate = this._flvSoundRateTable[soundRateIndex];\n } else {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid audio sample rate idx: ' + soundRateIndex);\n return;\n }\n\n let soundSize = (soundSpec & 2) >>> 1; // unused\n let soundType = (soundSpec & 1);\n\n\n let meta = this._audioMetadata;\n let track = this._audioTrack;\n\n if (!meta) {\n if (this._hasAudio === false && this._hasAudioFlagOverrided === false) {\n this._hasAudio = true;\n this._mediaInfo.hasAudio = true;\n }\n\n // initial metadata\n meta = this._audioMetadata = {};\n meta.type = 'audio';\n meta.id = track.id;\n meta.timescale = this._timescale;\n meta.duration = this._duration;\n meta.audioSampleRate = soundRate;\n meta.channelCount = (soundType === 0 ? 1 : 2);\n }\n\n if (soundFormat === 10) { // AAC\n let aacData = this._parseAACAudioData(arrayBuffer, dataOffset + 1, dataSize - 1);\n if (aacData == undefined) {\n return;\n }\n\n if (aacData.packetType === 0) { // AAC sequence header (AudioSpecificConfig)\n if (meta.config) {\n Log.w(this.TAG, 'Found another AudioSpecificConfig!');\n }\n let misc = aacData.data;\n meta.audioSampleRate = misc.samplingRate;\n meta.channelCount = misc.channelCount;\n meta.codec = misc.codec;\n meta.originalCodec = misc.originalCodec;\n meta.config = misc.config;\n // The decode result of an aac sample is 1024 PCM samples\n meta.refSampleDuration = 1024 / meta.audioSampleRate * meta.timescale;\n Log.v(this.TAG, 'Parsed AudioSpecificConfig');\n\n if (this._isInitialMetadataDispatched()) {\n // Non-initial metadata, force dispatch (or flush) parsed frames to remuxer\n if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) {\n this._onDataAvailable(this._audioTrack, this._videoTrack);\n }\n } else {\n this._audioInitialMetadataDispatched = true;\n }\n // then notify new metadata\n this._dispatch = false;\n this._onTrackMetadata('audio', meta);\n\n let mi = this._mediaInfo;\n mi.audioCodec = meta.originalCodec;\n mi.audioSampleRate = meta.audioSampleRate;\n mi.audioChannelCount = meta.channelCount;\n if (mi.hasVideo) {\n if (mi.videoCodec != null) {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.videoCodec + ',' + mi.audioCodec + '\"';\n }\n } else {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.audioCodec + '\"';\n }\n if (mi.isComplete()) {\n this._onMediaInfo(mi);\n }\n } else if (aacData.packetType === 1) { // AAC raw frame data\n let dts = this._timestampBase + tagTimestamp;\n let aacSample = {unit: aacData.data, length: aacData.data.byteLength, dts: dts, pts: dts};\n track.samples.push(aacSample);\n track.length += aacData.data.length;\n } else {\n Log.e(this.TAG, `Flv: Unsupported AAC data type ${aacData.packetType}`);\n }\n } else if (soundFormat === 2) { // MP3\n if (!meta.codec) {\n // We need metadata for mp3 audio track, extract info from frame header\n let misc = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, true);\n if (misc == undefined) {\n return;\n }\n meta.audioSampleRate = misc.samplingRate;\n meta.channelCount = misc.channelCount;\n meta.codec = misc.codec;\n meta.originalCodec = misc.originalCodec;\n // The decode result of an mp3 sample is 1152 PCM samples\n meta.refSampleDuration = 1152 / meta.audioSampleRate * meta.timescale;\n Log.v(this.TAG, 'Parsed MPEG Audio Frame Header');\n\n this._audioInitialMetadataDispatched = true;\n this._onTrackMetadata('audio', meta);\n\n let mi = this._mediaInfo;\n mi.audioCodec = meta.codec;\n mi.audioSampleRate = meta.audioSampleRate;\n mi.audioChannelCount = meta.channelCount;\n mi.audioDataRate = misc.bitRate;\n if (mi.hasVideo) {\n if (mi.videoCodec != null) {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.videoCodec + ',' + mi.audioCodec + '\"';\n }\n } else {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.audioCodec + '\"';\n }\n if (mi.isComplete()) {\n this._onMediaInfo(mi);\n }\n }\n\n // This packet is always a valid audio packet, extract it\n let data = this._parseMP3AudioData(arrayBuffer, dataOffset + 1, dataSize - 1, false);\n if (data == undefined) {\n return;\n }\n let dts = this._timestampBase + tagTimestamp;\n let mp3Sample = {unit: data, length: data.byteLength, dts: dts, pts: dts};\n track.samples.push(mp3Sample);\n track.length += data.length;\n }\n }\n\n _parseAACAudioData(arrayBuffer, dataOffset, dataSize) {\n if (dataSize <= 1) {\n Log.w(this.TAG, 'Flv: Invalid AAC packet, missing AACPacketType or/and Data!');\n return;\n }\n\n let result = {};\n let array = new Uint8Array(arrayBuffer, dataOffset, dataSize);\n\n result.packetType = array[0];\n\n if (array[0] === 0) {\n result.data = this._parseAACAudioSpecificConfig(arrayBuffer, dataOffset + 1, dataSize - 1);\n } else {\n result.data = array.subarray(1);\n }\n\n return result;\n }\n\n _parseAACAudioSpecificConfig(arrayBuffer, dataOffset, dataSize) {\n let array = new Uint8Array(arrayBuffer, dataOffset, dataSize);\n let config = null;\n\n /* Audio Object Type:\n 0: Null\n 1: AAC Main\n 2: AAC LC\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: HE-AAC / SBR (Spectral Band Replication)\n 6: AAC Scalable\n */\n\n let audioObjectType = 0;\n let originalAudioObjectType = 0;\n let audioExtensionObjectType = null;\n let samplingIndex = 0;\n let extensionSamplingIndex = null;\n\n // 5 bits\n audioObjectType = originalAudioObjectType = array[0] >>> 3;\n // 4 bits\n samplingIndex = ((array[0] & 0x07) << 1) | (array[1] >>> 7);\n if (samplingIndex < 0 || samplingIndex >= this._mpegSamplingRates.length) {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: AAC invalid sampling frequency index!');\n return;\n }\n\n let samplingFrequence = this._mpegSamplingRates[samplingIndex];\n\n // 4 bits\n let channelConfig = (array[1] & 0x78) >>> 3;\n if (channelConfig < 0 || channelConfig >= 8) {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: AAC invalid channel configuration');\n return;\n }\n\n if (audioObjectType === 5) { // HE-AAC?\n // 4 bits\n extensionSamplingIndex = ((array[1] & 0x07) << 1) | (array[2] >>> 7);\n // 5 bits\n audioExtensionObjectType = (array[2] & 0x7C) >>> 2;\n }\n\n // workarounds for various browsers\n let userAgent = self.navigator.userAgent.toLowerCase();\n\n if (userAgent.indexOf('firefox') !== -1) {\n // firefox: use SBR (HE-AAC) if freq less than 24kHz\n if (samplingIndex >= 6) {\n audioObjectType = 5;\n config = new Array(4);\n extensionSamplingIndex = samplingIndex - 3;\n } else { // use LC-AAC\n audioObjectType = 2;\n config = new Array(2);\n extensionSamplingIndex = samplingIndex;\n }\n } else if (userAgent.indexOf('android') !== -1) {\n // android: always use LC-AAC\n audioObjectType = 2;\n config = new Array(2);\n extensionSamplingIndex = samplingIndex;\n } else {\n // for other browsers, e.g. chrome...\n // Always use HE-AAC to make it easier to switch aac codec profile\n audioObjectType = 5;\n extensionSamplingIndex = samplingIndex;\n config = new Array(4);\n\n if (samplingIndex >= 6) {\n extensionSamplingIndex = samplingIndex - 3;\n } else if (channelConfig === 1) { // Mono channel\n audioObjectType = 2;\n config = new Array(2);\n extensionSamplingIndex = samplingIndex;\n }\n }\n\n config[0] = audioObjectType << 3;\n config[0] |= (samplingIndex & 0x0F) >>> 1;\n config[1] = (samplingIndex & 0x0F) << 7;\n config[1] |= (channelConfig & 0x0F) << 3;\n if (audioObjectType === 5) {\n config[1] |= ((extensionSamplingIndex & 0x0F) >>> 1);\n config[2] = (extensionSamplingIndex & 0x01) << 7;\n // extended audio object type: force to 2 (LC-AAC)\n config[2] |= (2 << 2);\n config[3] = 0;\n }\n\n return {\n config: config,\n samplingRate: samplingFrequence,\n channelCount: channelConfig,\n codec: 'mp4a.40.' + audioObjectType,\n originalCodec: 'mp4a.40.' + originalAudioObjectType\n };\n }\n\n _parseMP3AudioData(arrayBuffer, dataOffset, dataSize, requestHeader) {\n if (dataSize < 4) {\n Log.w(this.TAG, 'Flv: Invalid MP3 packet, header missing!');\n return;\n }\n\n let le = this._littleEndian;\n let array = new Uint8Array(arrayBuffer, dataOffset, dataSize);\n let result = null;\n\n if (requestHeader) {\n if (array[0] !== 0xFF) {\n return;\n }\n let ver = (array[1] >>> 3) & 0x03;\n let layer = (array[1] & 0x06) >> 1;\n\n let bitrate_index = (array[2] & 0xF0) >>> 4;\n let sampling_freq_index = (array[2] & 0x0C) >>> 2;\n\n let channel_mode = (array[3] >>> 6) & 0x03;\n let channel_count = channel_mode !== 3 ? 2 : 1;\n\n let sample_rate = 0;\n let bit_rate = 0;\n let object_type = 34; // Layer-3, listed in MPEG-4 Audio Object Types\n\n let codec = 'mp3';\n\n switch (ver) {\n case 0: // MPEG 2.5\n sample_rate = this._mpegAudioV25SampleRateTable[sampling_freq_index];\n break;\n case 2: // MPEG 2\n sample_rate = this._mpegAudioV20SampleRateTable[sampling_freq_index];\n break;\n case 3: // MPEG 1\n sample_rate = this._mpegAudioV10SampleRateTable[sampling_freq_index];\n break;\n }\n\n switch (layer) {\n case 1: // Layer 3\n object_type = 34;\n if (bitrate_index < this._mpegAudioL3BitRateTable.length) {\n bit_rate = this._mpegAudioL3BitRateTable[bitrate_index];\n }\n break;\n case 2: // Layer 2\n object_type = 33;\n if (bitrate_index < this._mpegAudioL2BitRateTable.length) {\n bit_rate = this._mpegAudioL2BitRateTable[bitrate_index];\n }\n break;\n case 3: // Layer 1\n object_type = 32;\n if (bitrate_index < this._mpegAudioL1BitRateTable.length) {\n bit_rate = this._mpegAudioL1BitRateTable[bitrate_index];\n }\n break;\n }\n\n result = {\n bitRate: bit_rate,\n samplingRate: sample_rate,\n channelCount: channel_count,\n codec: codec,\n originalCodec: codec\n };\n } else {\n result = array;\n }\n\n return result;\n }\n\n _parseVideoData(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition) {\n if (dataSize <= 1) {\n Log.w(this.TAG, 'Flv: Invalid video packet, missing VideoData payload!');\n return;\n }\n\n if (this._hasVideoFlagOverrided === true && this._hasVideo === false) {\n // If hasVideo: false indicated explicitly in MediaDataSource,\n // Ignore all the video packets\n return;\n }\n\n let spec = (new Uint8Array(arrayBuffer, dataOffset, dataSize))[0];\n\n let frameType = (spec & 240) >>> 4;\n let codecId = spec & 15;\n\n if (codecId !== 7) {\n this._onError(DemuxErrors.CODEC_UNSUPPORTED, `Flv: Unsupported codec in video frame: ${codecId}`);\n return;\n }\n\n this._parseAVCVideoPacket(arrayBuffer, dataOffset + 1, dataSize - 1, tagTimestamp, tagPosition, frameType);\n }\n\n _parseAVCVideoPacket(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType) {\n if (dataSize < 4) {\n Log.w(this.TAG, 'Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime');\n return;\n }\n\n let le = this._littleEndian;\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n\n let packetType = v.getUint8(0);\n let cts_unsigned = v.getUint32(0, !le) & 0x00FFFFFF;\n let cts = (cts_unsigned << 8) >> 8; // convert to 24-bit signed int\n\n if (packetType === 0) { // AVCDecoderConfigurationRecord\n this._parseAVCDecoderConfigurationRecord(arrayBuffer, dataOffset + 4, dataSize - 4);\n } else if (packetType === 1) { // One or more Nalus\n this._parseAVCVideoData(arrayBuffer, dataOffset + 4, dataSize - 4, tagTimestamp, tagPosition, frameType, cts);\n } else if (packetType === 2) {\n // empty, AVC end of sequence\n } else {\n this._onError(DemuxErrors.FORMAT_ERROR, `Flv: Invalid video packet type ${packetType}`);\n return;\n }\n }\n\n _parseAVCDecoderConfigurationRecord(arrayBuffer, dataOffset, dataSize) {\n if (dataSize < 7) {\n Log.w(this.TAG, 'Flv: Invalid AVCDecoderConfigurationRecord, lack of data!');\n return;\n }\n\n let meta = this._videoMetadata;\n let track = this._videoTrack;\n let le = this._littleEndian;\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n\n if (!meta) {\n if (this._hasVideo === false && this._hasVideoFlagOverrided === false) {\n this._hasVideo = true;\n this._mediaInfo.hasVideo = true;\n }\n\n meta = this._videoMetadata = {};\n meta.type = 'video';\n meta.id = track.id;\n meta.timescale = this._timescale;\n meta.duration = this._duration;\n } else {\n if (typeof meta.avcc !== 'undefined') {\n Log.w(this.TAG, 'Found another AVCDecoderConfigurationRecord!');\n }\n }\n\n let version = v.getUint8(0); // configurationVersion\n let avcProfile = v.getUint8(1); // avcProfileIndication\n let profileCompatibility = v.getUint8(2); // profile_compatibility\n let avcLevel = v.getUint8(3); // AVCLevelIndication\n\n if (version !== 1 || avcProfile === 0) {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord');\n return;\n }\n\n this._naluLengthSize = (v.getUint8(4) & 3) + 1; // lengthSizeMinusOne\n if (this._naluLengthSize !== 3 && this._naluLengthSize !== 4) { // holy shit!!!\n this._onError(DemuxErrors.FORMAT_ERROR, `Flv: Strange NaluLengthSizeMinusOne: ${this._naluLengthSize - 1}`);\n return;\n }\n\n let spsCount = v.getUint8(5) & 31; // numOfSequenceParameterSets\n if (spsCount === 0) {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No SPS');\n return;\n } else if (spsCount > 1) {\n Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ${spsCount}`);\n }\n\n let offset = 6;\n\n for (let i = 0; i < spsCount; i++) {\n let len = v.getUint16(offset, !le); // sequenceParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n\n // Notice: Nalu without startcode header (00 00 00 01)\n let sps = new Uint8Array(arrayBuffer, dataOffset + offset, len);\n offset += len;\n\n let config = SPSParser.parseSPS(sps);\n if (i !== 0) {\n // ignore other sps's config\n continue;\n }\n\n meta.codecWidth = config.codec_size.width;\n meta.codecHeight = config.codec_size.height;\n meta.presentWidth = config.present_size.width;\n meta.presentHeight = config.present_size.height;\n\n meta.profile = config.profile_string;\n meta.level = config.level_string;\n meta.bitDepth = config.bit_depth;\n meta.chromaFormat = config.chroma_format;\n meta.sarRatio = config.sar_ratio;\n meta.frameRate = config.frame_rate;\n\n if (config.frame_rate.fixed === false ||\n config.frame_rate.fps_num === 0 ||\n config.frame_rate.fps_den === 0) {\n meta.frameRate = this._referenceFrameRate;\n }\n\n let fps_den = meta.frameRate.fps_den;\n let fps_num = meta.frameRate.fps_num;\n meta.refSampleDuration = meta.timescale * (fps_den / fps_num);\n\n let codecArray = sps.subarray(1, 4);\n let codecString = 'avc1.';\n for (let j = 0; j < 3; j++) {\n let h = codecArray[j].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecString += h;\n }\n meta.codec = codecString;\n\n let mi = this._mediaInfo;\n mi.width = meta.codecWidth;\n mi.height = meta.codecHeight;\n mi.fps = meta.frameRate.fps;\n mi.profile = meta.profile;\n mi.level = meta.level;\n mi.refFrames = config.ref_frames;\n mi.chromaFormat = config.chroma_format_string;\n mi.sarNum = meta.sarRatio.width;\n mi.sarDen = meta.sarRatio.height;\n mi.videoCodec = codecString;\n\n if (mi.hasAudio) {\n if (mi.audioCodec != null) {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.videoCodec + ',' + mi.audioCodec + '\"';\n }\n } else {\n mi.mimeType = 'video/x-flv; codecs=\"' + mi.videoCodec + '\"';\n }\n if (mi.isComplete()) {\n this._onMediaInfo(mi);\n }\n }\n\n let ppsCount = v.getUint8(offset); // numOfPictureParameterSets\n if (ppsCount === 0) {\n this._onError(DemuxErrors.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No PPS');\n return;\n } else if (ppsCount > 1) {\n Log.w(this.TAG, `Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ${ppsCount}`);\n }\n\n offset++;\n\n for (let i = 0; i < ppsCount; i++) {\n let len = v.getUint16(offset, !le); // pictureParameterSetLength\n offset += 2;\n\n if (len === 0) {\n continue;\n }\n\n // pps is useless for extracting video information\n offset += len;\n }\n\n meta.avcc = new Uint8Array(dataSize);\n meta.avcc.set(new Uint8Array(arrayBuffer, dataOffset, dataSize), 0);\n Log.v(this.TAG, 'Parsed AVCDecoderConfigurationRecord');\n\n if (this._isInitialMetadataDispatched()) {\n // flush parsed frames\n if (this._dispatch && (this._audioTrack.length || this._videoTrack.length)) {\n this._onDataAvailable(this._audioTrack, this._videoTrack);\n }\n } else {\n this._videoInitialMetadataDispatched = true;\n }\n // notify new metadata\n this._dispatch = false;\n this._onTrackMetadata('video', meta);\n }\n\n _parseAVCVideoData(arrayBuffer, dataOffset, dataSize, tagTimestamp, tagPosition, frameType, cts) {\n let le = this._littleEndian;\n let v = new DataView(arrayBuffer, dataOffset, dataSize);\n\n let units = [], length = 0;\n\n let offset = 0;\n const lengthSize = this._naluLengthSize;\n let dts = this._timestampBase + tagTimestamp;\n let keyframe = (frameType === 1); // from FLV Frame Type constants\n\n while (offset < dataSize) {\n if (offset + 4 >= dataSize) {\n Log.w(this.TAG, `Malformed Nalu near timestamp ${dts}, offset = ${offset}, dataSize = ${dataSize}`);\n break; // data not enough for next Nalu\n }\n // Nalu with length-header (AVC1)\n let naluSize = v.getUint32(offset, !le); // Big-Endian read\n if (lengthSize === 3) {\n naluSize >>>= 8;\n }\n if (naluSize > dataSize - lengthSize) {\n Log.w(this.TAG, `Malformed Nalus near timestamp ${dts}, NaluSize > DataSize!`);\n return;\n }\n\n let unitType = v.getUint8(offset + lengthSize) & 0x1F;\n\n if (unitType === 5) { // IDR\n keyframe = true;\n }\n\n let data = new Uint8Array(arrayBuffer, dataOffset + offset, lengthSize + naluSize);\n let unit = {type: unitType, data: data};\n units.push(unit);\n length += data.byteLength;\n\n offset += lengthSize + naluSize;\n }\n\n if (units.length) {\n let track = this._videoTrack;\n let avcSample = {\n units: units,\n length: length,\n isKeyframe: keyframe,\n dts: dts,\n cts: cts,\n pts: (dts + cts)\n };\n if (keyframe) {\n avcSample.fileposition = tagPosition;\n }\n track.samples.push(avcSample);\n track.length += length;\n }\n }\n\n}\n\nexport default FLVDemuxer;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport ExpGolomb from './exp-golomb.js';\n\nclass SPSParser {\n\n static _ebsp2rbsp(uint8array) {\n let src = uint8array;\n let src_length = src.byteLength;\n let dst = new Uint8Array(src_length);\n let dst_idx = 0;\n\n for (let i = 0; i < src_length; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dst_idx] = src[i];\n dst_idx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dst_idx);\n }\n\n static parseSPS(uint8array) {\n let rbsp = SPSParser._ebsp2rbsp(uint8array);\n let gb = new ExpGolomb(rbsp);\n\n gb.readByte();\n let profile_idc = gb.readByte(); // profile_idc\n gb.readByte(); // constraint_set_flags[5] + reserved_zero[3]\n let level_idc = gb.readByte(); // level_idc\n gb.readUEG(); // seq_parameter_set_id\n\n let profile_string = SPSParser.getProfileString(profile_idc);\n let level_string = SPSParser.getLevelString(level_idc);\n let chroma_format_idc = 1;\n let chroma_format = 420;\n let chroma_format_table = [0, 420, 422, 444];\n let bit_depth = 8;\n\n if (profile_idc === 100 || profile_idc === 110 || profile_idc === 122 ||\n profile_idc === 244 || profile_idc === 44 || profile_idc === 83 ||\n profile_idc === 86 || profile_idc === 118 || profile_idc === 128 ||\n profile_idc === 138 || profile_idc === 144) {\n\n chroma_format_idc = gb.readUEG();\n if (chroma_format_idc === 3) {\n gb.readBits(1); // separate_colour_plane_flag\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc];\n }\n\n bit_depth = gb.readUEG() + 8; // bit_depth_luma_minus8\n gb.readUEG(); // bit_depth_chroma_minus8\n gb.readBits(1); // qpprime_y_zero_transform_bypass_flag\n if (gb.readBool()) { // seq_scaling_matrix_present_flag\n let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12;\n for (let i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) { // seq_scaling_list_present_flag\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16);\n } else {\n SPSParser._skipScalingList(gb, 64);\n }\n }\n }\n }\n }\n gb.readUEG(); // log2_max_frame_num_minus4\n let pic_order_cnt_type = gb.readUEG();\n if (pic_order_cnt_type === 0) {\n gb.readUEG(); // log2_max_pic_order_cnt_lsb_minus_4\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1); // delta_pic_order_always_zero_flag\n gb.readSEG(); // offset_for_non_ref_pic\n gb.readSEG(); // offset_for_top_to_bottom_field\n let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG();\n for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n gb.readSEG(); // offset_for_ref_frame\n }\n }\n let ref_frames = gb.readUEG(); // max_num_ref_frames\n gb.readBits(1); // gaps_in_frame_num_value_allowed_flag\n\n let pic_width_in_mbs_minus1 = gb.readUEG();\n let pic_height_in_map_units_minus1 = gb.readUEG();\n\n let frame_mbs_only_flag = gb.readBits(1);\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1); // mb_adaptive_frame_field_flag\n }\n gb.readBits(1); // direct_8x8_inference_flag\n\n let frame_crop_left_offset = 0;\n let frame_crop_right_offset = 0;\n let frame_crop_top_offset = 0;\n let frame_crop_bottom_offset = 0;\n\n let frame_cropping_flag = gb.readBool();\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG();\n frame_crop_right_offset = gb.readUEG();\n frame_crop_top_offset = gb.readUEG();\n frame_crop_bottom_offset = gb.readUEG();\n }\n\n let sar_width = 1, sar_height = 1;\n let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0;\n\n let vui_parameters_present_flag = gb.readBool();\n if (vui_parameters_present_flag) {\n if (gb.readBool()) { // aspect_ratio_info_present_flag\n let aspect_ratio_idc = gb.readByte();\n let sar_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n let sar_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_w_table[aspect_ratio_idc - 1];\n sar_height = sar_h_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = gb.readByte() << 8 | gb.readByte();\n sar_height = gb.readByte() << 8 | gb.readByte();\n }\n }\n\n if (gb.readBool()) { // overscan_info_present_flag\n gb.readBool(); // overscan_appropriate_flag\n }\n if (gb.readBool()) { // video_signal_type_present_flag\n gb.readBits(4); // video_format & video_full_range_flag\n if (gb.readBool()) { // colour_description_present_flag\n gb.readBits(24); // colour_primaries & transfer_characteristics & matrix_coefficients\n }\n }\n if (gb.readBool()) { // chroma_loc_info_present_flag\n gb.readUEG(); // chroma_sample_loc_type_top_field\n gb.readUEG(); // chroma_sample_loc_type_bottom_field\n }\n if (gb.readBool()) { // timing_info_present_flag\n let num_units_in_tick = gb.readBits(32);\n let time_scale = gb.readBits(32);\n fps_fixed = gb.readBool(); // fixed_frame_rate_flag\n\n fps_num = time_scale;\n fps_den = num_units_in_tick * 2;\n fps = fps_num / fps_den;\n }\n }\n\n let sarScale = 1;\n if (sar_width !== 1 || sar_height !== 1) {\n sarScale = sar_width / sar_height;\n }\n\n let crop_unit_x = 0, crop_unit_y = 0;\n if (chroma_format_idc === 0) {\n crop_unit_x = 1;\n crop_unit_y = 2 - frame_mbs_only_flag;\n } else {\n let sub_wc = (chroma_format_idc === 3) ? 1 : 2;\n let sub_hc = (chroma_format_idc === 1) ? 2 : 1;\n crop_unit_x = sub_wc;\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag);\n }\n\n let codec_width = (pic_width_in_mbs_minus1 + 1) * 16;\n let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16);\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x;\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y;\n\n let present_width = Math.ceil(codec_width * sarScale);\n\n gb.destroy();\n gb = null;\n\n return {\n profile_string: profile_string, // baseline, high, high10, ...\n level_string: level_string, // 3, 3.1, 4, 4.1, 5, 5.1, ...\n bit_depth: bit_depth, // 8bit, 10bit, ...\n ref_frames: ref_frames,\n chroma_format: chroma_format, // 4:2:0, 4:2:2, ...\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n sar_ratio: {\n width: sar_width,\n height: sar_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n };\n }\n\n static _skipScalingList(gb, count) {\n let last_scale = 8, next_scale = 8;\n let delta_scale = 0;\n for (let i = 0; i < count; i++) {\n if (next_scale !== 0) {\n delta_scale = gb.readSEG();\n next_scale = (last_scale + delta_scale + 256) % 256;\n }\n last_scale = (next_scale === 0) ? last_scale : next_scale;\n }\n }\n\n static getProfileString(profile_idc) {\n switch (profile_idc) {\n case 66:\n return 'Baseline';\n case 77:\n return 'Main';\n case 88:\n return 'Extended';\n case 100:\n return 'High';\n case 110:\n return 'High10';\n case 122:\n return 'High422';\n case 244:\n return 'High444';\n default:\n return 'Unknown';\n }\n }\n\n static getLevelString(level_idc) {\n return (level_idc / 10).toFixed(1);\n }\n\n static getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0';\n case 422:\n return '4:2:2';\n case 444:\n return '4:4:4';\n default:\n return 'Unknown';\n }\n }\n\n}\n\nexport default SPSParser;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Polyfill from './utils/polyfill.js';\nimport Features from './core/features.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './io/loader.js';\nimport FlvPlayer from './player/flv-player.js';\nimport NativePlayer from './player/native-player.js';\nimport PlayerEvents from './player/player-events.js';\nimport {ErrorTypes, ErrorDetails} from './player/player-errors.js';\nimport LoggingControl from './utils/logging-control.js';\nimport {InvalidArgumentException} from './utils/exception.js';\n\n// here are all the interfaces\n\n// install polyfills\nPolyfill.install();\n\n\n// factory method\nfunction createPlayer(mediaDataSource, optionalConfig) {\n let mds = mediaDataSource;\n if (mds == null || typeof mds !== 'object') {\n throw new InvalidArgumentException('MediaDataSource must be an javascript object!');\n }\n\n if (!mds.hasOwnProperty('type')) {\n throw new InvalidArgumentException('MediaDataSource must has type field to indicate video file type!');\n }\n\n switch (mds.type) {\n case 'flv':\n return new FlvPlayer(mds, optionalConfig);\n default:\n return new NativePlayer(mds, optionalConfig);\n }\n}\n\n\n// feature detection\nfunction isSupported() {\n return Features.supportMSEH264Playback();\n}\n\nfunction getFeatureList() {\n return Features.getFeatureList();\n}\n\n\n// interfaces\nlet flvjs = {};\n\nflvjs.createPlayer = createPlayer;\nflvjs.isSupported = isSupported;\nflvjs.getFeatureList = getFeatureList;\n\nflvjs.BaseLoader = BaseLoader;\nflvjs.LoaderStatus = LoaderStatus;\nflvjs.LoaderErrors = LoaderErrors;\n\nflvjs.Events = PlayerEvents;\nflvjs.ErrorTypes = ErrorTypes;\nflvjs.ErrorDetails = ErrorDetails;\n\nflvjs.FlvPlayer = FlvPlayer;\nflvjs.NativePlayer = NativePlayer;\nflvjs.LoggingControl = LoggingControl;\n\nObject.defineProperty(flvjs, 'version', {\n enumerable: true,\n get: function () {\n // replaced by browserify-versionify transform\n return '__VERSION__';\n }\n});\n\nexport default flvjs;","// entry/index file\n\n// make it compatible with browserify's umd wrapper\nmodule.exports = require('./flv.js').default;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport Browser from '../utils/browser.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './loader.js';\nimport {RuntimeException} from '../utils/exception.js';\n\n/* fetch + stream IO loader. Currently working on chrome 43+.\n * fetch provides a better alternative http API to XMLHttpRequest\n *\n * fetch spec https://fetch.spec.whatwg.org/\n * stream spec https://streams.spec.whatwg.org/\n */\nclass FetchStreamLoader extends BaseLoader {\n\n static isSupported() {\n try {\n // fetch + stream is broken on Microsoft Edge. Disable before build 15048.\n // see https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8196907/\n // Fixed in Jan 10, 2017. Build 15048+ removed from blacklist.\n let isWorkWellEdge = Browser.msedge && Browser.version.minor >= 15048;\n let browserNotBlacklisted = Browser.msedge ? isWorkWellEdge : true;\n return (self.fetch && self.ReadableStream && browserNotBlacklisted);\n } catch (e) {\n return false;\n }\n }\n\n constructor(seekHandler, config) {\n super('fetch-stream-loader');\n this.TAG = 'FetchStreamLoader';\n\n this._seekHandler = seekHandler;\n this._config = config;\n this._needStash = true;\n\n this._requestAbort = false;\n this._contentLength = null;\n this._receivedLength = 0;\n }\n\n destroy() {\n if (this.isWorking()) {\n this.abort();\n }\n super.destroy();\n }\n\n open(dataSource, range) {\n this._dataSource = dataSource;\n this._range = range;\n\n let sourceURL = dataSource.url;\n if (this._config.reuseRedirectedURL && dataSource.redirectedURL != undefined) {\n sourceURL = dataSource.redirectedURL;\n }\n\n let seekConfig = this._seekHandler.getConfig(sourceURL, range);\n\n let headers = new self.Headers();\n\n if (typeof seekConfig.headers === 'object') {\n let configHeaders = seekConfig.headers;\n for (let key in configHeaders) {\n if (configHeaders.hasOwnProperty(key)) {\n headers.append(key, configHeaders[key]);\n }\n }\n }\n\n let params = {\n method: 'GET',\n headers: headers,\n mode: 'cors',\n cache: 'default',\n // The default policy of Fetch API in the whatwg standard\n // Safari incorrectly indicates 'no-referrer' as default policy, fuck it\n referrerPolicy: 'no-referrer-when-downgrade'\n };\n\n // add additional headers\n if (typeof this._config.headers === 'object') {\n for (let key in this._config.headers) {\n headers.append(key, this._config.headers[key]);\n }\n }\n\n // cors is enabled by default\n if (dataSource.cors === false) {\n // no-cors means 'disregard cors policy', which can only be used in ServiceWorker\n params.mode = 'same-origin';\n }\n\n // withCredentials is disabled by default\n if (dataSource.withCredentials) {\n params.credentials = 'include';\n }\n\n // referrerPolicy from config\n if (dataSource.referrerPolicy) {\n params.referrerPolicy = dataSource.referrerPolicy;\n }\n\n this._status = LoaderStatus.kConnecting;\n self.fetch(seekConfig.url, params).then((res) => {\n if (this._requestAbort) {\n this._requestAbort = false;\n this._status = LoaderStatus.kIdle;\n return;\n }\n if (res.ok && (res.status >= 200 && res.status <= 299)) {\n if (res.url !== seekConfig.url) {\n if (this._onURLRedirect) {\n let redirectedURL = this._seekHandler.removeURLParameters(res.url);\n this._onURLRedirect(redirectedURL);\n }\n }\n\n let lengthHeader = res.headers.get('Content-Length');\n if (lengthHeader != null) {\n this._contentLength = parseInt(lengthHeader);\n if (this._contentLength !== 0) {\n if (this._onContentLengthKnown) {\n this._onContentLengthKnown(this._contentLength);\n }\n }\n }\n\n return this._pump.call(this, res.body.getReader());\n } else {\n this._status = LoaderStatus.kError;\n if (this._onError) {\n this._onError(LoaderErrors.HTTP_STATUS_CODE_INVALID, {code: res.status, msg: res.statusText});\n } else {\n throw new RuntimeException('FetchStreamLoader: Http code invalid, ' + res.status + ' ' + res.statusText);\n }\n }\n }).catch((e) => {\n this._status = LoaderStatus.kError;\n if (this._onError) {\n this._onError(LoaderErrors.EXCEPTION, {code: -1, msg: e.message});\n } else {\n throw e;\n }\n });\n }\n\n abort() {\n this._requestAbort = true;\n }\n\n _pump(reader) { // ReadableStreamReader\n return reader.read().then((result) => {\n if (result.done) {\n // First check received length\n if (this._contentLength !== null && this._receivedLength < this._contentLength) {\n // Report Early-EOF\n this._status = LoaderStatus.kError;\n let type = LoaderErrors.EARLY_EOF;\n let info = {code: -1, msg: 'Fetch stream meet Early-EOF'};\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n } else {\n // OK. Download complete\n this._status = LoaderStatus.kComplete;\n if (this._onComplete) {\n this._onComplete(this._range.from, this._range.from + this._receivedLength - 1);\n }\n }\n } else {\n if (this._requestAbort === true) {\n this._requestAbort = false;\n this._status = LoaderStatus.kComplete;\n return reader.cancel();\n }\n\n this._status = LoaderStatus.kBuffering;\n\n let chunk = result.value.buffer;\n let byteStart = this._range.from + this._receivedLength;\n this._receivedLength += chunk.byteLength;\n\n if (this._onDataArrival) {\n this._onDataArrival(chunk, byteStart, this._receivedLength);\n }\n\n this._pump(reader);\n }\n }).catch((e) => {\n if (e.code === 11 && Browser.msedge) { // InvalidStateError on Microsoft Edge\n // Workaround: Edge may throw InvalidStateError after ReadableStreamReader.cancel() call\n // Ignore the unknown exception.\n // Related issue: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/11265202/\n return;\n }\n\n this._status = LoaderStatus.kError;\n let type = 0;\n let info = null;\n\n if ((e.code === 19 || e.message === 'network error') && // NETWORK_ERR\n (this._contentLength === null ||\n (this._contentLength !== null && this._receivedLength < this._contentLength))) {\n type = LoaderErrors.EARLY_EOF;\n info = {code: e.code, msg: 'Fetch stream meet Early-EOF'};\n } else {\n type = LoaderErrors.EXCEPTION;\n info = {code: e.code, msg: e.message};\n }\n\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n });\n }\n\n}\n\nexport default FetchStreamLoader;\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport SpeedSampler from './speed-sampler.js';\nimport {LoaderStatus, LoaderErrors} from './loader.js';\nimport FetchStreamLoader from './fetch-stream-loader.js';\nimport MozChunkedLoader from './xhr-moz-chunked-loader.js';\nimport MSStreamLoader from './xhr-msstream-loader.js';\nimport RangeLoader from './xhr-range-loader.js';\nimport WebSocketLoader from './websocket-loader.js';\nimport RangeSeekHandler from './range-seek-handler.js';\nimport ParamSeekHandler from './param-seek-handler.js';\nimport {RuntimeException, IllegalStateException, InvalidArgumentException} from '../utils/exception.js';\n\n/**\n * DataSource: {\n * url: string,\n * filesize: number,\n * cors: boolean,\n * withCredentials: boolean\n * }\n * \n */\n\n// Manage IO Loaders\nclass IOController {\n\n constructor(dataSource, config, extraData) {\n this.TAG = 'IOController';\n\n this._config = config;\n this._extraData = extraData;\n\n this._stashInitialSize = 1024 * 384; // default initial size: 384KB\n if (config.stashInitialSize != undefined && config.stashInitialSize > 0) {\n // apply from config\n this._stashInitialSize = config.stashInitialSize;\n }\n\n this._stashUsed = 0;\n this._stashSize = this._stashInitialSize;\n this._bufferSize = 1024 * 1024 * 3; // initial size: 3MB\n this._stashBuffer = new ArrayBuffer(this._bufferSize);\n this._stashByteStart = 0;\n this._enableStash = true;\n if (config.enableStashBuffer === false) {\n this._enableStash = false;\n }\n\n this._loader = null;\n this._loaderClass = null;\n this._seekHandler = null;\n\n this._dataSource = dataSource;\n this._isWebSocketURL = /wss?:\\/\\/(.+?)/.test(dataSource.url);\n this._refTotalLength = dataSource.filesize ? dataSource.filesize : null;\n this._totalLength = this._refTotalLength;\n this._fullRequestFlag = false;\n this._currentRange = null;\n this._redirectedURL = null;\n\n this._speedNormalized = 0;\n this._speedSampler = new SpeedSampler();\n this._speedNormalizeList = [64, 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096];\n\n this._isEarlyEofReconnecting = false;\n\n this._paused = false;\n this._resumeFrom = 0;\n\n this._onDataArrival = null;\n this._onSeeked = null;\n this._onError = null;\n this._onComplete = null;\n this._onRedirect = null;\n this._onRecoveredEarlyEof = null;\n\n this._selectSeekHandler();\n this._selectLoader();\n this._createLoader();\n }\n\n destroy() {\n if (this._loader.isWorking()) {\n this._loader.abort();\n }\n this._loader.destroy();\n this._loader = null;\n this._loaderClass = null;\n this._dataSource = null;\n this._stashBuffer = null;\n this._stashUsed = this._stashSize = this._bufferSize = this._stashByteStart = 0;\n this._currentRange = null;\n this._speedSampler = null;\n\n this._isEarlyEofReconnecting = false;\n\n this._onDataArrival = null;\n this._onSeeked = null;\n this._onError = null;\n this._onComplete = null;\n this._onRedirect = null;\n this._onRecoveredEarlyEof = null;\n\n this._extraData = null;\n }\n\n isWorking() {\n return this._loader && this._loader.isWorking() && !this._paused;\n }\n\n isPaused() {\n return this._paused;\n }\n\n get status() {\n return this._loader.status;\n }\n\n get extraData() {\n return this._extraData;\n }\n\n set extraData(data) {\n this._extraData = data;\n }\n\n // prototype: function onDataArrival(chunks: ArrayBuffer, byteStart: number): number\n get onDataArrival() {\n return this._onDataArrival;\n }\n\n set onDataArrival(callback) {\n this._onDataArrival = callback;\n }\n\n get onSeeked() {\n return this._onSeeked;\n }\n\n set onSeeked(callback) {\n this._onSeeked = callback;\n }\n\n // prototype: function onError(type: number, info: {code: number, msg: string}): void\n get onError() {\n return this._onError;\n }\n\n set onError(callback) {\n this._onError = callback;\n }\n\n get onComplete() {\n return this._onComplete;\n }\n\n set onComplete(callback) {\n this._onComplete = callback;\n }\n\n get onRedirect() {\n return this._onRedirect;\n }\n\n set onRedirect(callback) {\n this._onRedirect = callback;\n }\n\n get onRecoveredEarlyEof() {\n return this._onRecoveredEarlyEof;\n }\n\n set onRecoveredEarlyEof(callback) {\n this._onRecoveredEarlyEof = callback;\n }\n\n get currentURL() {\n return this._dataSource.url;\n }\n\n get hasRedirect() {\n return (this._redirectedURL != null || this._dataSource.redirectedURL != undefined);\n }\n\n get currentRedirectedURL() {\n return this._redirectedURL || this._dataSource.redirectedURL;\n }\n\n // in KB/s\n get currentSpeed() {\n if (this._loaderClass === RangeLoader) {\n // SpeedSampler is inaccuracy if loader is RangeLoader\n return this._loader.currentSpeed;\n }\n return this._speedSampler.lastSecondKBps;\n }\n\n get loaderType() {\n return this._loader.type;\n }\n\n _selectSeekHandler() {\n let config = this._config;\n\n if (config.seekType === 'range') {\n this._seekHandler = new RangeSeekHandler(this._config.rangeLoadZeroStart);\n } else if (config.seekType === 'param') {\n let paramStart = config.seekParamStart || 'bstart';\n let paramEnd = config.seekParamEnd || 'bend';\n\n this._seekHandler = new ParamSeekHandler(paramStart, paramEnd);\n } else if (config.seekType === 'custom') {\n if (typeof config.customSeekHandler !== 'function') {\n throw new InvalidArgumentException('Custom seekType specified in config but invalid customSeekHandler!');\n }\n this._seekHandler = new config.customSeekHandler();\n } else {\n throw new InvalidArgumentException(`Invalid seekType in config: ${config.seekType}`);\n }\n }\n\n _selectLoader() {\n if (this._config.customLoader != null) {\n this._loaderClass = this._config.customLoader;\n } else if (this._isWebSocketURL) {\n this._loaderClass = WebSocketLoader;\n } else if (FetchStreamLoader.isSupported()) {\n this._loaderClass = FetchStreamLoader;\n } else if (MozChunkedLoader.isSupported()) {\n this._loaderClass = MozChunkedLoader;\n } else if (RangeLoader.isSupported()) {\n this._loaderClass = RangeLoader;\n } else {\n throw new RuntimeException('Your browser doesn\\'t support xhr with arraybuffer responseType!');\n }\n }\n\n _createLoader() {\n this._loader = new this._loaderClass(this._seekHandler, this._config);\n if (this._loader.needStashBuffer === false) {\n this._enableStash = false;\n }\n this._loader.onContentLengthKnown = this._onContentLengthKnown.bind(this);\n this._loader.onURLRedirect = this._onURLRedirect.bind(this);\n this._loader.onDataArrival = this._onLoaderChunkArrival.bind(this);\n this._loader.onComplete = this._onLoaderComplete.bind(this);\n this._loader.onError = this._onLoaderError.bind(this);\n }\n\n open(optionalFrom) {\n this._currentRange = {from: 0, to: -1};\n if (optionalFrom) {\n this._currentRange.from = optionalFrom;\n }\n\n this._speedSampler.reset();\n if (!optionalFrom) {\n this._fullRequestFlag = true;\n }\n\n this._loader.open(this._dataSource, Object.assign({}, this._currentRange));\n }\n\n abort() {\n this._loader.abort();\n\n if (this._paused) {\n this._paused = false;\n this._resumeFrom = 0;\n }\n }\n\n pause() {\n if (this.isWorking()) {\n this._loader.abort();\n\n if (this._stashUsed !== 0) {\n this._resumeFrom = this._stashByteStart;\n this._currentRange.to = this._stashByteStart - 1;\n } else {\n this._resumeFrom = this._currentRange.to + 1;\n }\n this._stashUsed = 0;\n this._stashByteStart = 0;\n this._paused = true;\n }\n }\n\n resume() {\n if (this._paused) {\n this._paused = false;\n let bytes = this._resumeFrom;\n this._resumeFrom = 0;\n this._internalSeek(bytes, true);\n }\n }\n\n seek(bytes) {\n this._paused = false;\n this._stashUsed = 0;\n this._stashByteStart = 0;\n this._internalSeek(bytes, true);\n }\n\n /**\n * When seeking request is from media seeking, unconsumed stash data should be dropped\n * However, stash data shouldn't be dropped if seeking requested from http reconnection\n *\n * @dropUnconsumed: Ignore and discard all unconsumed data in stash buffer\n */\n _internalSeek(bytes, dropUnconsumed) {\n if (this._loader.isWorking()) {\n this._loader.abort();\n }\n\n // dispatch & flush stash buffer before seek\n this._flushStashBuffer(dropUnconsumed);\n\n this._loader.destroy();\n this._loader = null;\n\n let requestRange = {from: bytes, to: -1};\n this._currentRange = {from: requestRange.from, to: -1};\n\n this._speedSampler.reset();\n this._stashSize = this._stashInitialSize;\n this._createLoader();\n this._loader.open(this._dataSource, requestRange);\n\n if (this._onSeeked) {\n this._onSeeked();\n }\n }\n\n updateUrl(url) {\n if (!url || typeof url !== 'string' || url.length === 0) {\n throw new InvalidArgumentException('Url must be a non-empty string!');\n }\n\n this._dataSource.url = url;\n\n // TODO: replace with new url\n }\n\n _expandBuffer(expectedBytes) {\n let bufferNewSize = this._stashSize;\n while (bufferNewSize + 1024 * 1024 * 1 < expectedBytes) {\n bufferNewSize *= 2;\n }\n\n bufferNewSize += 1024 * 1024 * 1; // bufferSize = stashSize + 1MB\n if (bufferNewSize === this._bufferSize) {\n return;\n }\n\n let newBuffer = new ArrayBuffer(bufferNewSize);\n\n if (this._stashUsed > 0) { // copy existing data into new buffer\n let stashOldArray = new Uint8Array(this._stashBuffer, 0, this._stashUsed);\n let stashNewArray = new Uint8Array(newBuffer, 0, bufferNewSize);\n stashNewArray.set(stashOldArray, 0);\n }\n\n this._stashBuffer = newBuffer;\n this._bufferSize = bufferNewSize;\n }\n\n _normalizeSpeed(input) {\n let list = this._speedNormalizeList;\n let last = list.length - 1;\n let mid = 0;\n let lbound = 0;\n let ubound = last;\n\n if (input < list[0]) {\n return list[0];\n }\n\n // binary search\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2);\n if (mid === last || (input >= list[mid] && input < list[mid + 1])) {\n return list[mid];\n } else if (list[mid] < input) {\n lbound = mid + 1;\n } else {\n ubound = mid - 1;\n }\n }\n }\n\n _adjustStashSize(normalized) {\n let stashSizeKB = 0;\n\n if (this._config.isLive) {\n // live stream: always use single normalized speed for size of stashSizeKB\n stashSizeKB = normalized;\n } else {\n if (normalized < 512) {\n stashSizeKB = normalized;\n } else if (normalized >= 512 && normalized <= 1024) {\n stashSizeKB = Math.floor(normalized * 1.5);\n } else {\n stashSizeKB = normalized * 2;\n }\n }\n\n if (stashSizeKB > 8192) {\n stashSizeKB = 8192;\n }\n\n let bufferSize = stashSizeKB * 1024 + 1024 * 1024 * 1; // stashSize + 1MB\n if (this._bufferSize < bufferSize) {\n this._expandBuffer(bufferSize);\n }\n this._stashSize = stashSizeKB * 1024;\n }\n\n _dispatchChunks(chunks, byteStart) {\n this._currentRange.to = byteStart + chunks.byteLength - 1;\n return this._onDataArrival(chunks, byteStart);\n }\n\n _onURLRedirect(redirectedURL) {\n this._redirectedURL = redirectedURL;\n if (this._onRedirect) {\n this._onRedirect(redirectedURL);\n }\n }\n\n _onContentLengthKnown(contentLength) {\n if (contentLength && this._fullRequestFlag) {\n this._totalLength = contentLength;\n this._fullRequestFlag = false;\n }\n }\n\n _onLoaderChunkArrival(chunk, byteStart, receivedLength) {\n if (!this._onDataArrival) {\n throw new IllegalStateException('IOController: No existing consumer (onDataArrival) callback!');\n }\n if (this._paused) {\n return;\n }\n if (this._isEarlyEofReconnecting) {\n // Auto-reconnect for EarlyEof succeed, notify to upper-layer by callback\n this._isEarlyEofReconnecting = false;\n if (this._onRecoveredEarlyEof) {\n this._onRecoveredEarlyEof();\n }\n }\n\n this._speedSampler.addBytes(chunk.byteLength);\n\n // adjust stash buffer size according to network speed dynamically\n let KBps = this._speedSampler.lastSecondKBps;\n if (KBps !== 0) {\n let normalized = this._normalizeSpeed(KBps);\n if (this._speedNormalized !== normalized) {\n this._speedNormalized = normalized;\n this._adjustStashSize(normalized);\n }\n }\n\n if (!this._enableStash) { // disable stash\n if (this._stashUsed === 0) {\n // dispatch chunk directly to consumer;\n // check ret value (consumed bytes) and stash unconsumed to stashBuffer\n let consumed = this._dispatchChunks(chunk, byteStart);\n if (consumed < chunk.byteLength) { // unconsumed data remain.\n let remain = chunk.byteLength - consumed;\n if (remain > this._bufferSize) {\n this._expandBuffer(remain);\n }\n let stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n stashArray.set(new Uint8Array(chunk, consumed), 0);\n this._stashUsed += remain;\n this._stashByteStart = byteStart + consumed;\n }\n } else {\n // else: Merge chunk into stashBuffer, and dispatch stashBuffer to consumer.\n if (this._stashUsed + chunk.byteLength > this._bufferSize) {\n this._expandBuffer(this._stashUsed + chunk.byteLength);\n }\n let stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n stashArray.set(new Uint8Array(chunk), this._stashUsed);\n this._stashUsed += chunk.byteLength;\n let consumed = this._dispatchChunks(this._stashBuffer.slice(0, this._stashUsed), this._stashByteStart);\n if (consumed < this._stashUsed && consumed > 0) { // unconsumed data remain\n let remainArray = new Uint8Array(this._stashBuffer, consumed);\n stashArray.set(remainArray, 0);\n }\n this._stashUsed -= consumed;\n this._stashByteStart += consumed;\n }\n } else { // enable stash\n if (this._stashUsed === 0 && this._stashByteStart === 0) { // seeked? or init chunk?\n // This is the first chunk after seek action\n this._stashByteStart = byteStart;\n }\n if (this._stashUsed + chunk.byteLength <= this._stashSize) {\n // just stash\n let stashArray = new Uint8Array(this._stashBuffer, 0, this._stashSize);\n stashArray.set(new Uint8Array(chunk), this._stashUsed);\n this._stashUsed += chunk.byteLength;\n } else { // stashUsed + chunkSize > stashSize, size limit exceeded\n let stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n if (this._stashUsed > 0) { // There're stash datas in buffer\n // dispatch the whole stashBuffer, and stash remain data\n // then append chunk to stashBuffer (stash)\n let buffer = this._stashBuffer.slice(0, this._stashUsed);\n let consumed = this._dispatchChunks(buffer, this._stashByteStart);\n if (consumed < buffer.byteLength) {\n if (consumed > 0) {\n let remainArray = new Uint8Array(buffer, consumed);\n stashArray.set(remainArray, 0);\n this._stashUsed = remainArray.byteLength;\n this._stashByteStart += consumed;\n }\n } else {\n this._stashUsed = 0;\n this._stashByteStart += consumed;\n }\n if (this._stashUsed + chunk.byteLength > this._bufferSize) {\n this._expandBuffer(this._stashUsed + chunk.byteLength);\n stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n }\n stashArray.set(new Uint8Array(chunk), this._stashUsed);\n this._stashUsed += chunk.byteLength;\n } else { // stash buffer empty, but chunkSize > stashSize (oh, holy shit)\n // dispatch chunk directly and stash remain data\n let consumed = this._dispatchChunks(chunk, byteStart);\n if (consumed < chunk.byteLength) {\n let remain = chunk.byteLength - consumed;\n if (remain > this._bufferSize) {\n this._expandBuffer(remain);\n stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n }\n stashArray.set(new Uint8Array(chunk, consumed), 0);\n this._stashUsed += remain;\n this._stashByteStart = byteStart + consumed;\n }\n }\n }\n }\n }\n\n _flushStashBuffer(dropUnconsumed) {\n if (this._stashUsed > 0) {\n let buffer = this._stashBuffer.slice(0, this._stashUsed);\n let consumed = this._dispatchChunks(buffer, this._stashByteStart);\n let remain = buffer.byteLength - consumed;\n\n if (consumed < buffer.byteLength) {\n if (dropUnconsumed) {\n Log.w(this.TAG, `${remain} bytes unconsumed data remain when flush buffer, dropped`);\n } else {\n if (consumed > 0) {\n let stashArray = new Uint8Array(this._stashBuffer, 0, this._bufferSize);\n let remainArray = new Uint8Array(buffer, consumed);\n stashArray.set(remainArray, 0);\n this._stashUsed = remainArray.byteLength;\n this._stashByteStart += consumed;\n }\n return 0;\n }\n }\n this._stashUsed = 0;\n this._stashByteStart = 0;\n return remain;\n }\n return 0;\n }\n\n _onLoaderComplete(from, to) {\n // Force-flush stash buffer, and drop unconsumed data\n this._flushStashBuffer(true);\n\n if (this._onComplete) {\n this._onComplete(this._extraData);\n }\n }\n\n _onLoaderError(type, data) {\n Log.e(this.TAG, `Loader error, code = ${data.code}, msg = ${data.msg}`);\n\n this._flushStashBuffer(false);\n\n if (this._isEarlyEofReconnecting) {\n // Auto-reconnect for EarlyEof failed, throw UnrecoverableEarlyEof error to upper-layer\n this._isEarlyEofReconnecting = false;\n type = LoaderErrors.UNRECOVERABLE_EARLY_EOF;\n }\n\n switch (type) {\n case LoaderErrors.EARLY_EOF: {\n if (!this._config.isLive) {\n // Do internal http reconnect if not live stream\n if (this._totalLength) {\n let nextFrom = this._currentRange.to + 1;\n if (nextFrom < this._totalLength) {\n Log.w(this.TAG, 'Connection lost, trying reconnect...');\n this._isEarlyEofReconnecting = true;\n this._internalSeek(nextFrom, false);\n }\n return;\n }\n // else: We don't know totalLength, throw UnrecoverableEarlyEof\n }\n // live stream: throw UnrecoverableEarlyEof error to upper-layer\n type = LoaderErrors.UNRECOVERABLE_EARLY_EOF;\n break;\n }\n case LoaderErrors.UNRECOVERABLE_EARLY_EOF:\n case LoaderErrors.CONNECTING_TIMEOUT:\n case LoaderErrors.HTTP_STATUS_CODE_INVALID:\n case LoaderErrors.EXCEPTION:\n break;\n }\n\n if (this._onError) {\n this._onError(type, data);\n } else {\n throw new RuntimeException('IOException: ' + data.msg);\n }\n }\n\n}\n\nexport default IOController;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {NotImplementedException} from '../utils/exception.js';\n\nexport const LoaderStatus = {\n kIdle: 0,\n kConnecting: 1,\n kBuffering: 2,\n kError: 3,\n kComplete: 4\n};\n\nexport const LoaderErrors = {\n OK: 'OK',\n EXCEPTION: 'Exception',\n HTTP_STATUS_CODE_INVALID: 'HttpStatusCodeInvalid',\n CONNECTING_TIMEOUT: 'ConnectingTimeout',\n EARLY_EOF: 'EarlyEof',\n UNRECOVERABLE_EARLY_EOF: 'UnrecoverableEarlyEof'\n};\n\n/* Loader has callbacks which have following prototypes:\n * function onContentLengthKnown(contentLength: number): void\n * function onURLRedirect(url: string): void\n * function onDataArrival(chunk: ArrayBuffer, byteStart: number, receivedLength: number): void\n * function onError(errorType: number, errorInfo: {code: number, msg: string}): void\n * function onComplete(rangeFrom: number, rangeTo: number): void\n */\nexport class BaseLoader {\n\n constructor(typeName) {\n this._type = typeName || 'undefined';\n this._status = LoaderStatus.kIdle;\n this._needStash = false;\n // callbacks\n this._onContentLengthKnown = null;\n this._onURLRedirect = null;\n this._onDataArrival = null;\n this._onError = null;\n this._onComplete = null;\n }\n\n destroy() {\n this._status = LoaderStatus.kIdle;\n this._onContentLengthKnown = null;\n this._onURLRedirect = null;\n this._onDataArrival = null;\n this._onError = null;\n this._onComplete = null;\n }\n\n isWorking() {\n return this._status === LoaderStatus.kConnecting || this._status === LoaderStatus.kBuffering;\n }\n\n get type() {\n return this._type;\n }\n\n get status() {\n return this._status;\n }\n\n get needStashBuffer() {\n return this._needStash;\n }\n\n get onContentLengthKnown() {\n return this._onContentLengthKnown;\n }\n\n set onContentLengthKnown(callback) {\n this._onContentLengthKnown = callback;\n }\n\n get onURLRedirect() {\n return this._onURLRedirect;\n }\n\n set onURLRedirect(callback) {\n this._onURLRedirect = callback;\n }\n\n get onDataArrival() {\n return this._onDataArrival;\n }\n\n set onDataArrival(callback) {\n this._onDataArrival = callback;\n }\n\n get onError() {\n return this._onError;\n }\n\n set onError(callback) {\n this._onError = callback;\n }\n\n get onComplete() {\n return this._onComplete;\n }\n\n set onComplete(callback) {\n this._onComplete = callback;\n }\n\n // pure virtual\n open(dataSource, range) {\n throw new NotImplementedException('Unimplemented abstract function!');\n }\n\n abort() {\n throw new NotImplementedException('Unimplemented abstract function!');\n }\n\n\n}","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass ParamSeekHandler {\n\n constructor(paramStart, paramEnd) {\n this._startName = paramStart;\n this._endName = paramEnd;\n }\n\n getConfig(baseUrl, range) {\n let url = baseUrl;\n\n if (range.from !== 0 || range.to !== -1) {\n let needAnd = true;\n if (url.indexOf('?') === -1) {\n url += '?';\n needAnd = false;\n }\n\n if (needAnd) {\n url += '&';\n }\n\n url += `${this._startName}=${range.from.toString()}`;\n\n if (range.to !== -1) {\n url += `&${this._endName}=${range.to.toString()}`;\n }\n }\n\n return {\n url: url,\n headers: {}\n };\n }\n\n removeURLParameters(seekedURL) {\n let baseURL = seekedURL.split('?')[0];\n let params = undefined;\n\n let queryIndex = seekedURL.indexOf('?');\n if (queryIndex !== -1) {\n params = seekedURL.substring(queryIndex + 1);\n }\n\n let resultParams = '';\n\n if (params != undefined && params.length > 0) {\n let pairs = params.split('&');\n\n for (let i = 0; i < pairs.length; i++) {\n let pair = pairs[i].split('=');\n let requireAnd = (i > 0);\n\n if (pair[0] !== this._startName && pair[0] !== this._endName) {\n if (requireAnd) {\n resultParams += '&';\n }\n resultParams += pairs[i];\n }\n }\n }\n\n return (resultParams.length === 0) ? baseURL : baseURL + '?' + resultParams;\n }\n\n}\n\nexport default ParamSeekHandler;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass RangeSeekHandler {\n\n constructor(zeroStart) {\n this._zeroStart = zeroStart || false;\n }\n\n getConfig(url, range) {\n let headers = {};\n\n if (range.from !== 0 || range.to !== -1) {\n let param;\n if (range.to !== -1) {\n param = `bytes=${range.from.toString()}-${range.to.toString()}`;\n } else {\n param = `bytes=${range.from.toString()}-`;\n }\n headers['Range'] = param;\n } else if (this._zeroStart) {\n headers['Range'] = 'bytes=0-';\n }\n\n return {\n url: url,\n headers: headers\n };\n }\n\n removeURLParameters(seekedURL) {\n return seekedURL;\n }\n\n}\n\nexport default RangeSeekHandler;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Utility class to calculate realtime network I/O speed\nclass SpeedSampler {\n\n constructor() {\n // milliseconds\n this._firstCheckpoint = 0;\n this._lastCheckpoint = 0;\n this._intervalBytes = 0;\n this._totalBytes = 0;\n this._lastSecondBytes = 0;\n\n // compatibility detection\n if (self.performance && self.performance.now) {\n this._now = self.performance.now.bind(self.performance);\n } else {\n this._now = Date.now;\n }\n }\n\n reset() {\n this._firstCheckpoint = this._lastCheckpoint = 0;\n this._totalBytes = this._intervalBytes = 0;\n this._lastSecondBytes = 0;\n }\n\n addBytes(bytes) {\n if (this._firstCheckpoint === 0) {\n this._firstCheckpoint = this._now();\n this._lastCheckpoint = this._firstCheckpoint;\n this._intervalBytes += bytes;\n this._totalBytes += bytes;\n } else if (this._now() - this._lastCheckpoint < 1000) {\n this._intervalBytes += bytes;\n this._totalBytes += bytes;\n } else { // duration >= 1000\n this._lastSecondBytes = this._intervalBytes;\n this._intervalBytes = bytes;\n this._totalBytes += bytes;\n this._lastCheckpoint = this._now();\n }\n }\n\n get currentKBps() {\n this.addBytes(0);\n\n let durationSeconds = (this._now() - this._lastCheckpoint) / 1000;\n if (durationSeconds == 0) durationSeconds = 1;\n return (this._intervalBytes / durationSeconds) / 1024;\n }\n\n get lastSecondKBps() {\n this.addBytes(0);\n\n if (this._lastSecondBytes !== 0) {\n return this._lastSecondBytes / 1024;\n } else { // lastSecondBytes === 0\n if (this._now() - this._lastCheckpoint >= 500) {\n // if time interval since last checkpoint has exceeded 500ms\n // the speed is nearly accurate\n return this.currentKBps;\n } else {\n // We don't know\n return 0;\n }\n }\n }\n\n get averageKBps() {\n let durationSeconds = (this._now() - this._firstCheckpoint) / 1000;\n return (this._totalBytes / durationSeconds) / 1024;\n }\n\n}\n\nexport default SpeedSampler;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './loader.js';\nimport {RuntimeException} from '../utils/exception.js';\n\n// For FLV over WebSocket live stream\nclass WebSocketLoader extends BaseLoader {\n\n static isSupported() {\n try {\n return (typeof self.WebSocket !== 'undefined');\n } catch (e) {\n return false;\n }\n }\n\n constructor() {\n super('websocket-loader');\n this.TAG = 'WebSocketLoader';\n\n this._needStash = true;\n\n this._ws = null;\n this._requestAbort = false;\n this._receivedLength = 0;\n }\n\n destroy() {\n if (this._ws) {\n this.abort();\n }\n super.destroy();\n }\n\n open(dataSource) {\n try {\n let ws = this._ws = new self.WebSocket(dataSource.url);\n ws.binaryType = 'arraybuffer';\n ws.onopen = this._onWebSocketOpen.bind(this);\n ws.onclose = this._onWebSocketClose.bind(this);\n ws.onmessage = this._onWebSocketMessage.bind(this);\n ws.onerror = this._onWebSocketError.bind(this);\n\n this._status = LoaderStatus.kConnecting;\n } catch (e) {\n this._status = LoaderStatus.kError;\n\n let info = {code: e.code, msg: e.message};\n\n if (this._onError) {\n this._onError(LoaderErrors.EXCEPTION, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n }\n\n abort() {\n let ws = this._ws;\n if (ws && (ws.readyState === 0 || ws.readyState === 1)) { // CONNECTING || OPEN\n this._requestAbort = true;\n ws.close();\n }\n\n this._ws = null;\n this._status = LoaderStatus.kComplete;\n }\n\n _onWebSocketOpen(e) {\n this._status = LoaderStatus.kBuffering;\n }\n\n _onWebSocketClose(e) {\n if (this._requestAbort === true) {\n this._requestAbort = false;\n return;\n }\n\n this._status = LoaderStatus.kComplete;\n\n if (this._onComplete) {\n this._onComplete(0, this._receivedLength - 1);\n }\n }\n\n _onWebSocketMessage(e) {\n if (e.data instanceof ArrayBuffer) {\n this._dispatchArrayBuffer(e.data);\n } else if (e.data instanceof Blob) {\n let reader = new FileReader();\n reader.onload = () => {\n this._dispatchArrayBuffer(reader.result);\n };\n reader.readAsArrayBuffer(e.data);\n } else {\n this._status = LoaderStatus.kError;\n let info = {code: -1, msg: 'Unsupported WebSocket message type: ' + e.data.constructor.name};\n\n if (this._onError) {\n this._onError(LoaderErrors.EXCEPTION, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n }\n\n _dispatchArrayBuffer(arraybuffer) {\n let chunk = arraybuffer;\n let byteStart = this._receivedLength;\n this._receivedLength += chunk.byteLength;\n\n if (this._onDataArrival) {\n this._onDataArrival(chunk, byteStart, this._receivedLength);\n }\n }\n\n _onWebSocketError(e) {\n this._status = LoaderStatus.kError;\n\n let info = {\n code: e.code,\n msg: e.message\n };\n\n if (this._onError) {\n this._onError(LoaderErrors.EXCEPTION, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n\n}\n\nexport default WebSocketLoader;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './loader.js';\nimport {RuntimeException} from '../utils/exception.js';\n\n// For FireFox browser which supports `xhr.responseType = 'moz-chunked-arraybuffer'`\nclass MozChunkedLoader extends BaseLoader {\n\n static isSupported() {\n try {\n let xhr = new XMLHttpRequest();\n // Firefox 37- requires .open() to be called before setting responseType\n xhr.open('GET', 'https://example.com', true);\n xhr.responseType = 'moz-chunked-arraybuffer';\n return (xhr.responseType === 'moz-chunked-arraybuffer');\n } catch (e) {\n Log.w('MozChunkedLoader', e.message);\n return false;\n }\n }\n\n constructor(seekHandler, config) {\n super('xhr-moz-chunked-loader');\n this.TAG = 'MozChunkedLoader';\n\n this._seekHandler = seekHandler;\n this._config = config;\n this._needStash = true;\n\n this._xhr = null;\n this._requestAbort = false;\n this._contentLength = null;\n this._receivedLength = 0;\n }\n\n destroy() {\n if (this.isWorking()) {\n this.abort();\n }\n if (this._xhr) {\n this._xhr.onreadystatechange = null;\n this._xhr.onprogress = null;\n this._xhr.onloadend = null;\n this._xhr.onerror = null;\n this._xhr = null;\n }\n super.destroy();\n }\n\n open(dataSource, range) {\n this._dataSource = dataSource;\n this._range = range;\n\n let sourceURL = dataSource.url;\n if (this._config.reuseRedirectedURL && dataSource.redirectedURL != undefined) {\n sourceURL = dataSource.redirectedURL;\n }\n\n let seekConfig = this._seekHandler.getConfig(sourceURL, range);\n this._requestURL = seekConfig.url;\n\n let xhr = this._xhr = new XMLHttpRequest();\n xhr.open('GET', seekConfig.url, true);\n xhr.responseType = 'moz-chunked-arraybuffer';\n xhr.onreadystatechange = this._onReadyStateChange.bind(this);\n xhr.onprogress = this._onProgress.bind(this);\n xhr.onloadend = this._onLoadEnd.bind(this);\n xhr.onerror = this._onXhrError.bind(this);\n\n // cors is auto detected and enabled by xhr\n\n // withCredentials is disabled by default\n if (dataSource.withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (typeof seekConfig.headers === 'object') {\n let headers = seekConfig.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n // add additional headers\n if (typeof this._config.headers === 'object') {\n let headers = this._config.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n this._status = LoaderStatus.kConnecting;\n xhr.send();\n }\n\n abort() {\n this._requestAbort = true;\n if (this._xhr) {\n this._xhr.abort();\n }\n this._status = LoaderStatus.kComplete;\n }\n\n _onReadyStateChange(e) {\n let xhr = e.target;\n\n if (xhr.readyState === 2) { // HEADERS_RECEIVED\n if (xhr.responseURL != undefined && xhr.responseURL !== this._requestURL) {\n if (this._onURLRedirect) {\n let redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL);\n this._onURLRedirect(redirectedURL);\n }\n }\n\n if (xhr.status !== 0 && (xhr.status < 200 || xhr.status > 299)) {\n this._status = LoaderStatus.kError;\n if (this._onError) {\n this._onError(LoaderErrors.HTTP_STATUS_CODE_INVALID, {code: xhr.status, msg: xhr.statusText});\n } else {\n throw new RuntimeException('MozChunkedLoader: Http code invalid, ' + xhr.status + ' ' + xhr.statusText);\n }\n } else {\n this._status = LoaderStatus.kBuffering;\n }\n }\n }\n\n _onProgress(e) {\n if (this._status === LoaderStatus.kError) {\n // Ignore error response\n return;\n }\n\n if (this._contentLength === null) {\n if (e.total !== null && e.total !== 0) {\n this._contentLength = e.total;\n if (this._onContentLengthKnown) {\n this._onContentLengthKnown(this._contentLength);\n }\n }\n }\n\n let chunk = e.target.response;\n let byteStart = this._range.from + this._receivedLength;\n this._receivedLength += chunk.byteLength;\n\n if (this._onDataArrival) {\n this._onDataArrival(chunk, byteStart, this._receivedLength);\n }\n }\n\n _onLoadEnd(e) {\n if (this._requestAbort === true) {\n this._requestAbort = false;\n return;\n } else if (this._status === LoaderStatus.kError) {\n return;\n }\n\n this._status = LoaderStatus.kComplete;\n if (this._onComplete) {\n this._onComplete(this._range.from, this._range.from + this._receivedLength - 1);\n }\n }\n\n _onXhrError(e) {\n this._status = LoaderStatus.kError;\n let type = 0;\n let info = null;\n\n if (this._contentLength && e.loaded < this._contentLength) {\n type = LoaderErrors.EARLY_EOF;\n info = {code: -1, msg: 'Moz-Chunked stream meet Early-Eof'};\n } else {\n type = LoaderErrors.EXCEPTION;\n info = {code: -1, msg: e.constructor.name + ' ' + e.type};\n }\n\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n\n}\n\nexport default MozChunkedLoader;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './loader.js';\nimport {RuntimeException} from '../utils/exception.js';\n\n/* Notice: ms-stream may cause IE/Edge browser crash if seek too frequently!!!\n * The browser may crash in wininet.dll. Disable for now.\n *\n * For IE11/Edge browser by microsoft which supports `xhr.responseType = 'ms-stream'`\n * Notice that ms-stream API sucks. The buffer is always expanding along with downloading.\n *\n * We need to abort the xhr if buffer size exceeded limit size (e.g. 16 MiB), then do reconnect.\n * in order to release previous ArrayBuffer to avoid memory leak\n *\n * Otherwise, the ArrayBuffer will increase to a terrible size that equals final file size.\n */\nclass MSStreamLoader extends BaseLoader {\n\n static isSupported() {\n try {\n if (typeof self.MSStream === 'undefined' || typeof self.MSStreamReader === 'undefined') {\n return false;\n }\n\n let xhr = new XMLHttpRequest();\n xhr.open('GET', 'https://example.com', true);\n xhr.responseType = 'ms-stream';\n return (xhr.responseType === 'ms-stream');\n } catch (e) {\n Log.w('MSStreamLoader', e.message);\n return false;\n }\n }\n\n constructor(seekHandler, config) {\n super('xhr-msstream-loader');\n this.TAG = 'MSStreamLoader';\n\n this._seekHandler = seekHandler;\n this._config = config;\n this._needStash = true;\n\n this._xhr = null;\n this._reader = null; // MSStreamReader\n\n this._totalRange = null;\n this._currentRange = null;\n\n this._currentRequestURL = null;\n this._currentRedirectedURL = null;\n\n this._contentLength = null;\n this._receivedLength = 0;\n\n this._bufferLimit = 16 * 1024 * 1024; // 16MB\n this._lastTimeBufferSize = 0;\n this._isReconnecting = false;\n }\n\n destroy() {\n if (this.isWorking()) {\n this.abort();\n }\n if (this._reader) {\n this._reader.onprogress = null;\n this._reader.onload = null;\n this._reader.onerror = null;\n this._reader = null;\n }\n if (this._xhr) {\n this._xhr.onreadystatechange = null;\n this._xhr = null;\n }\n super.destroy();\n }\n\n open(dataSource, range) {\n this._internalOpen(dataSource, range, false);\n }\n\n _internalOpen(dataSource, range, isSubrange) {\n this._dataSource = dataSource;\n\n if (!isSubrange) {\n this._totalRange = range;\n } else {\n this._currentRange = range;\n }\n\n let sourceURL = dataSource.url;\n if (this._config.reuseRedirectedURL) {\n if (this._currentRedirectedURL != undefined) {\n sourceURL = this._currentRedirectedURL;\n } else if (dataSource.redirectedURL != undefined) {\n sourceURL = dataSource.redirectedURL;\n }\n }\n\n let seekConfig = this._seekHandler.getConfig(sourceURL, range);\n this._currentRequestURL = seekConfig.url;\n\n let reader = this._reader = new self.MSStreamReader();\n reader.onprogress = this._msrOnProgress.bind(this);\n reader.onload = this._msrOnLoad.bind(this);\n reader.onerror = this._msrOnError.bind(this);\n\n let xhr = this._xhr = new XMLHttpRequest();\n xhr.open('GET', seekConfig.url, true);\n xhr.responseType = 'ms-stream';\n xhr.onreadystatechange = this._xhrOnReadyStateChange.bind(this);\n xhr.onerror = this._xhrOnError.bind(this);\n\n if (dataSource.withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (typeof seekConfig.headers === 'object') {\n let headers = seekConfig.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n // add additional headers\n if (typeof this._config.headers === 'object') {\n let headers = this._config.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n if (this._isReconnecting) {\n this._isReconnecting = false;\n } else {\n this._status = LoaderStatus.kConnecting;\n }\n xhr.send();\n }\n\n abort() {\n this._internalAbort();\n this._status = LoaderStatus.kComplete;\n }\n\n _internalAbort() {\n if (this._reader) {\n if (this._reader.readyState === 1) { // LOADING\n this._reader.abort();\n }\n this._reader.onprogress = null;\n this._reader.onload = null;\n this._reader.onerror = null;\n this._reader = null;\n }\n if (this._xhr) {\n this._xhr.abort();\n this._xhr.onreadystatechange = null;\n this._xhr = null;\n }\n }\n\n _xhrOnReadyStateChange(e) {\n let xhr = e.target;\n\n if (xhr.readyState === 2) { // HEADERS_RECEIVED\n if (xhr.status >= 200 && xhr.status <= 299) {\n this._status = LoaderStatus.kBuffering;\n\n if (xhr.responseURL != undefined) {\n let redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL);\n if (xhr.responseURL !== this._currentRequestURL && redirectedURL !== this._currentRedirectedURL) {\n this._currentRedirectedURL = redirectedURL;\n if (this._onURLRedirect) {\n this._onURLRedirect(redirectedURL);\n }\n }\n }\n\n let lengthHeader = xhr.getResponseHeader('Content-Length');\n if (lengthHeader != null && this._contentLength == null) {\n let length = parseInt(lengthHeader);\n if (length > 0) {\n this._contentLength = length;\n if (this._onContentLengthKnown) {\n this._onContentLengthKnown(this._contentLength);\n }\n }\n }\n } else {\n this._status = LoaderStatus.kError;\n if (this._onError) {\n this._onError(LoaderErrors.HTTP_STATUS_CODE_INVALID, {code: xhr.status, msg: xhr.statusText});\n } else {\n throw new RuntimeException('MSStreamLoader: Http code invalid, ' + xhr.status + ' ' + xhr.statusText);\n }\n }\n } else if (xhr.readyState === 3) { // LOADING\n if (xhr.status >= 200 && xhr.status <= 299) {\n this._status = LoaderStatus.kBuffering;\n\n let msstream = xhr.response;\n this._reader.readAsArrayBuffer(msstream);\n }\n }\n }\n\n _xhrOnError(e) {\n this._status = LoaderStatus.kError;\n let type = LoaderErrors.EXCEPTION;\n let info = {code: -1, msg: e.constructor.name + ' ' + e.type};\n\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n\n _msrOnProgress(e) {\n let reader = e.target;\n let bigbuffer = reader.result;\n if (bigbuffer == null) { // result may be null, workaround for buggy M$\n this._doReconnectIfNeeded();\n return;\n }\n\n let slice = bigbuffer.slice(this._lastTimeBufferSize);\n this._lastTimeBufferSize = bigbuffer.byteLength;\n let byteStart = this._totalRange.from + this._receivedLength;\n this._receivedLength += slice.byteLength;\n\n if (this._onDataArrival) {\n this._onDataArrival(slice, byteStart, this._receivedLength);\n }\n\n if (bigbuffer.byteLength >= this._bufferLimit) {\n Log.v(this.TAG, `MSStream buffer exceeded max size near ${byteStart + slice.byteLength}, reconnecting...`);\n this._doReconnectIfNeeded();\n }\n }\n\n _doReconnectIfNeeded() {\n if (this._contentLength == null || this._receivedLength < this._contentLength) {\n this._isReconnecting = true;\n this._lastTimeBufferSize = 0;\n this._internalAbort();\n\n let range = {\n from: this._totalRange.from + this._receivedLength,\n to: -1\n };\n this._internalOpen(this._dataSource, range, true);\n }\n }\n\n _msrOnLoad(e) { // actually it is onComplete event\n this._status = LoaderStatus.kComplete;\n if (this._onComplete) {\n this._onComplete(this._totalRange.from, this._totalRange.from + this._receivedLength - 1);\n }\n }\n\n _msrOnError(e) {\n this._status = LoaderStatus.kError;\n let type = 0;\n let info = null;\n\n if (this._contentLength && this._receivedLength < this._contentLength) {\n type = LoaderErrors.EARLY_EOF;\n info = {code: -1, msg: 'MSStream meet Early-Eof'};\n } else {\n type = LoaderErrors.EARLY_EOF;\n info = {code: -1, msg: e.constructor.name + ' ' + e.type};\n }\n\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n}\n\nexport default MSStreamLoader;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport SpeedSampler from './speed-sampler.js';\nimport {BaseLoader, LoaderStatus, LoaderErrors} from './loader.js';\nimport {RuntimeException} from '../utils/exception.js';\n\n// Universal IO Loader, implemented by adding Range header in xhr's request header\nclass RangeLoader extends BaseLoader {\n\n static isSupported() {\n try {\n let xhr = new XMLHttpRequest();\n xhr.open('GET', 'https://example.com', true);\n xhr.responseType = 'arraybuffer';\n return (xhr.responseType === 'arraybuffer');\n } catch (e) {\n Log.w('RangeLoader', e.message);\n return false;\n }\n }\n\n constructor(seekHandler, config) {\n super('xhr-range-loader');\n this.TAG = 'RangeLoader';\n\n this._seekHandler = seekHandler;\n this._config = config;\n this._needStash = false;\n\n this._chunkSizeKBList = [\n 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192\n ];\n this._currentChunkSizeKB = 384;\n this._currentSpeedNormalized = 0;\n this._zeroSpeedChunkCount = 0;\n\n this._xhr = null;\n this._speedSampler = new SpeedSampler();\n\n this._requestAbort = false;\n this._waitForTotalLength = false;\n this._totalLengthReceived = false;\n\n this._currentRequestURL = null;\n this._currentRedirectedURL = null;\n this._currentRequestRange = null;\n this._totalLength = null; // size of the entire file\n this._contentLength = null; // Content-Length of entire request range\n this._receivedLength = 0; // total received bytes\n this._lastTimeLoaded = 0; // received bytes of current request sub-range\n }\n\n destroy() {\n if (this.isWorking()) {\n this.abort();\n }\n if (this._xhr) {\n this._xhr.onreadystatechange = null;\n this._xhr.onprogress = null;\n this._xhr.onload = null;\n this._xhr.onerror = null;\n this._xhr = null;\n }\n super.destroy();\n }\n\n get currentSpeed() {\n return this._speedSampler.lastSecondKBps;\n }\n\n open(dataSource, range) {\n this._dataSource = dataSource;\n this._range = range;\n this._status = LoaderStatus.kConnecting;\n\n let useRefTotalLength = false;\n if (this._dataSource.filesize != undefined && this._dataSource.filesize !== 0) {\n useRefTotalLength = true;\n this._totalLength = this._dataSource.filesize;\n }\n\n if (!this._totalLengthReceived && !useRefTotalLength) {\n // We need total filesize\n this._waitForTotalLength = true;\n this._internalOpen(this._dataSource, {from: 0, to: -1});\n } else {\n // We have filesize, start loading\n this._openSubRange();\n }\n }\n\n _openSubRange() {\n let chunkSize = this._currentChunkSizeKB * 1024;\n\n let from = this._range.from + this._receivedLength;\n let to = from + chunkSize;\n\n if (this._contentLength != null) {\n if (to - this._range.from >= this._contentLength) {\n to = this._range.from + this._contentLength - 1;\n }\n }\n\n this._currentRequestRange = {from, to};\n this._internalOpen(this._dataSource, this._currentRequestRange);\n }\n\n _internalOpen(dataSource, range) {\n this._lastTimeLoaded = 0;\n\n let sourceURL = dataSource.url;\n if (this._config.reuseRedirectedURL) {\n if (this._currentRedirectedURL != undefined) {\n sourceURL = this._currentRedirectedURL;\n } else if (dataSource.redirectedURL != undefined) {\n sourceURL = dataSource.redirectedURL;\n }\n }\n\n let seekConfig = this._seekHandler.getConfig(sourceURL, range);\n this._currentRequestURL = seekConfig.url;\n\n let xhr = this._xhr = new XMLHttpRequest();\n xhr.open('GET', seekConfig.url, true);\n xhr.responseType = 'arraybuffer';\n xhr.onreadystatechange = this._onReadyStateChange.bind(this);\n xhr.onprogress = this._onProgress.bind(this);\n xhr.onload = this._onLoad.bind(this);\n xhr.onerror = this._onXhrError.bind(this);\n\n if (dataSource.withCredentials) {\n xhr.withCredentials = true;\n }\n\n if (typeof seekConfig.headers === 'object') {\n let headers = seekConfig.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n // add additional headers\n if (typeof this._config.headers === 'object') {\n let headers = this._config.headers;\n\n for (let key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n }\n\n xhr.send();\n }\n\n abort() {\n this._requestAbort = true;\n this._internalAbort();\n this._status = LoaderStatus.kComplete;\n }\n\n _internalAbort() {\n if (this._xhr) {\n this._xhr.onreadystatechange = null;\n this._xhr.onprogress = null;\n this._xhr.onload = null;\n this._xhr.onerror = null;\n this._xhr.abort();\n this._xhr = null;\n }\n }\n\n _onReadyStateChange(e) {\n let xhr = e.target;\n\n if (xhr.readyState === 2) { // HEADERS_RECEIVED\n if (xhr.responseURL != undefined) { // if the browser support this property\n let redirectedURL = this._seekHandler.removeURLParameters(xhr.responseURL);\n if (xhr.responseURL !== this._currentRequestURL && redirectedURL !== this._currentRedirectedURL) {\n this._currentRedirectedURL = redirectedURL;\n if (this._onURLRedirect) {\n this._onURLRedirect(redirectedURL);\n }\n }\n }\n\n if ((xhr.status >= 200 && xhr.status <= 299)) {\n if (this._waitForTotalLength) {\n return;\n }\n this._status = LoaderStatus.kBuffering;\n } else {\n this._status = LoaderStatus.kError;\n if (this._onError) {\n this._onError(LoaderErrors.HTTP_STATUS_CODE_INVALID, {code: xhr.status, msg: xhr.statusText});\n } else {\n throw new RuntimeException('RangeLoader: Http code invalid, ' + xhr.status + ' ' + xhr.statusText);\n }\n }\n }\n }\n\n _onProgress(e) {\n if (this._status === LoaderStatus.kError) {\n // Ignore error response\n return;\n }\n\n if (this._contentLength === null) {\n let openNextRange = false;\n\n if (this._waitForTotalLength) {\n this._waitForTotalLength = false;\n this._totalLengthReceived = true;\n openNextRange = true;\n\n let total = e.total;\n this._internalAbort();\n if (total != null & total !== 0) {\n this._totalLength = total;\n }\n }\n\n // calculate currrent request range's contentLength\n if (this._range.to === -1) {\n this._contentLength = this._totalLength - this._range.from;\n } else { // to !== -1\n this._contentLength = this._range.to - this._range.from + 1;\n }\n\n if (openNextRange) {\n this._openSubRange();\n return;\n }\n if (this._onContentLengthKnown) {\n this._onContentLengthKnown(this._contentLength);\n }\n }\n\n let delta = e.loaded - this._lastTimeLoaded;\n this._lastTimeLoaded = e.loaded;\n this._speedSampler.addBytes(delta);\n }\n\n _normalizeSpeed(input) {\n let list = this._chunkSizeKBList;\n let last = list.length - 1;\n let mid = 0;\n let lbound = 0;\n let ubound = last;\n\n if (input < list[0]) {\n return list[0];\n }\n\n while (lbound <= ubound) {\n mid = lbound + Math.floor((ubound - lbound) / 2);\n if (mid === last || (input >= list[mid] && input < list[mid + 1])) {\n return list[mid];\n } else if (list[mid] < input) {\n lbound = mid + 1;\n } else {\n ubound = mid - 1;\n }\n }\n }\n\n _onLoad(e) {\n if (this._status === LoaderStatus.kError) {\n // Ignore error response\n return;\n }\n\n if (this._waitForTotalLength) {\n this._waitForTotalLength = false;\n return;\n }\n\n this._lastTimeLoaded = 0;\n let KBps = this._speedSampler.lastSecondKBps;\n if (KBps === 0) {\n this._zeroSpeedChunkCount++;\n if (this._zeroSpeedChunkCount >= 3) {\n // Try get currentKBps after 3 chunks\n KBps = this._speedSampler.currentKBps;\n }\n }\n\n if (KBps !== 0) {\n let normalized = this._normalizeSpeed(KBps);\n if (this._currentSpeedNormalized !== normalized) {\n this._currentSpeedNormalized = normalized;\n this._currentChunkSizeKB = normalized;\n }\n }\n\n let chunk = e.target.response;\n let byteStart = this._range.from + this._receivedLength;\n this._receivedLength += chunk.byteLength;\n\n let reportComplete = false;\n\n if (this._contentLength != null && this._receivedLength < this._contentLength) {\n // continue load next chunk\n this._openSubRange();\n } else {\n reportComplete = true;\n }\n\n // dispatch received chunk\n if (this._onDataArrival) {\n this._onDataArrival(chunk, byteStart, this._receivedLength);\n }\n\n if (reportComplete) {\n this._status = LoaderStatus.kComplete;\n if (this._onComplete) {\n this._onComplete(this._range.from, this._range.from + this._receivedLength - 1);\n }\n }\n }\n\n _onXhrError(e) {\n this._status = LoaderStatus.kError;\n let type = 0;\n let info = null;\n\n if (this._contentLength && this._receivedLength > 0\n && this._receivedLength < this._contentLength) {\n type = LoaderErrors.EARLY_EOF;\n info = {code: -1, msg: 'RangeLoader meet Early-Eof'};\n } else {\n type = LoaderErrors.EXCEPTION;\n info = {code: -1, msg: e.constructor.name + ' ' + e.type};\n }\n\n if (this._onError) {\n this._onError(type, info);\n } else {\n throw new RuntimeException(info.msg);\n }\n }\n\n}\n\nexport default RangeLoader;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport Log from '../utils/logger.js';\nimport Browser from '../utils/browser.js';\nimport PlayerEvents from './player-events.js';\nimport Transmuxer from '../core/transmuxer.js';\nimport TransmuxingEvents from '../core/transmuxing-events.js';\nimport MSEController from '../core/mse-controller.js';\nimport MSEEvents from '../core/mse-events.js';\nimport {ErrorTypes, ErrorDetails} from './player-errors.js';\nimport {createDefaultConfig} from '../config.js';\nimport {InvalidArgumentException, IllegalStateException} from '../utils/exception.js';\n\nclass FlvPlayer {\n\n constructor(mediaDataSource, config) {\n this.TAG = 'FlvPlayer';\n this._type = 'FlvPlayer';\n this._emitter = new EventEmitter();\n\n this._config = createDefaultConfig();\n if (typeof config === 'object') {\n Object.assign(this._config, config);\n }\n\n if (mediaDataSource.type.toLowerCase() !== 'flv') {\n throw new InvalidArgumentException('FlvPlayer requires an flv MediaDataSource input!');\n }\n\n if (mediaDataSource.isLive === true) {\n this._config.isLive = true;\n }\n\n this.e = {\n onvLoadedMetadata: this._onvLoadedMetadata.bind(this),\n onvSeeking: this._onvSeeking.bind(this),\n onvCanPlay: this._onvCanPlay.bind(this),\n onvStalled: this._onvStalled.bind(this),\n onvProgress: this._onvProgress.bind(this)\n };\n\n if (self.performance && self.performance.now) {\n this._now = self.performance.now.bind(self.performance);\n } else {\n this._now = Date.now;\n }\n\n this._pendingSeekTime = null; // in seconds\n this._requestSetTime = false;\n this._seekpointRecord = null;\n this._progressChecker = null;\n\n this._mediaDataSource = mediaDataSource;\n this._mediaElement = null;\n this._msectl = null;\n this._transmuxer = null;\n\n this._mseSourceOpened = false;\n this._hasPendingLoad = false;\n this._receivedCanPlay = false;\n\n this._mediaInfo = null;\n this._statisticsInfo = null;\n\n let chromeNeedIDRFix = (Browser.chrome &&\n (Browser.version.major < 50 ||\n (Browser.version.major === 50 && Browser.version.build < 2661)));\n this._alwaysSeekKeyframe = (chromeNeedIDRFix || Browser.msedge || Browser.msie) ? true : false;\n\n if (this._alwaysSeekKeyframe) {\n this._config.accurateSeek = false;\n }\n }\n\n destroy() {\n if (this._progressChecker != null) {\n window.clearInterval(this._progressChecker);\n this._progressChecker = null;\n }\n if (this._transmuxer) {\n this.unload();\n }\n if (this._mediaElement) {\n this.detachMediaElement();\n }\n this.e = null;\n this._mediaDataSource = null;\n\n this._emitter.removeAllListeners();\n this._emitter = null;\n }\n\n on(event, listener) {\n if (event === PlayerEvents.MEDIA_INFO) {\n if (this._mediaInfo != null) {\n Promise.resolve().then(() => {\n this._emitter.emit(PlayerEvents.MEDIA_INFO, this.mediaInfo);\n });\n }\n } else if (event === PlayerEvents.STATISTICS_INFO) {\n if (this._statisticsInfo != null) {\n Promise.resolve().then(() => {\n this._emitter.emit(PlayerEvents.STATISTICS_INFO, this.statisticsInfo);\n });\n }\n }\n this._emitter.addListener(event, listener);\n }\n\n off(event, listener) {\n this._emitter.removeListener(event, listener);\n }\n\n attachMediaElement(mediaElement) {\n this._mediaElement = mediaElement;\n mediaElement.addEventListener('loadedmetadata', this.e.onvLoadedMetadata);\n mediaElement.addEventListener('seeking', this.e.onvSeeking);\n mediaElement.addEventListener('canplay', this.e.onvCanPlay);\n mediaElement.addEventListener('stalled', this.e.onvStalled);\n mediaElement.addEventListener('progress', this.e.onvProgress);\n\n this._msectl = new MSEController(this._config);\n\n this._msectl.on(MSEEvents.UPDATE_END, this._onmseUpdateEnd.bind(this));\n this._msectl.on(MSEEvents.BUFFER_FULL, this._onmseBufferFull.bind(this));\n this._msectl.on(MSEEvents.SOURCE_OPEN, () => {\n this._mseSourceOpened = true;\n if (this._hasPendingLoad) {\n this._hasPendingLoad = false;\n this.load();\n }\n });\n this._msectl.on(MSEEvents.ERROR, (info) => {\n this._emitter.emit(PlayerEvents.ERROR,\n ErrorTypes.MEDIA_ERROR,\n ErrorDetails.MEDIA_MSE_ERROR,\n info\n );\n });\n\n this._msectl.attachMediaElement(mediaElement);\n\n if (this._pendingSeekTime != null) {\n try {\n mediaElement.currentTime = this._pendingSeekTime;\n this._pendingSeekTime = null;\n } catch (e) {\n // IE11 may throw InvalidStateError if readyState === 0\n // We can defer set currentTime operation after loadedmetadata\n }\n }\n }\n\n detachMediaElement() {\n if (this._mediaElement) {\n this._msectl.detachMediaElement();\n this._mediaElement.removeEventListener('loadedmetadata', this.e.onvLoadedMetadata);\n this._mediaElement.removeEventListener('seeking', this.e.onvSeeking);\n this._mediaElement.removeEventListener('canplay', this.e.onvCanPlay);\n this._mediaElement.removeEventListener('stalled', this.e.onvStalled);\n this._mediaElement.removeEventListener('progress', this.e.onvProgress);\n this._mediaElement = null;\n }\n if (this._msectl) {\n this._msectl.destroy();\n this._msectl = null;\n }\n }\n\n load() {\n if (!this._mediaElement) {\n throw new IllegalStateException('HTMLMediaElement must be attached before load()!');\n }\n if (this._transmuxer) {\n throw new IllegalStateException('FlvPlayer.load() has been called, please call unload() first!');\n }\n if (this._hasPendingLoad) {\n return;\n }\n\n if (this._config.deferLoadAfterSourceOpen && this._mseSourceOpened === false) {\n this._hasPendingLoad = true;\n return;\n }\n\n if (this._mediaElement.readyState > 0) {\n this._requestSetTime = true;\n // IE11 may throw InvalidStateError if readyState === 0\n this._mediaElement.currentTime = 0;\n }\n\n this._transmuxer = new Transmuxer(this._mediaDataSource, this._config);\n\n this._transmuxer.on(TransmuxingEvents.INIT_SEGMENT, (type, is) => {\n this._msectl.appendInitSegment(is);\n });\n this._transmuxer.on(TransmuxingEvents.MEDIA_SEGMENT, (type, ms) => {\n this._msectl.appendMediaSegment(ms);\n\n // lazyLoad check\n if (this._config.lazyLoad && !this._config.isLive) {\n let currentTime = this._mediaElement.currentTime;\n if (ms.info.endDts >= (currentTime + this._config.lazyLoadMaxDuration) * 1000) {\n if (this._progressChecker == null) {\n Log.v(this.TAG, 'Maximum buffering duration exceeded, suspend transmuxing task');\n this._suspendTransmuxer();\n }\n }\n }\n });\n this._transmuxer.on(TransmuxingEvents.LOADING_COMPLETE, () => {\n this._msectl.endOfStream();\n this._emitter.emit(PlayerEvents.LOADING_COMPLETE);\n });\n this._transmuxer.on(TransmuxingEvents.RECOVERED_EARLY_EOF, () => {\n this._emitter.emit(PlayerEvents.RECOVERED_EARLY_EOF);\n });\n this._transmuxer.on(TransmuxingEvents.IO_ERROR, (detail, info) => {\n this._emitter.emit(PlayerEvents.ERROR, ErrorTypes.NETWORK_ERROR, detail, info);\n });\n this._transmuxer.on(TransmuxingEvents.DEMUX_ERROR, (detail, info) => {\n this._emitter.emit(PlayerEvents.ERROR, ErrorTypes.MEDIA_ERROR, detail, {code: -1, msg: info});\n });\n this._transmuxer.on(TransmuxingEvents.MEDIA_INFO, (mediaInfo) => {\n this._mediaInfo = mediaInfo;\n this._emitter.emit(PlayerEvents.MEDIA_INFO, Object.assign({}, mediaInfo));\n });\n this._transmuxer.on(TransmuxingEvents.METADATA_ARRIVED, (metadata) => {\n this._emitter.emit(PlayerEvents.METADATA_ARRIVED, metadata);\n });\n this._transmuxer.on(TransmuxingEvents.SCRIPTDATA_ARRIVED, (data) => {\n this._emitter.emit(PlayerEvents.SCRIPTDATA_ARRIVED, data);\n });\n this._transmuxer.on(TransmuxingEvents.STATISTICS_INFO, (statInfo) => {\n this._statisticsInfo = this._fillStatisticsInfo(statInfo);\n this._emitter.emit(PlayerEvents.STATISTICS_INFO, Object.assign({}, this._statisticsInfo));\n });\n this._transmuxer.on(TransmuxingEvents.RECOMMEND_SEEKPOINT, (milliseconds) => {\n if (this._mediaElement && !this._config.accurateSeek) {\n this._requestSetTime = true;\n this._mediaElement.currentTime = milliseconds / 1000;\n }\n });\n\n this._transmuxer.open();\n }\n\n unload() {\n if (this._mediaElement) {\n this._mediaElement.pause();\n }\n if (this._msectl) {\n this._msectl.seek(0);\n }\n if (this._transmuxer) {\n this._transmuxer.close();\n this._transmuxer.destroy();\n this._transmuxer = null;\n }\n }\n\n play() {\n return this._mediaElement.play();\n }\n\n pause() {\n this._mediaElement.pause();\n }\n\n get type() {\n return this._type;\n }\n\n get buffered() {\n return this._mediaElement.buffered;\n }\n\n get duration() {\n return this._mediaElement.duration;\n }\n\n get volume() {\n return this._mediaElement.volume;\n }\n\n set volume(value) {\n this._mediaElement.volume = value;\n }\n\n get muted() {\n return this._mediaElement.muted;\n }\n\n set muted(muted) {\n this._mediaElement.muted = muted;\n }\n\n get currentTime() {\n if (this._mediaElement) {\n return this._mediaElement.currentTime;\n }\n return 0;\n }\n\n set currentTime(seconds) {\n if (this._mediaElement) {\n this._internalSeek(seconds);\n } else {\n this._pendingSeekTime = seconds;\n }\n }\n\n get mediaInfo() {\n return Object.assign({}, this._mediaInfo);\n }\n\n get statisticsInfo() {\n if (this._statisticsInfo == null) {\n this._statisticsInfo = {};\n }\n this._statisticsInfo = this._fillStatisticsInfo(this._statisticsInfo);\n return Object.assign({}, this._statisticsInfo);\n }\n\n _fillStatisticsInfo(statInfo) {\n statInfo.playerType = this._type;\n\n if (!(this._mediaElement instanceof HTMLVideoElement)) {\n return statInfo;\n }\n\n let hasQualityInfo = true;\n let decoded = 0;\n let dropped = 0;\n\n if (this._mediaElement.getVideoPlaybackQuality) {\n let quality = this._mediaElement.getVideoPlaybackQuality();\n decoded = quality.totalVideoFrames;\n dropped = quality.droppedVideoFrames;\n } else if (this._mediaElement.webkitDecodedFrameCount != undefined) {\n decoded = this._mediaElement.webkitDecodedFrameCount;\n dropped = this._mediaElement.webkitDroppedFrameCount;\n } else {\n hasQualityInfo = false;\n }\n\n if (hasQualityInfo) {\n statInfo.decodedFrames = decoded;\n statInfo.droppedFrames = dropped;\n }\n\n return statInfo;\n }\n\n _onmseUpdateEnd() {\n if (!this._config.lazyLoad || this._config.isLive) {\n return;\n }\n\n let buffered = this._mediaElement.buffered;\n let currentTime = this._mediaElement.currentTime;\n let currentRangeStart = 0;\n let currentRangeEnd = 0;\n\n for (let i = 0; i < buffered.length; i++) {\n let start = buffered.start(i);\n let end = buffered.end(i);\n if (start <= currentTime && currentTime < end) {\n currentRangeStart = start;\n currentRangeEnd = end;\n break;\n }\n }\n\n if (currentRangeEnd >= currentTime + this._config.lazyLoadMaxDuration && this._progressChecker == null) {\n Log.v(this.TAG, 'Maximum buffering duration exceeded, suspend transmuxing task');\n this._suspendTransmuxer();\n }\n }\n\n _onmseBufferFull() {\n Log.v(this.TAG, 'MSE SourceBuffer is full, suspend transmuxing task');\n if (this._progressChecker == null) {\n this._suspendTransmuxer();\n }\n }\n\n _suspendTransmuxer() {\n if (this._transmuxer) {\n this._transmuxer.pause();\n\n if (this._progressChecker == null) {\n this._progressChecker = window.setInterval(this._checkProgressAndResume.bind(this), 1000);\n }\n }\n }\n\n _checkProgressAndResume() {\n let currentTime = this._mediaElement.currentTime;\n let buffered = this._mediaElement.buffered;\n\n let needResume = false;\n\n for (let i = 0; i < buffered.length; i++) {\n let from = buffered.start(i);\n let to = buffered.end(i);\n if (currentTime >= from && currentTime < to) {\n if (currentTime >= to - this._config.lazyLoadRecoverDuration) {\n needResume = true;\n }\n break;\n }\n }\n\n if (needResume) {\n window.clearInterval(this._progressChecker);\n this._progressChecker = null;\n if (needResume) {\n Log.v(this.TAG, 'Continue loading from paused position');\n this._transmuxer.resume();\n }\n }\n }\n\n _isTimepointBuffered(seconds) {\n let buffered = this._mediaElement.buffered;\n\n for (let i = 0; i < buffered.length; i++) {\n let from = buffered.start(i);\n let to = buffered.end(i);\n if (seconds >= from && seconds < to) {\n return true;\n }\n }\n return false;\n }\n\n _internalSeek(seconds) {\n let directSeek = this._isTimepointBuffered(seconds);\n\n let directSeekBegin = false;\n let directSeekBeginTime = 0;\n\n if (seconds < 1.0 && this._mediaElement.buffered.length > 0) {\n let videoBeginTime = this._mediaElement.buffered.start(0);\n if ((videoBeginTime < 1.0 && seconds < videoBeginTime) || Browser.safari) {\n directSeekBegin = true;\n // also workaround for Safari: Seek to 0 may cause video stuck, use 0.1 to avoid\n directSeekBeginTime = Browser.safari ? 0.1 : videoBeginTime;\n }\n }\n\n if (directSeekBegin) { // seek to video begin, set currentTime directly if beginPTS buffered\n this._requestSetTime = true;\n this._mediaElement.currentTime = directSeekBeginTime;\n } else if (directSeek) { // buffered position\n if (!this._alwaysSeekKeyframe) {\n this._requestSetTime = true;\n this._mediaElement.currentTime = seconds;\n } else {\n let idr = this._msectl.getNearestKeyframe(Math.floor(seconds * 1000));\n this._requestSetTime = true;\n if (idr != null) {\n this._mediaElement.currentTime = idr.dts / 1000;\n } else {\n this._mediaElement.currentTime = seconds;\n }\n }\n if (this._progressChecker != null) {\n this._checkProgressAndResume();\n }\n } else {\n if (this._progressChecker != null) {\n window.clearInterval(this._progressChecker);\n this._progressChecker = null;\n }\n this._msectl.seek(seconds);\n this._transmuxer.seek(Math.floor(seconds * 1000)); // in milliseconds\n // no need to set mediaElement.currentTime if non-accurateSeek,\n // just wait for the recommend_seekpoint callback\n if (this._config.accurateSeek) {\n this._requestSetTime = true;\n this._mediaElement.currentTime = seconds;\n }\n }\n }\n\n _checkAndApplyUnbufferedSeekpoint() {\n if (this._seekpointRecord) {\n if (this._seekpointRecord.recordTime <= this._now() - 100) {\n let target = this._mediaElement.currentTime;\n this._seekpointRecord = null;\n if (!this._isTimepointBuffered(target)) {\n if (this._progressChecker != null) {\n window.clearTimeout(this._progressChecker);\n this._progressChecker = null;\n }\n // .currentTime is consists with .buffered timestamp\n // Chrome/Edge use DTS, while FireFox/Safari use PTS\n this._msectl.seek(target);\n this._transmuxer.seek(Math.floor(target * 1000));\n // set currentTime if accurateSeek, or wait for recommend_seekpoint callback\n if (this._config.accurateSeek) {\n this._requestSetTime = true;\n this._mediaElement.currentTime = target;\n }\n }\n } else {\n window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50);\n }\n }\n }\n\n _checkAndResumeStuckPlayback(stalled) {\n let media = this._mediaElement;\n if (stalled || !this._receivedCanPlay || media.readyState < 2) { // HAVE_CURRENT_DATA\n let buffered = media.buffered;\n if (buffered.length > 0 && media.currentTime < buffered.start(0)) {\n Log.w(this.TAG, `Playback seems stuck at ${media.currentTime}, seek to ${buffered.start(0)}`);\n this._requestSetTime = true;\n this._mediaElement.currentTime = buffered.start(0);\n this._mediaElement.removeEventListener('progress', this.e.onvProgress);\n }\n } else {\n // Playback didn't stuck, remove progress event listener\n this._mediaElement.removeEventListener('progress', this.e.onvProgress);\n }\n }\n\n _onvLoadedMetadata(e) {\n if (this._pendingSeekTime != null) {\n this._mediaElement.currentTime = this._pendingSeekTime;\n this._pendingSeekTime = null;\n }\n }\n\n _onvSeeking(e) { // handle seeking request from browser's progress bar\n let target = this._mediaElement.currentTime;\n let buffered = this._mediaElement.buffered;\n\n if (this._requestSetTime) {\n this._requestSetTime = false;\n return;\n }\n\n if (target < 1.0 && buffered.length > 0) {\n // seek to video begin, set currentTime directly if beginPTS buffered\n let videoBeginTime = buffered.start(0);\n if ((videoBeginTime < 1.0 && target < videoBeginTime) || Browser.safari) {\n this._requestSetTime = true;\n // also workaround for Safari: Seek to 0 may cause video stuck, use 0.1 to avoid\n this._mediaElement.currentTime = Browser.safari ? 0.1 : videoBeginTime;\n return;\n }\n }\n\n if (this._isTimepointBuffered(target)) {\n if (this._alwaysSeekKeyframe) {\n let idr = this._msectl.getNearestKeyframe(Math.floor(target * 1000));\n if (idr != null) {\n this._requestSetTime = true;\n this._mediaElement.currentTime = idr.dts / 1000;\n }\n }\n if (this._progressChecker != null) {\n this._checkProgressAndResume();\n }\n return;\n }\n\n this._seekpointRecord = {\n seekPoint: target,\n recordTime: this._now()\n };\n window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50);\n }\n\n _onvCanPlay(e) {\n this._receivedCanPlay = true;\n this._mediaElement.removeEventListener('canplay', this.e.onvCanPlay);\n }\n\n _onvStalled(e) {\n this._checkAndResumeStuckPlayback(true);\n }\n\n _onvProgress(e) {\n this._checkAndResumeStuckPlayback();\n }\n\n}\n\nexport default FlvPlayer;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport PlayerEvents from './player-events.js';\nimport {createDefaultConfig} from '../config.js';\nimport {InvalidArgumentException, IllegalStateException} from '../utils/exception.js';\n\n// Player wrapper for browser's native player (HTMLVideoElement) without MediaSource src. \nclass NativePlayer {\n\n constructor(mediaDataSource, config) {\n this.TAG = 'NativePlayer';\n this._type = 'NativePlayer';\n this._emitter = new EventEmitter();\n\n this._config = createDefaultConfig();\n if (typeof config === 'object') {\n Object.assign(this._config, config);\n }\n\n if (mediaDataSource.type.toLowerCase() === 'flv') {\n throw new InvalidArgumentException('NativePlayer does\\'t support flv MediaDataSource input!');\n }\n if (mediaDataSource.hasOwnProperty('segments')) {\n throw new InvalidArgumentException(`NativePlayer(${mediaDataSource.type}) doesn't support multipart playback!`);\n }\n\n this.e = {\n onvLoadedMetadata: this._onvLoadedMetadata.bind(this)\n };\n\n this._pendingSeekTime = null;\n this._statisticsReporter = null;\n\n this._mediaDataSource = mediaDataSource;\n this._mediaElement = null;\n }\n\n destroy() {\n if (this._mediaElement) {\n this.unload();\n this.detachMediaElement();\n }\n this.e = null;\n this._mediaDataSource = null;\n this._emitter.removeAllListeners();\n this._emitter = null;\n }\n\n on(event, listener) {\n if (event === PlayerEvents.MEDIA_INFO) {\n if (this._mediaElement != null && this._mediaElement.readyState !== 0) { // HAVE_NOTHING\n Promise.resolve().then(() => {\n this._emitter.emit(PlayerEvents.MEDIA_INFO, this.mediaInfo);\n });\n }\n } else if (event === PlayerEvents.STATISTICS_INFO) {\n if (this._mediaElement != null && this._mediaElement.readyState !== 0) {\n Promise.resolve().then(() => {\n this._emitter.emit(PlayerEvents.STATISTICS_INFO, this.statisticsInfo);\n });\n }\n }\n this._emitter.addListener(event, listener);\n }\n\n off(event, listener) {\n this._emitter.removeListener(event, listener);\n }\n\n attachMediaElement(mediaElement) {\n this._mediaElement = mediaElement;\n mediaElement.addEventListener('loadedmetadata', this.e.onvLoadedMetadata);\n\n if (this._pendingSeekTime != null) {\n try {\n mediaElement.currentTime = this._pendingSeekTime;\n this._pendingSeekTime = null;\n } catch (e) {\n // IE11 may throw InvalidStateError if readyState === 0\n // Defer set currentTime operation after loadedmetadata\n }\n }\n }\n\n detachMediaElement() {\n if (this._mediaElement) {\n this._mediaElement.src = '';\n this._mediaElement.removeAttribute('src');\n this._mediaElement.removeEventListener('loadedmetadata', this.e.onvLoadedMetadata);\n this._mediaElement = null;\n }\n if (this._statisticsReporter != null) {\n window.clearInterval(this._statisticsReporter);\n this._statisticsReporter = null;\n }\n }\n\n load() {\n if (!this._mediaElement) {\n throw new IllegalStateException('HTMLMediaElement must be attached before load()!');\n }\n this._mediaElement.src = this._mediaDataSource.url;\n\n if (this._mediaElement.readyState > 0) {\n this._mediaElement.currentTime = 0;\n }\n\n this._mediaElement.preload = 'auto';\n this._mediaElement.load();\n this._statisticsReporter = window.setInterval(\n this._reportStatisticsInfo.bind(this),\n this._config.statisticsInfoReportInterval);\n }\n\n unload() {\n if (this._mediaElement) {\n this._mediaElement.src = '';\n this._mediaElement.removeAttribute('src');\n }\n if (this._statisticsReporter != null) {\n window.clearInterval(this._statisticsReporter);\n this._statisticsReporter = null;\n }\n }\n\n play() {\n return this._mediaElement.play();\n }\n\n pause() {\n this._mediaElement.pause();\n }\n\n get type() {\n return this._type;\n }\n\n get buffered() {\n return this._mediaElement.buffered;\n }\n\n get duration() {\n return this._mediaElement.duration;\n }\n\n get volume() {\n return this._mediaElement.volume;\n }\n\n set volume(value) {\n this._mediaElement.volume = value;\n }\n\n get muted() {\n return this._mediaElement.muted;\n }\n\n set muted(muted) {\n this._mediaElement.muted = muted;\n }\n\n get currentTime() {\n if (this._mediaElement) {\n return this._mediaElement.currentTime;\n }\n return 0;\n }\n\n set currentTime(seconds) {\n if (this._mediaElement) {\n this._mediaElement.currentTime = seconds;\n } else {\n this._pendingSeekTime = seconds;\n }\n }\n\n get mediaInfo() {\n let mediaPrefix = (this._mediaElement instanceof HTMLAudioElement) ? 'audio/' : 'video/';\n let info = {\n mimeType: mediaPrefix + this._mediaDataSource.type\n };\n if (this._mediaElement) {\n info.duration = Math.floor(this._mediaElement.duration * 1000);\n if (this._mediaElement instanceof HTMLVideoElement) {\n info.width = this._mediaElement.videoWidth;\n info.height = this._mediaElement.videoHeight;\n }\n }\n return info;\n }\n\n get statisticsInfo() {\n let info = {\n playerType: this._type,\n url: this._mediaDataSource.url\n };\n\n if (!(this._mediaElement instanceof HTMLVideoElement)) {\n return info;\n }\n\n let hasQualityInfo = true;\n let decoded = 0;\n let dropped = 0;\n\n if (this._mediaElement.getVideoPlaybackQuality) {\n let quality = this._mediaElement.getVideoPlaybackQuality();\n decoded = quality.totalVideoFrames;\n dropped = quality.droppedVideoFrames;\n } else if (this._mediaElement.webkitDecodedFrameCount != undefined) {\n decoded = this._mediaElement.webkitDecodedFrameCount;\n dropped = this._mediaElement.webkitDroppedFrameCount;\n } else {\n hasQualityInfo = false;\n }\n\n if (hasQualityInfo) {\n info.decodedFrames = decoded;\n info.droppedFrames = dropped;\n }\n \n return info;\n }\n\n _onvLoadedMetadata(e) {\n if (this._pendingSeekTime != null) {\n this._mediaElement.currentTime = this._pendingSeekTime;\n this._pendingSeekTime = null;\n }\n this._emitter.emit(PlayerEvents.MEDIA_INFO, this.mediaInfo);\n }\n\n _reportStatisticsInfo() {\n this._emitter.emit(PlayerEvents.STATISTICS_INFO, this.statisticsInfo);\n }\n\n}\n\nexport default NativePlayer;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {LoaderErrors} from '../io/loader.js';\nimport DemuxErrors from '../demux/demux-errors.js';\n\nexport const ErrorTypes = {\n NETWORK_ERROR: 'NetworkError',\n MEDIA_ERROR: 'MediaError',\n OTHER_ERROR: 'OtherError'\n};\n\nexport const ErrorDetails = {\n NETWORK_EXCEPTION: LoaderErrors.EXCEPTION,\n NETWORK_STATUS_CODE_INVALID: LoaderErrors.HTTP_STATUS_CODE_INVALID,\n NETWORK_TIMEOUT: LoaderErrors.CONNECTING_TIMEOUT,\n NETWORK_UNRECOVERABLE_EARLY_EOF: LoaderErrors.UNRECOVERABLE_EARLY_EOF,\n\n MEDIA_MSE_ERROR: 'MediaMSEError',\n\n MEDIA_FORMAT_ERROR: DemuxErrors.FORMAT_ERROR,\n MEDIA_FORMAT_UNSUPPORTED: DemuxErrors.FORMAT_UNSUPPORTED,\n MEDIA_CODEC_UNSUPPORTED: DemuxErrors.CODEC_UNSUPPORTED\n};","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst PlayerEvents = {\n ERROR: 'error',\n LOADING_COMPLETE: 'loading_complete',\n RECOVERED_EARLY_EOF: 'recovered_early_eof',\n MEDIA_INFO: 'media_info',\n METADATA_ARRIVED: 'metadata_arrived',\n SCRIPTDATA_ARRIVED: 'scriptdata_arrived',\n STATISTICS_INFO: 'statistics_info'\n};\n\nexport default PlayerEvents;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * This file is modified from dailymotion's hls.js library (hls.js/src/helper/aac.js)\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass AAC {\n\n static getSilentFrame(codec, channelCount) {\n if (codec === 'mp4a.40.2') {\n // handle LC-AAC\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n } else {\n // handle HE-AAC (mp4a.40.5 / mp4a.40.29)\n if (channelCount === 1) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 2) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 3) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n }\n }\n return null;\n }\n\n}\n\nexport default AAC;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * This file is derived from dailymotion's hls.js library (hls.js/src/remux/mp4-generator.js)\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// MP4 boxes generator for ISO BMFF (ISO Base Media File Format, defined in ISO/IEC 14496-12)\nclass MP4 {\n\n static init() {\n MP4.types = {\n avc1: [], avcC: [], btrt: [], dinf: [],\n dref: [], esds: [], ftyp: [], hdlr: [],\n mdat: [], mdhd: [], mdia: [], mfhd: [],\n minf: [], moof: [], moov: [], mp4a: [],\n mvex: [], mvhd: [], sdtp: [], stbl: [],\n stco: [], stsc: [], stsd: [], stsz: [],\n stts: [], tfdt: [], tfhd: [], traf: [],\n trak: [], trun: [], trex: [], tkhd: [],\n vmhd: [], smhd: [], '.mp3': []\n };\n\n for (let name in MP4.types) {\n if (MP4.types.hasOwnProperty(name)) {\n MP4.types[name] = [\n name.charCodeAt(0),\n name.charCodeAt(1),\n name.charCodeAt(2),\n name.charCodeAt(3)\n ];\n }\n }\n\n let constants = MP4.constants = {};\n\n constants.FTYP = new Uint8Array([\n 0x69, 0x73, 0x6F, 0x6D, // major_brand: isom\n 0x0, 0x0, 0x0, 0x1, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x61, 0x76, 0x63, 0x31 // avc1\n ]);\n\n constants.STSD_PREFIX = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01 // entry_count\n ]);\n\n constants.STTS = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n constants.STSC = constants.STCO = constants.STTS;\n\n constants.STSZ = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n\n constants.HDLR_VIDEO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x56, 0x69, 0x64, 0x65,\n 0x6F, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: VideoHandler\n ]);\n\n constants.HDLR_AUDIO = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6F, 0x75, 0x6E, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x53, 0x6F, 0x75, 0x6E,\n 0x64, 0x48, 0x61, 0x6E,\n 0x64, 0x6C, 0x65, 0x72, 0x00 // name: SoundHandler\n ]);\n\n constants.DREF = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0C, // entry_size\n 0x75, 0x72, 0x6C, 0x20, // type 'url '\n 0x00, 0x00, 0x00, 0x01 // version(0) + flags\n ]);\n\n // Sound media header\n constants.SMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00 // balance(2) + reserved(2)\n ]);\n\n // video media header\n constants.VMHD = new Uint8Array([\n 0x00, 0x00, 0x00, 0x01, // version(0) + flags\n 0x00, 0x00, // graphicsmode: 2 bytes\n 0x00, 0x00, 0x00, 0x00, // opcolor: 3 * 2 bytes\n 0x00, 0x00\n ]);\n }\n\n // Generate a box\n static box(type) {\n let size = 8;\n let result = null;\n let datas = Array.prototype.slice.call(arguments, 1);\n let arrayCount = datas.length;\n\n for (let i = 0; i < arrayCount; i++) {\n size += datas[i].byteLength;\n }\n\n result = new Uint8Array(size);\n result[0] = (size >>> 24) & 0xFF; // size\n result[1] = (size >>> 16) & 0xFF;\n result[2] = (size >>> 8) & 0xFF;\n result[3] = (size) & 0xFF;\n\n result.set(type, 4); // type\n\n let offset = 8;\n for (let i = 0; i < arrayCount; i++) { // data body\n result.set(datas[i], offset);\n offset += datas[i].byteLength;\n }\n\n return result;\n }\n\n // emit ftyp & moov\n static generateInitSegment(meta) {\n let ftyp = MP4.box(MP4.types.ftyp, MP4.constants.FTYP);\n let moov = MP4.moov(meta);\n\n let result = new Uint8Array(ftyp.byteLength + moov.byteLength);\n result.set(ftyp, 0);\n result.set(moov, ftyp.byteLength);\n return result;\n }\n\n // Movie metadata box\n static moov(meta) {\n let mvhd = MP4.mvhd(meta.timescale, meta.duration);\n let trak = MP4.trak(meta);\n let mvex = MP4.mvex(meta);\n return MP4.box(MP4.types.moov, mvhd, trak, mvex);\n }\n\n // Movie header box\n static mvhd(timescale, duration) {\n return MP4.box(MP4.types.mvhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x01, 0x00, 0x00, // Preferred rate: 1.0\n 0x01, 0x00, 0x00, 0x00, // PreferredVolume(1.0, 2bytes) + reserved(2bytes)\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 + 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n 0x00, 0x00, 0x00, 0x00, // ----begin pre_defined 6 * 4 bytes----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // ----end pre_defined 6 * 4 bytes----\n 0xFF, 0xFF, 0xFF, 0xFF // next_track_ID\n ]));\n }\n\n // Track box\n static trak(meta) {\n return MP4.box(MP4.types.trak, MP4.tkhd(meta), MP4.mdia(meta));\n }\n\n // Track header box\n static tkhd(meta) {\n let trackId = meta.id, duration = meta.duration;\n let width = meta.presentWidth, height = meta.presentHeight;\n\n return MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x07, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (trackId >>> 24) & 0xFF, // track_ID: 4 bytes\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // layer(2bytes) + alternate_group(2bytes)\n 0x00, 0x00, 0x00, 0x00, // volume(2bytes) + reserved(2bytes)\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n (width >>> 8) & 0xFF, // width and height\n (width) & 0xFF,\n 0x00, 0x00,\n (height >>> 8) & 0xFF,\n (height) & 0xFF,\n 0x00, 0x00\n ]));\n }\n\n // Media Box\n static mdia(meta) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(meta), MP4.hdlr(meta), MP4.minf(meta));\n }\n\n // Media header box\n static mdhd(meta) {\n let timescale = meta.timescale;\n let duration = meta.duration;\n return MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (timescale >>> 24) & 0xFF, // timescale: 4 bytes\n (timescale >>> 16) & 0xFF,\n (timescale >>> 8) & 0xFF,\n (timescale) & 0xFF,\n (duration >>> 24) & 0xFF, // duration: 4 bytes\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n 0x55, 0xC4, // language: und (undetermined)\n 0x00, 0x00 // pre_defined = 0\n ]));\n }\n\n // Media handler reference box\n static hdlr(meta) {\n let data = null;\n if (meta.type === 'audio') {\n data = MP4.constants.HDLR_AUDIO;\n } else {\n data = MP4.constants.HDLR_VIDEO;\n }\n return MP4.box(MP4.types.hdlr, data);\n }\n\n // Media infomation box\n static minf(meta) {\n let xmhd = null;\n if (meta.type === 'audio') {\n xmhd = MP4.box(MP4.types.smhd, MP4.constants.SMHD);\n } else {\n xmhd = MP4.box(MP4.types.vmhd, MP4.constants.VMHD);\n }\n return MP4.box(MP4.types.minf, xmhd, MP4.dinf(), MP4.stbl(meta));\n }\n\n // Data infomation box\n static dinf() {\n let result = MP4.box(MP4.types.dinf,\n MP4.box(MP4.types.dref, MP4.constants.DREF)\n );\n return result;\n }\n\n // Sample table box\n static stbl(meta) {\n let result = MP4.box(MP4.types.stbl, // type: stbl\n MP4.stsd(meta), // Sample Description Table\n MP4.box(MP4.types.stts, MP4.constants.STTS), // Time-To-Sample\n MP4.box(MP4.types.stsc, MP4.constants.STSC), // Sample-To-Chunk\n MP4.box(MP4.types.stsz, MP4.constants.STSZ), // Sample size\n MP4.box(MP4.types.stco, MP4.constants.STCO) // Chunk offset\n ); \n return result; \n }\n\n // Sample description box\n static stsd(meta) {\n if (meta.type === 'audio') {\n if (meta.codec === 'mp3') {\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.mp3(meta));\n }\n // else: aac -> mp4a\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.mp4a(meta));\n } else {\n return MP4.box(MP4.types.stsd, MP4.constants.STSD_PREFIX, MP4.avc1(meta));\n }\n }\n\n static mp3(meta) {\n let channelCount = meta.channelCount;\n let sampleRate = meta.audioSampleRate;\n\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2)\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, channelCount, // channelCount(2)\n 0x00, 0x10, // sampleSize(2)\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n (sampleRate >>> 8) & 0xFF, // Audio sample rate\n (sampleRate) & 0xFF,\n 0x00, 0x00\n ]);\n\n return MP4.box(MP4.types['.mp3'], data);\n }\n\n static mp4a(meta) {\n let channelCount = meta.channelCount;\n let sampleRate = meta.audioSampleRate;\n\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2)\n 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, channelCount, // channelCount(2)\n 0x00, 0x10, // sampleSize(2)\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n (sampleRate >>> 8) & 0xFF, // Audio sample rate\n (sampleRate) & 0xFF,\n 0x00, 0x00\n ]);\n\n return MP4.box(MP4.types.mp4a, data, MP4.esds(meta));\n }\n\n static esds(meta) {\n let config = meta.config || [];\n let configSize = config.length;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version 0 + flags\n\n 0x03, // descriptor_type\n 0x17 + configSize, // length3\n 0x00, 0x01, // es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0F + configSize, // length\n 0x40, // codec: mpeg4_audio\n 0x15, // stream_type: Audio\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([\n configSize\n ]).concat(\n config\n ).concat([\n 0x06, 0x01, 0x02 // GASpecificConfig\n ]));\n return MP4.box(MP4.types.esds, data);\n }\n\n static avc1(meta) {\n let avcc = meta.avcc;\n let width = meta.codecWidth, height = meta.codecHeight;\n\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // reserved(4)\n 0x00, 0x00, 0x00, 0x01, // reserved(2) + data_reference_index(2)\n 0x00, 0x00, 0x00, 0x00, // pre_defined(2) + reserved(2)\n 0x00, 0x00, 0x00, 0x00, // pre_defined: 3 * 4 bytes\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n (width >>> 8) & 0xFF, // width: 2 bytes\n (width) & 0xFF,\n (height >>> 8) & 0xFF, // height: 2 bytes\n (height) & 0xFF,\n 0x00, 0x48, 0x00, 0x00, // horizresolution: 4 bytes\n 0x00, 0x48, 0x00, 0x00, // vertresolution: 4 bytes\n 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes\n 0x00, 0x01, // frame_count\n 0x0A, // strlen\n 0x78, 0x71, 0x71, 0x2F, // compressorname: 32 bytes\n 0x66, 0x6C, 0x76, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00,\n 0x00, 0x18, // depth\n 0xFF, 0xFF // pre_defined = -1\n ]);\n return MP4.box(MP4.types.avc1, data, MP4.box(MP4.types.avcC, avcc));\n }\n\n // Movie Extends box\n static mvex(meta) {\n return MP4.box(MP4.types.mvex, MP4.trex(meta));\n }\n\n // Track Extends box\n static trex(meta) {\n let trackId = meta.id;\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) + flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF,\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]);\n return MP4.box(MP4.types.trex, data);\n }\n\n // Movie fragment box\n static moof(track, baseMediaDecodeTime) {\n return MP4.box(MP4.types.moof, MP4.mfhd(track.sequenceNumber), MP4.traf(track, baseMediaDecodeTime));\n }\n\n static mfhd(sequenceNumber) {\n let data = new Uint8Array([\n 0x00, 0x00, 0x00, 0x00,\n (sequenceNumber >>> 24) & 0xFF, // sequence_number: int32\n (sequenceNumber >>> 16) & 0xFF,\n (sequenceNumber >>> 8) & 0xFF,\n (sequenceNumber) & 0xFF\n ]);\n return MP4.box(MP4.types.mfhd, data);\n }\n\n // Track fragment box\n static traf(track, baseMediaDecodeTime) {\n let trackId = track.id;\n\n // Track fragment header box\n let tfhd = MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (trackId >>> 24) & 0xFF, // track_ID\n (trackId >>> 16) & 0xFF,\n (trackId >>> 8) & 0xFF,\n (trackId) & 0xFF\n ]));\n // Track Fragment Decode Time\n let tfdt = MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, 0x00, 0x00, 0x00, // version(0) & flags\n (baseMediaDecodeTime >>> 24) & 0xFF, // baseMediaDecodeTime: int32\n (baseMediaDecodeTime >>> 16) & 0xFF,\n (baseMediaDecodeTime >>> 8) & 0xFF,\n (baseMediaDecodeTime) & 0xFF\n ]));\n let sdtp = MP4.sdtp(track);\n let trun = MP4.trun(track, sdtp.byteLength + 16 + 16 + 8 + 16 + 8 + 8);\n\n return MP4.box(MP4.types.traf, tfhd, tfdt, trun, sdtp);\n }\n\n // Sample Dependency Type box\n static sdtp(track) {\n let samples = track.samples || [];\n let sampleCount = samples.length;\n let data = new Uint8Array(4 + sampleCount);\n // 0~4 bytes: version(0) & flags\n for (let i = 0; i < sampleCount; i++) {\n let flags = samples[i].flags;\n data[i + 4] = (flags.isLeading << 6) // is_leading: 2 (bit)\n | (flags.dependsOn << 4) // sample_depends_on\n | (flags.isDependedOn << 2) // sample_is_depended_on\n | (flags.hasRedundancy); // sample_has_redundancy\n }\n return MP4.box(MP4.types.sdtp, data);\n }\n\n // Track fragment run box\n static trun(track, offset) {\n let samples = track.samples || [];\n let sampleCount = samples.length;\n let dataSize = 12 + 16 * sampleCount;\n let data = new Uint8Array(dataSize);\n offset += 8 + dataSize;\n\n data.set([\n 0x00, 0x00, 0x0F, 0x01, // version(0) & flags\n (sampleCount >>> 24) & 0xFF, // sample_count\n (sampleCount >>> 16) & 0xFF,\n (sampleCount >>> 8) & 0xFF,\n (sampleCount) & 0xFF,\n (offset >>> 24) & 0xFF, // data_offset\n (offset >>> 16) & 0xFF,\n (offset >>> 8) & 0xFF,\n (offset) & 0xFF\n ], 0);\n\n for (let i = 0; i < sampleCount; i++) {\n let duration = samples[i].duration;\n let size = samples[i].size;\n let flags = samples[i].flags;\n let cts = samples[i].cts;\n data.set([\n (duration >>> 24) & 0xFF, // sample_duration\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n (duration) & 0xFF,\n (size >>> 24) & 0xFF, // sample_size\n (size >>> 16) & 0xFF,\n (size >>> 8) & 0xFF,\n (size) & 0xFF,\n (flags.isLeading << 2) | flags.dependsOn, // sample_flags\n (flags.isDependedOn << 6) | (flags.hasRedundancy << 4) | flags.isNonSync,\n 0x00, 0x00, // sample_degradation_priority\n (cts >>> 24) & 0xFF, // sample_composition_time_offset\n (cts >>> 16) & 0xFF,\n (cts >>> 8) & 0xFF,\n (cts) & 0xFF\n ], 12 + 16 * i);\n }\n return MP4.box(MP4.types.trun, data);\n }\n\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data);\n }\n\n}\n\nMP4.init();\n\nexport default MP4;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Log from '../utils/logger.js';\nimport MP4 from './mp4-generator.js';\nimport AAC from './aac-silent.js';\nimport Browser from '../utils/browser.js';\nimport {SampleInfo, MediaSegmentInfo, MediaSegmentInfoList} from '../core/media-segment-info.js';\nimport {IllegalStateException} from '../utils/exception.js';\n\n\n// Fragmented mp4 remuxer\nclass MP4Remuxer {\n\n constructor(config) {\n this.TAG = 'MP4Remuxer';\n\n this._config = config;\n this._isLive = (config.isLive === true) ? true : false;\n\n this._dtsBase = -1;\n this._dtsBaseInited = false;\n this._audioDtsBase = Infinity;\n this._videoDtsBase = Infinity;\n this._audioNextDts = undefined;\n this._videoNextDts = undefined;\n this._audioStashedLastSample = null;\n this._videoStashedLastSample = null;\n\n this._audioMeta = null;\n this._videoMeta = null;\n\n this._audioSegmentInfoList = new MediaSegmentInfoList('audio');\n this._videoSegmentInfoList = new MediaSegmentInfoList('video');\n\n this._onInitSegment = null;\n this._onMediaSegment = null;\n\n // Workaround for chrome < 50: Always force first sample as a Random Access Point in media segment\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=229412\n this._forceFirstIDR = (Browser.chrome &&\n (Browser.version.major < 50 ||\n (Browser.version.major === 50 && Browser.version.build < 2661))) ? true : false;\n\n // Workaround for IE11/Edge: Fill silent aac frame after keyframe-seeking\n // Make audio beginDts equals with video beginDts, in order to fix seek freeze\n this._fillSilentAfterSeek = (Browser.msedge || Browser.msie);\n\n // While only FireFox supports 'audio/mp4, codecs=\"mp3\"', use 'audio/mpeg' for chrome, safari, ...\n this._mp3UseMpegAudio = !Browser.firefox;\n\n this._fillAudioTimestampGap = this._config.fixAudioTimestampGap;\n }\n\n destroy() {\n this._dtsBase = -1;\n this._dtsBaseInited = false;\n this._audioMeta = null;\n this._videoMeta = null;\n this._audioSegmentInfoList.clear();\n this._audioSegmentInfoList = null;\n this._videoSegmentInfoList.clear();\n this._videoSegmentInfoList = null;\n this._onInitSegment = null;\n this._onMediaSegment = null;\n }\n\n bindDataSource(producer) {\n producer.onDataAvailable = this.remux.bind(this);\n producer.onTrackMetadata = this._onTrackMetadataReceived.bind(this);\n return this;\n }\n\n /* prototype: function onInitSegment(type: string, initSegment: ArrayBuffer): void\n InitSegment: {\n type: string,\n data: ArrayBuffer,\n codec: string,\n container: string\n }\n */\n get onInitSegment() {\n return this._onInitSegment;\n }\n\n set onInitSegment(callback) {\n this._onInitSegment = callback;\n }\n\n /* prototype: function onMediaSegment(type: string, mediaSegment: MediaSegment): void\n MediaSegment: {\n type: string,\n data: ArrayBuffer,\n sampleCount: int32\n info: MediaSegmentInfo\n }\n */\n get onMediaSegment() {\n return this._onMediaSegment;\n }\n\n set onMediaSegment(callback) {\n this._onMediaSegment = callback;\n }\n\n insertDiscontinuity() {\n this._audioNextDts = this._videoNextDts = undefined;\n }\n\n seek(originalDts) {\n this._audioStashedLastSample = null;\n this._videoStashedLastSample = null;\n this._videoSegmentInfoList.clear();\n this._audioSegmentInfoList.clear();\n }\n\n remux(audioTrack, videoTrack) {\n if (!this._onMediaSegment) {\n throw new IllegalStateException('MP4Remuxer: onMediaSegment callback must be specificed!');\n }\n if (!this._dtsBaseInited) {\n this._calculateDtsBase(audioTrack, videoTrack);\n }\n this._remuxVideo(videoTrack);\n this._remuxAudio(audioTrack);\n }\n\n _onTrackMetadataReceived(type, metadata) {\n let metabox = null;\n\n let container = 'mp4';\n let codec = metadata.codec;\n\n if (type === 'audio') {\n this._audioMeta = metadata;\n if (metadata.codec === 'mp3' && this._mp3UseMpegAudio) {\n // 'audio/mpeg' for MP3 audio track\n container = 'mpeg';\n codec = '';\n metabox = new Uint8Array();\n } else {\n // 'audio/mp4, codecs=\"codec\"'\n metabox = MP4.generateInitSegment(metadata);\n }\n } else if (type === 'video') {\n this._videoMeta = metadata;\n metabox = MP4.generateInitSegment(metadata);\n } else {\n return;\n }\n\n // dispatch metabox (Initialization Segment)\n if (!this._onInitSegment) {\n throw new IllegalStateException('MP4Remuxer: onInitSegment callback must be specified!');\n }\n this._onInitSegment(type, {\n type: type,\n data: metabox.buffer,\n codec: codec,\n container: `${type}/${container}`,\n mediaDuration: metadata.duration // in timescale 1000 (milliseconds)\n });\n }\n\n _calculateDtsBase(audioTrack, videoTrack) {\n if (this._dtsBaseInited) {\n return;\n }\n\n if (audioTrack.samples && audioTrack.samples.length) {\n this._audioDtsBase = audioTrack.samples[0].dts;\n }\n if (videoTrack.samples && videoTrack.samples.length) {\n this._videoDtsBase = videoTrack.samples[0].dts;\n }\n\n this._dtsBase = Math.min(this._audioDtsBase, this._videoDtsBase);\n this._dtsBaseInited = true;\n }\n\n flushStashedSamples() {\n let videoSample = this._videoStashedLastSample;\n let audioSample = this._audioStashedLastSample;\n\n let videoTrack = {\n type: 'video',\n id: 1,\n sequenceNumber: 0,\n samples: [],\n length: 0\n };\n\n if (videoSample != null) {\n videoTrack.samples.push(videoSample);\n videoTrack.length = videoSample.length;\n }\n\n let audioTrack = {\n type: 'audio',\n id: 2,\n sequenceNumber: 0,\n samples: [],\n length: 0\n };\n\n if (audioSample != null) {\n audioTrack.samples.push(audioSample);\n audioTrack.length = audioSample.length;\n }\n\n this._videoStashedLastSample = null;\n this._audioStashedLastSample = null;\n\n this._remuxVideo(videoTrack, true);\n this._remuxAudio(audioTrack, true);\n }\n\n _remuxAudio(audioTrack, force) {\n if (this._audioMeta == null) {\n return;\n }\n\n let track = audioTrack;\n let samples = track.samples;\n let dtsCorrection = undefined;\n let firstDts = -1, lastDts = -1, lastPts = -1;\n let refSampleDuration = this._audioMeta.refSampleDuration;\n\n let mpegRawTrack = this._audioMeta.codec === 'mp3' && this._mp3UseMpegAudio;\n let firstSegmentAfterSeek = this._dtsBaseInited && this._audioNextDts === undefined;\n\n let insertPrefixSilentFrame = false;\n\n if (!samples || samples.length === 0) {\n return;\n }\n if (samples.length === 1 && !force) {\n // If [sample count in current batch] === 1 && (force != true)\n // Ignore and keep in demuxer's queue\n return;\n } // else if (force === true) do remux\n\n let offset = 0;\n let mdatbox = null;\n let mdatBytes = 0;\n\n // calculate initial mdat size\n if (mpegRawTrack) {\n // for raw mpeg buffer\n offset = 0;\n mdatBytes = track.length;\n } else {\n // for fmp4 mdat box\n offset = 8; // size + type\n mdatBytes = 8 + track.length;\n }\n\n\n let lastSample = null;\n\n // Pop the lastSample and waiting for stash\n if (samples.length > 1) {\n lastSample = samples.pop();\n mdatBytes -= lastSample.length;\n }\n\n // Insert [stashed lastSample in the previous batch] to the front\n if (this._audioStashedLastSample != null) {\n let sample = this._audioStashedLastSample;\n this._audioStashedLastSample = null;\n samples.unshift(sample);\n mdatBytes += sample.length;\n }\n\n // Stash the lastSample of current batch, waiting for next batch\n if (lastSample != null) {\n this._audioStashedLastSample = lastSample;\n }\n\n\n let firstSampleOriginalDts = samples[0].dts - this._dtsBase;\n\n // calculate dtsCorrection\n if (this._audioNextDts) {\n dtsCorrection = firstSampleOriginalDts - this._audioNextDts;\n } else { // this._audioNextDts == undefined\n if (this._audioSegmentInfoList.isEmpty()) {\n dtsCorrection = 0;\n if (this._fillSilentAfterSeek && !this._videoSegmentInfoList.isEmpty()) {\n if (this._audioMeta.originalCodec !== 'mp3') {\n insertPrefixSilentFrame = true;\n }\n }\n } else {\n let lastSample = this._audioSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts);\n if (lastSample != null) {\n let distance = (firstSampleOriginalDts - (lastSample.originalDts + lastSample.duration));\n if (distance <= 3) {\n distance = 0;\n }\n let expectedDts = lastSample.dts + lastSample.duration + distance;\n dtsCorrection = firstSampleOriginalDts - expectedDts;\n } else { // lastSample == null, cannot found\n dtsCorrection = 0;\n }\n }\n }\n\n if (insertPrefixSilentFrame) {\n // align audio segment beginDts to match with current video segment's beginDts\n let firstSampleDts = firstSampleOriginalDts - dtsCorrection;\n let videoSegment = this._videoSegmentInfoList.getLastSegmentBefore(firstSampleOriginalDts);\n if (videoSegment != null && videoSegment.beginDts < firstSampleDts) {\n let silentUnit = AAC.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount);\n if (silentUnit) {\n let dts = videoSegment.beginDts;\n let silentFrameDuration = firstSampleDts - videoSegment.beginDts;\n Log.v(this.TAG, `InsertPrefixSilentAudio: dts: ${dts}, duration: ${silentFrameDuration}`);\n samples.unshift({unit: silentUnit, dts: dts, pts: dts});\n mdatBytes += silentUnit.byteLength;\n } // silentUnit == null: Cannot generate, skip\n } else {\n insertPrefixSilentFrame = false;\n }\n }\n\n let mp4Samples = [];\n\n // Correct dts for each sample, and calculate sample duration. Then output to mp4Samples\n for (let i = 0; i < samples.length; i++) {\n let sample = samples[i];\n let unit = sample.unit;\n let originalDts = sample.dts - this._dtsBase;\n let dts = originalDts - dtsCorrection;\n\n if (firstDts === -1) {\n firstDts = dts;\n }\n\n let sampleDuration = 0;\n\n if (i !== samples.length - 1) {\n let nextDts = samples[i + 1].dts - this._dtsBase - dtsCorrection;\n sampleDuration = nextDts - dts;\n } else { // the last sample\n if (lastSample != null) { // use stashed sample's dts to calculate sample duration\n let nextDts = lastSample.dts - this._dtsBase - dtsCorrection;\n sampleDuration = nextDts - dts;\n } else if (mp4Samples.length >= 1) { // use second last sample duration\n sampleDuration = mp4Samples[mp4Samples.length - 1].duration;\n } else { // the only one sample, use reference sample duration\n sampleDuration = Math.floor(refSampleDuration);\n }\n }\n\n let needFillSilentFrames = false;\n let silentFrames = null;\n\n // Silent frame generation, if large timestamp gap detected && config.fixAudioTimestampGap\n if (sampleDuration > refSampleDuration * 1.5 && this._audioMeta.codec !== 'mp3' && this._fillAudioTimestampGap && !Browser.safari) {\n // We need to insert silent frames to fill timestamp gap\n needFillSilentFrames = true;\n let delta = Math.abs(sampleDuration - refSampleDuration);\n let frameCount = Math.ceil(delta / refSampleDuration);\n let currentDts = dts + refSampleDuration; // Notice: in float\n\n Log.w(this.TAG, 'Large audio timestamp gap detected, may cause AV sync to drift. ' +\n 'Silent frames will be generated to avoid unsync.\\n' +\n `dts: ${dts + sampleDuration} ms, expected: ${dts + Math.round(refSampleDuration)} ms, ` +\n `delta: ${Math.round(delta)} ms, generate: ${frameCount} frames`);\n\n let silentUnit = AAC.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount);\n if (silentUnit == null) {\n Log.w(this.TAG, 'Unable to generate silent frame for ' +\n `${this._audioMeta.originalCodec} with ${this._audioMeta.channelCount} channels, repeat last frame`);\n // Repeat last frame\n silentUnit = unit;\n }\n silentFrames = [];\n\n for (let j = 0; j < frameCount; j++) {\n let intDts = Math.round(currentDts); // round to integer\n if (silentFrames.length > 0) {\n // Set previous frame sample duration\n let previousFrame = silentFrames[silentFrames.length - 1];\n previousFrame.duration = intDts - previousFrame.dts;\n }\n let frame = {\n dts: intDts,\n pts: intDts,\n cts: 0,\n unit: silentUnit,\n size: silentUnit.byteLength,\n duration: 0, // wait for next sample\n originalDts: originalDts,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0\n }\n };\n silentFrames.push(frame);\n mdatBytes += frame.size;\n currentDts += refSampleDuration;\n }\n\n // last frame: align end time to next frame dts\n let lastFrame = silentFrames[silentFrames.length - 1];\n lastFrame.duration = dts + sampleDuration - lastFrame.dts;\n\n // silentFrames.forEach((frame) => {\n // Log.w(this.TAG, `SilentAudio: dts: ${frame.dts}, duration: ${frame.duration}`);\n // });\n\n // Set correct sample duration for current frame\n sampleDuration = Math.round(refSampleDuration);\n }\n\n mp4Samples.push({\n dts: dts,\n pts: dts,\n cts: 0,\n unit: sample.unit,\n size: sample.unit.byteLength,\n duration: sampleDuration,\n originalDts: originalDts,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0\n }\n });\n\n if (needFillSilentFrames) {\n // Silent frames should be inserted after wrong-duration frame\n mp4Samples.push.apply(mp4Samples, silentFrames);\n }\n }\n\n // allocate mdatbox\n if (mpegRawTrack) {\n // allocate for raw mpeg buffer\n mdatbox = new Uint8Array(mdatBytes);\n } else {\n // allocate for fmp4 mdat box\n mdatbox = new Uint8Array(mdatBytes);\n // size field\n mdatbox[0] = (mdatBytes >>> 24) & 0xFF;\n mdatbox[1] = (mdatBytes >>> 16) & 0xFF;\n mdatbox[2] = (mdatBytes >>> 8) & 0xFF;\n mdatbox[3] = (mdatBytes) & 0xFF;\n // type field (fourCC)\n mdatbox.set(MP4.types.mdat, 4);\n }\n\n // Write samples into mdatbox\n for (let i = 0; i < mp4Samples.length; i++) {\n let unit = mp4Samples[i].unit;\n mdatbox.set(unit, offset);\n offset += unit.byteLength;\n }\n\n let latest = mp4Samples[mp4Samples.length - 1];\n lastDts = latest.dts + latest.duration;\n this._audioNextDts = lastDts;\n\n // fill media segment info & add to info list\n let info = new MediaSegmentInfo();\n info.beginDts = firstDts;\n info.endDts = lastDts;\n info.beginPts = firstDts;\n info.endPts = lastDts;\n info.originalBeginDts = mp4Samples[0].originalDts;\n info.originalEndDts = latest.originalDts + latest.duration;\n info.firstSample = new SampleInfo(mp4Samples[0].dts,\n mp4Samples[0].pts,\n mp4Samples[0].duration,\n mp4Samples[0].originalDts,\n false);\n info.lastSample = new SampleInfo(latest.dts,\n latest.pts,\n latest.duration,\n latest.originalDts,\n false);\n if (!this._isLive) {\n this._audioSegmentInfoList.append(info);\n }\n\n track.samples = mp4Samples;\n track.sequenceNumber++;\n\n let moofbox = null;\n\n if (mpegRawTrack) {\n // Generate empty buffer, because useless for raw mpeg\n moofbox = new Uint8Array();\n } else {\n // Generate moof for fmp4 segment\n moofbox = MP4.moof(track, firstDts);\n }\n\n track.samples = [];\n track.length = 0;\n\n let segment = {\n type: 'audio',\n data: this._mergeBoxes(moofbox, mdatbox).buffer,\n sampleCount: mp4Samples.length,\n info: info\n };\n\n if (mpegRawTrack && firstSegmentAfterSeek) {\n // For MPEG audio stream in MSE, if seeking occurred, before appending new buffer\n // We need explicitly set timestampOffset to the desired point in timeline for mpeg SourceBuffer.\n segment.timestampOffset = firstDts;\n }\n\n this._onMediaSegment('audio', segment);\n }\n\n _remuxVideo(videoTrack, force) {\n if (this._videoMeta == null) {\n return;\n }\n\n let track = videoTrack;\n let samples = track.samples;\n let dtsCorrection = undefined;\n let firstDts = -1, lastDts = -1;\n let firstPts = -1, lastPts = -1;\n\n if (!samples || samples.length === 0) {\n return;\n }\n if (samples.length === 1 && !force) {\n // If [sample count in current batch] === 1 && (force != true)\n // Ignore and keep in demuxer's queue\n return;\n } // else if (force === true) do remux\n\n let offset = 8;\n let mdatbox = null;\n let mdatBytes = 8 + videoTrack.length;\n\n\n let lastSample = null;\n\n // Pop the lastSample and waiting for stash\n if (samples.length > 1) {\n lastSample = samples.pop();\n mdatBytes -= lastSample.length;\n }\n\n // Insert [stashed lastSample in the previous batch] to the front\n if (this._videoStashedLastSample != null) {\n let sample = this._videoStashedLastSample;\n this._videoStashedLastSample = null;\n samples.unshift(sample);\n mdatBytes += sample.length;\n }\n\n // Stash the lastSample of current batch, waiting for next batch\n if (lastSample != null) {\n this._videoStashedLastSample = lastSample;\n }\n\n\n let firstSampleOriginalDts = samples[0].dts - this._dtsBase;\n\n // calculate dtsCorrection\n if (this._videoNextDts) {\n dtsCorrection = firstSampleOriginalDts - this._videoNextDts;\n } else { // this._videoNextDts == undefined\n if (this._videoSegmentInfoList.isEmpty()) {\n dtsCorrection = 0;\n } else {\n let lastSample = this._videoSegmentInfoList.getLastSampleBefore(firstSampleOriginalDts);\n if (lastSample != null) {\n let distance = (firstSampleOriginalDts - (lastSample.originalDts + lastSample.duration));\n if (distance <= 3) {\n distance = 0;\n }\n let expectedDts = lastSample.dts + lastSample.duration + distance;\n dtsCorrection = firstSampleOriginalDts - expectedDts;\n } else { // lastSample == null, cannot found\n dtsCorrection = 0;\n }\n }\n }\n\n let info = new MediaSegmentInfo();\n let mp4Samples = [];\n\n // Correct dts for each sample, and calculate sample duration. Then output to mp4Samples\n for (let i = 0; i < samples.length; i++) {\n let sample = samples[i];\n let originalDts = sample.dts - this._dtsBase;\n let isKeyframe = sample.isKeyframe;\n let dts = originalDts - dtsCorrection;\n let cts = sample.cts;\n let pts = dts + cts;\n\n if (firstDts === -1) {\n firstDts = dts;\n firstPts = pts;\n }\n\n let sampleDuration = 0;\n\n if (i !== samples.length - 1) {\n let nextDts = samples[i + 1].dts - this._dtsBase - dtsCorrection;\n sampleDuration = nextDts - dts;\n } else { // the last sample\n if (lastSample != null) { // use stashed sample's dts to calculate sample duration\n let nextDts = lastSample.dts - this._dtsBase - dtsCorrection;\n sampleDuration = nextDts - dts;\n } else if (mp4Samples.length >= 1) { // use second last sample duration\n sampleDuration = mp4Samples[mp4Samples.length - 1].duration;\n } else { // the only one sample, use reference sample duration\n sampleDuration = Math.floor(this._videoMeta.refSampleDuration);\n }\n }\n\n if (isKeyframe) {\n let syncPoint = new SampleInfo(dts, pts, sampleDuration, sample.dts, true);\n syncPoint.fileposition = sample.fileposition;\n info.appendSyncPoint(syncPoint);\n }\n\n mp4Samples.push({\n dts: dts,\n pts: pts,\n cts: cts,\n units: sample.units,\n size: sample.length,\n isKeyframe: isKeyframe,\n duration: sampleDuration,\n originalDts: originalDts,\n flags: {\n isLeading: 0,\n dependsOn: isKeyframe ? 2 : 1,\n isDependedOn: isKeyframe ? 1 : 0,\n hasRedundancy: 0,\n isNonSync: isKeyframe ? 0 : 1\n }\n });\n }\n\n // allocate mdatbox\n mdatbox = new Uint8Array(mdatBytes);\n mdatbox[0] = (mdatBytes >>> 24) & 0xFF;\n mdatbox[1] = (mdatBytes >>> 16) & 0xFF;\n mdatbox[2] = (mdatBytes >>> 8) & 0xFF;\n mdatbox[3] = (mdatBytes) & 0xFF;\n mdatbox.set(MP4.types.mdat, 4);\n\n // Write samples into mdatbox\n for (let i = 0; i < mp4Samples.length; i++) {\n let units = mp4Samples[i].units;\n while (units.length) {\n let unit = units.shift();\n let data = unit.data;\n mdatbox.set(data, offset);\n offset += data.byteLength;\n }\n }\n\n let latest = mp4Samples[mp4Samples.length - 1];\n lastDts = latest.dts + latest.duration;\n lastPts = latest.pts + latest.duration;\n this._videoNextDts = lastDts;\n\n // fill media segment info & add to info list\n info.beginDts = firstDts;\n info.endDts = lastDts;\n info.beginPts = firstPts;\n info.endPts = lastPts;\n info.originalBeginDts = mp4Samples[0].originalDts;\n info.originalEndDts = latest.originalDts + latest.duration;\n info.firstSample = new SampleInfo(mp4Samples[0].dts,\n mp4Samples[0].pts,\n mp4Samples[0].duration,\n mp4Samples[0].originalDts,\n mp4Samples[0].isKeyframe);\n info.lastSample = new SampleInfo(latest.dts,\n latest.pts,\n latest.duration,\n latest.originalDts,\n latest.isKeyframe);\n if (!this._isLive) {\n this._videoSegmentInfoList.append(info);\n }\n\n track.samples = mp4Samples;\n track.sequenceNumber++;\n\n // workaround for chrome < 50: force first sample as a random access point\n // see https://bugs.chromium.org/p/chromium/issues/detail?id=229412\n if (this._forceFirstIDR) {\n let flags = mp4Samples[0].flags;\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n\n let moofbox = MP4.moof(track, firstDts);\n track.samples = [];\n track.length = 0;\n\n this._onMediaSegment('video', {\n type: 'video',\n data: this._mergeBoxes(moofbox, mdatbox).buffer,\n sampleCount: mp4Samples.length,\n info: info\n });\n }\n\n _mergeBoxes(moof, mdat) {\n let result = new Uint8Array(moof.byteLength + mdat.byteLength);\n result.set(moof, 0);\n result.set(mdat, moof.byteLength);\n return result;\n }\n\n}\n\nexport default MP4Remuxer;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet Browser = {};\n\nfunction detect() {\n // modified from jquery-browser-plugin\n\n let ua = self.navigator.userAgent.toLowerCase();\n\n let match = /(edge)\\/([\\w.]+)/.exec(ua) ||\n /(opr)[\\/]([\\w.]+)/.exec(ua) ||\n /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n /(iemobile)[\\/]([\\w.]+)/.exec(ua) ||\n /(version)(applewebkit)[ \\/]([\\w.]+).*(safari)[ \\/]([\\w.]+)/.exec(ua) ||\n /(webkit)[ \\/]([\\w.]+).*(version)[ \\/]([\\w.]+).*(safari)[ \\/]([\\w.]+)/.exec(ua) ||\n /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n /(msie) ([\\w.]+)/.exec(ua) ||\n ua.indexOf('trident') >= 0 && /(rv)(?::| )([\\w.]+)/.exec(ua) ||\n ua.indexOf('compatible') < 0 && /(firefox)[ \\/]([\\w.]+)/.exec(ua) ||\n [];\n\n let platform_match = /(ipad)/.exec(ua) ||\n /(ipod)/.exec(ua) ||\n /(windows phone)/.exec(ua) ||\n /(iphone)/.exec(ua) ||\n /(kindle)/.exec(ua) ||\n /(android)/.exec(ua) ||\n /(windows)/.exec(ua) ||\n /(mac)/.exec(ua) ||\n /(linux)/.exec(ua) ||\n /(cros)/.exec(ua) ||\n [];\n\n let matched = {\n browser: match[5] || match[3] || match[1] || '',\n version: match[2] || match[4] || '0',\n majorVersion: match[4] || match[2] || '0',\n platform: platform_match[0] || ''\n };\n\n let browser = {};\n if (matched.browser) {\n browser[matched.browser] = true;\n\n let versionArray = matched.majorVersion.split('.');\n browser.version = {\n major: parseInt(matched.majorVersion, 10),\n string: matched.version\n };\n if (versionArray.length > 1) {\n browser.version.minor = parseInt(versionArray[1], 10);\n }\n if (versionArray.length > 2) {\n browser.version.build = parseInt(versionArray[2], 10);\n }\n }\n\n if (matched.platform) {\n browser[matched.platform] = true;\n }\n\n if (browser.chrome || browser.opr || browser.safari) {\n browser.webkit = true;\n }\n\n // MSIE. IE11 has 'rv' identifer\n if (browser.rv || browser.iemobile) {\n if (browser.rv) {\n delete browser.rv;\n }\n let msie = 'msie';\n matched.browser = msie;\n browser[msie] = true;\n }\n\n // Microsoft Edge\n if (browser.edge) {\n delete browser.edge;\n let msedge = 'msedge';\n matched.browser = msedge;\n browser[msedge] = true;\n }\n\n // Opera 15+\n if (browser.opr) {\n let opera = 'opera';\n matched.browser = opera;\n browser[opera] = true;\n }\n\n // Stock android browsers are marked as Safari\n if (browser.safari && browser.android) {\n let android = 'android';\n matched.browser = android;\n browser[android] = true;\n }\n\n browser.name = matched.browser;\n browser.platform = matched.platform;\n\n for (let key in Browser) {\n if (Browser.hasOwnProperty(key)) {\n delete Browser[key];\n }\n }\n Object.assign(Browser, browser);\n}\n\ndetect();\n\nexport default Browser;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport class RuntimeException {\n\n constructor(message) {\n this._message = message;\n }\n\n get name() {\n return 'RuntimeException';\n }\n\n get message() {\n return this._message;\n }\n\n toString() {\n return this.name + ': ' + this.message;\n }\n\n}\n\nexport class IllegalStateException extends RuntimeException {\n\n constructor(message) {\n super(message);\n }\n\n get name() {\n return 'IllegalStateException';\n }\n\n}\n\nexport class InvalidArgumentException extends RuntimeException {\n\n constructor(message) {\n super(message);\n }\n\n get name() {\n return 'InvalidArgumentException';\n }\n\n}\n\nexport class NotImplementedException extends RuntimeException {\n\n constructor(message) {\n super(message);\n }\n\n get name() {\n return 'NotImplementedException';\n }\n\n}\n","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\n\nclass Log {\n\n static e(tag, msg) {\n if (!tag || Log.FORCE_GLOBAL_TAG)\n tag = Log.GLOBAL_TAG;\n\n let str = `[${tag}] > ${msg}`;\n\n if (Log.ENABLE_CALLBACK) {\n Log.emitter.emit('log', 'error', str);\n }\n\n if (!Log.ENABLE_ERROR) {\n return;\n }\n\n if (console.error) {\n console.error(str);\n } else if (console.warn) {\n console.warn(str);\n } else {\n console.log(str);\n }\n }\n\n static i(tag, msg) {\n if (!tag || Log.FORCE_GLOBAL_TAG)\n tag = Log.GLOBAL_TAG;\n\n let str = `[${tag}] > ${msg}`;\n\n if (Log.ENABLE_CALLBACK) {\n Log.emitter.emit('log', 'info', str);\n }\n\n if (!Log.ENABLE_INFO) {\n return;\n }\n\n if (console.info) {\n console.info(str);\n } else {\n console.log(str);\n }\n }\n\n static w(tag, msg) {\n if (!tag || Log.FORCE_GLOBAL_TAG)\n tag = Log.GLOBAL_TAG;\n\n let str = `[${tag}] > ${msg}`;\n\n if (Log.ENABLE_CALLBACK) {\n Log.emitter.emit('log', 'warn', str);\n }\n\n if (!Log.ENABLE_WARN) {\n return;\n }\n\n if (console.warn) {\n console.warn(str);\n } else {\n console.log(str);\n }\n }\n\n static d(tag, msg) {\n if (!tag || Log.FORCE_GLOBAL_TAG)\n tag = Log.GLOBAL_TAG;\n\n let str = `[${tag}] > ${msg}`;\n\n if (Log.ENABLE_CALLBACK) {\n Log.emitter.emit('log', 'debug', str);\n }\n\n if (!Log.ENABLE_DEBUG) {\n return;\n }\n\n if (console.debug) {\n console.debug(str);\n } else {\n console.log(str);\n }\n }\n\n static v(tag, msg) {\n if (!tag || Log.FORCE_GLOBAL_TAG)\n tag = Log.GLOBAL_TAG;\n\n let str = `[${tag}] > ${msg}`;\n\n if (Log.ENABLE_CALLBACK) {\n Log.emitter.emit('log', 'verbose', str);\n }\n\n if (!Log.ENABLE_VERBOSE) {\n return;\n }\n\n console.log(str);\n }\n\n}\n\nLog.GLOBAL_TAG = 'flv.js';\nLog.FORCE_GLOBAL_TAG = false;\nLog.ENABLE_ERROR = true;\nLog.ENABLE_INFO = true;\nLog.ENABLE_WARN = true;\nLog.ENABLE_DEBUG = true;\nLog.ENABLE_VERBOSE = true;\n\nLog.ENABLE_CALLBACK = false;\n\nLog.emitter = new EventEmitter();\n\nexport default Log;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport EventEmitter from 'events';\nimport Log from './logger.js';\n\nclass LoggingControl {\n\n static get forceGlobalTag() {\n return Log.FORCE_GLOBAL_TAG;\n }\n\n static set forceGlobalTag(enable) {\n Log.FORCE_GLOBAL_TAG = enable;\n LoggingControl._notifyChange();\n }\n\n static get globalTag() {\n return Log.GLOBAL_TAG;\n }\n\n static set globalTag(tag) {\n Log.GLOBAL_TAG = tag;\n LoggingControl._notifyChange();\n }\n\n static get enableAll() {\n return Log.ENABLE_VERBOSE\n && Log.ENABLE_DEBUG\n && Log.ENABLE_INFO\n && Log.ENABLE_WARN\n && Log.ENABLE_ERROR;\n }\n\n static set enableAll(enable) {\n Log.ENABLE_VERBOSE = enable;\n Log.ENABLE_DEBUG = enable;\n Log.ENABLE_INFO = enable;\n Log.ENABLE_WARN = enable;\n Log.ENABLE_ERROR = enable;\n LoggingControl._notifyChange();\n }\n\n static get enableDebug() {\n return Log.ENABLE_DEBUG;\n }\n\n static set enableDebug(enable) {\n Log.ENABLE_DEBUG = enable;\n LoggingControl._notifyChange();\n }\n\n static get enableVerbose() {\n return Log.ENABLE_VERBOSE;\n }\n\n static set enableVerbose(enable) {\n Log.ENABLE_VERBOSE = enable;\n LoggingControl._notifyChange();\n }\n\n static get enableInfo() {\n return Log.ENABLE_INFO;\n }\n\n static set enableInfo(enable) {\n Log.ENABLE_INFO = enable;\n LoggingControl._notifyChange();\n }\n\n static get enableWarn() {\n return Log.ENABLE_WARN;\n }\n\n static set enableWarn(enable) {\n Log.ENABLE_WARN = enable;\n LoggingControl._notifyChange();\n }\n\n static get enableError() {\n return Log.ENABLE_ERROR;\n }\n\n static set enableError(enable) {\n Log.ENABLE_ERROR = enable;\n LoggingControl._notifyChange();\n }\n\n static getConfig() {\n return {\n globalTag: Log.GLOBAL_TAG,\n forceGlobalTag: Log.FORCE_GLOBAL_TAG,\n enableVerbose: Log.ENABLE_VERBOSE,\n enableDebug: Log.ENABLE_DEBUG,\n enableInfo: Log.ENABLE_INFO,\n enableWarn: Log.ENABLE_WARN,\n enableError: Log.ENABLE_ERROR,\n enableCallback: Log.ENABLE_CALLBACK\n };\n }\n\n static applyConfig(config) {\n Log.GLOBAL_TAG = config.globalTag;\n Log.FORCE_GLOBAL_TAG = config.forceGlobalTag;\n Log.ENABLE_VERBOSE = config.enableVerbose;\n Log.ENABLE_DEBUG = config.enableDebug;\n Log.ENABLE_INFO = config.enableInfo;\n Log.ENABLE_WARN = config.enableWarn;\n Log.ENABLE_ERROR = config.enableError;\n Log.ENABLE_CALLBACK = config.enableCallback;\n }\n\n static _notifyChange() {\n let emitter = LoggingControl.emitter;\n\n if (emitter.listenerCount('change') > 0) {\n let config = LoggingControl.getConfig();\n emitter.emit('change', config);\n }\n }\n\n static registerListener(listener) {\n LoggingControl.emitter.addListener('change', listener);\n }\n\n static removeListener(listener) {\n LoggingControl.emitter.removeListener('change', listener);\n }\n\n static addLogListener(listener) {\n Log.emitter.addListener('log', listener);\n if (Log.emitter.listenerCount('log') > 0) {\n Log.ENABLE_CALLBACK = true;\n LoggingControl._notifyChange();\n }\n }\n\n static removeLogListener(listener) {\n Log.emitter.removeListener('log', listener);\n if (Log.emitter.listenerCount('log') === 0) {\n Log.ENABLE_CALLBACK = false;\n LoggingControl._notifyChange();\n }\n }\n\n}\n\nLoggingControl.emitter = new EventEmitter();\n\nexport default LoggingControl;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass Polyfill {\n\n static install() {\n // ES6 Object.setPrototypeOf\n Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {\n obj.__proto__ = proto;\n return obj;\n };\n\n // ES6 Object.assign\n Object.assign = Object.assign || function (target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n let output = Object(target);\n for (let i = 1; i < arguments.length; i++) {\n let source = arguments[i];\n if (source !== undefined && source !== null) {\n for (let key in source) {\n if (source.hasOwnProperty(key)) {\n output[key] = source[key];\n }\n }\n }\n }\n return output;\n };\n\n // ES6 Promise (missing support in IE11)\n if (typeof self.Promise !== 'function') {\n require('es6-promise').polyfill();\n }\n }\n\n}\n\nPolyfill.install();\n\nexport default Polyfill;","/*\n * Copyright (C) 2016 Bilibili. All Rights Reserved.\n *\n * This file is derived from C++ project libWinTF8 (https://github.com/m13253/libWinTF8)\n * @author zheng qian \n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nfunction checkContinuation(uint8array, start, checkLength) {\n let array = uint8array;\n if (start + checkLength < array.length) {\n while (checkLength--) {\n if ((array[++start] & 0xC0) !== 0x80)\n return false;\n }\n return true;\n } else {\n return false;\n }\n}\n\nfunction decodeUTF8(uint8array) {\n let out = [];\n let input = uint8array;\n let i = 0;\n let length = uint8array.length;\n\n while (i < length) {\n if (input[i] < 0x80) {\n out.push(String.fromCharCode(input[i]));\n ++i;\n continue;\n } else if (input[i] < 0xC0) {\n // fallthrough\n } else if (input[i] < 0xE0) {\n if (checkContinuation(input, i, 1)) {\n let ucs4 = (input[i] & 0x1F) << 6 | (input[i + 1] & 0x3F);\n if (ucs4 >= 0x80) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF));\n i += 2;\n continue;\n }\n }\n } else if (input[i] < 0xF0) {\n if (checkContinuation(input, i, 2)) {\n let ucs4 = (input[i] & 0xF) << 12 | (input[i + 1] & 0x3F) << 6 | input[i + 2] & 0x3F;\n if (ucs4 >= 0x800 && (ucs4 & 0xF800) !== 0xD800) {\n out.push(String.fromCharCode(ucs4 & 0xFFFF));\n i += 3;\n continue;\n }\n }\n } else if (input[i] < 0xF8) {\n if (checkContinuation(input, i, 3)) {\n let ucs4 = (input[i] & 0x7) << 18 | (input[i + 1] & 0x3F) << 12\n | (input[i + 2] & 0x3F) << 6 | (input[i + 3] & 0x3F);\n if (ucs4 > 0x10000 && ucs4 < 0x110000) {\n ucs4 -= 0x10000;\n out.push(String.fromCharCode((ucs4 >>> 10) | 0xD800));\n out.push(String.fromCharCode((ucs4 & 0x3FF) | 0xDC00));\n i += 4;\n continue;\n }\n }\n }\n out.push(String.fromCharCode(0xFFFD));\n ++i;\n }\n\n return out.join('');\n}\n\nexport default decodeUTF8;"]} \ No newline at end of file diff --git a/upload/template/default/common/common.css b/upload/template/default/common/common.css index f0272868d157bef2619effa85595a5ab6e01f7d0..c87c46d5d0377defc1e73b5442a9f75e104695a3 100644 --- a/upload/template/default/common/common.css +++ b/upload/template/default/common/common.css @@ -1778,4 +1778,12 @@ DIY图片幻灯片未加载时隐藏,模块标识隐藏 .pgbtn { margin: 5px 0 10px; } .pgbtn a { display: block; height: 40px; line-height: 40px; letter-spacing: 5px; text-align: center; border: 1px solid #DCDCDC; font-size: 14px; outline: none; border-radius: 5px; box-shadow: 0 1px 0 #F5F5F5; } .pgbtn a:hover { border-color: #BABABA; text-decoration: none; } - .pgbtn a:active { background: #EEE; border-color: #D0D0D0; box-shadow: none; } \ No newline at end of file + .pgbtn a:active { background: #EEE; border-color: #D0D0D0; box-shadow: none; } + +/* 媒体样式 */ +.media { display: block; margin-bottom: 20px; } + .media_container { display: block; width: 100%; height: 100%; min-height: 20px; background: url("{IMGDIR}/img_loader.gif") no-repeat center; } + .media_container a { text-decoration: none !important; } + .media_tips { display: block; margin: 10px 0; text-align: center; } + .media_tips a { font-size: 12px !important; color: #999 !important; text-decoration: none !important; } + .media_tips a:hover { text-decoration: underline !important; }