diff --git a/demo/mask_detection/README.md b/demo/mask_detection/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e6c824527fe37ceb0b51b9d4fa9f7e8ed0af0653 --- /dev/null +++ b/demo/mask_detection/README.md @@ -0,0 +1,304 @@ +# 百度PaddlePaddle实现口罩检测应用 + +## 0 项目介绍 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/BB6BC87A45D146CEBA7BF237B5383835?ynotemdtimestamp=1582271320612) + +### [>点击查看视频链接<](https://www.bilibili.com/video/av88962128) + +##### 背景 +本项目可以部署在大型场馆出入口,学校,医院,交通通道出入口,人脸识别闸机,机器人上,支持的方案有:安卓方案(如RK3399的人脸识别机,机器人),ubuntu 边缘计算,windowsPC+摄像头,识别率80%~90%,如果立项使用场景可以达到 99% (如:人脸识别机场景)。但是限于清晰度和遮挡关系,对应用场景有一些要求。 + +##### 效果分析 +可以看到识别率在80~90%之前,稍小的人脸有误识别的情况,有些挡住嘴的场景也被误识别成了戴口罩,一个人带着口罩,鼻子漏出来识别成没有戴口罩,这个是合理的因为的鼻子漏出来是佩戴不规范。初步判断,这个模型应用在门口,狭长通道,人脸识别机所在位置都是可以的。 + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/7E12DBD91D1D4AB5B33C84786D519065?ynotemdtimestamp=1582271320612)![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/2BD974FB990C4C448B30B04194545054?ynotemdtimestamp=1582271320612)![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/E49E34A071F8484D948511430FAB0360?ynotemdtimestamp=1582271320612) + +## 1 部署环境 +参考: https://www.paddlepaddle.org.cn/install/quick + +### 安装paddlehub +`pip install paddlehub` + + +## 2 开发识别服务 +### 加载预训练模型 +```python +import paddlehub as hub +module = hub.Module(name="pyramidbox_lite_mobile_mask") #口罩检测模型 +``` + +>以上语句paddlehub会自动下载口罩检测模型 "pyramidbox_lite_mobile_mask" 不需要提前下载模型 + +### OpenCV打开摄像头或视频文件 +```python +import cv2 + +capture = cv2.VideoCapture(0) # 打开摄像头 +# capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while(1): + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + cv2.imshow('Mask Detection', frame) + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +cv2.destroyAllWindows() +``` + +### 口罩检测 +```python +# frame为一帧数据 + +input_dict = {"data": [frame]} + +results = module.face_detection(data=input_dict) + +print(results) +``` +输出结果: +```json +[ + { + "data": { + "label": "MASK", + "left": 258.37087631225586, + "right": 374.7980499267578, + "top": 122.76758193969727, + "bottom": 254.20085906982422, + "confidence": 0.5630852 + }, + "id": 1 + } +] +``` +>"label":是否戴口罩,"confidence":置信度,其余字段为脸框的位置大小 + +### 将结果显示到原视频帧中 +```python +# results为口罩检测结果 +for result in results: + # print(result) + + label = result['data']['label'] + confidence = result['data']['confidence'] + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + color = (0, 255, 0) + if label == 'NO MASK': + color = (0, 0, 255) + + cv2.rectangle(frame, (left, top), (right, bottom), color, 3) + cv2.putText(frame, label + ":" + str(confidence), (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) +``` +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/F85FCBCA17994C8691024381CBDAFCA7?ynotemdtimestamp=1582271320612) + +>原DEMO中是英文+置信度显示在框的上面,尝试改为中文,遇到字体问题,以下是解决办法 + +### 图片写入中文 +需要事先准备ttf/otf等格式的字体文件 +```python +def paint_chinese_opencv(im,chinese,position,fontsize,color_bgr):#opencv输出中文 + img_PIL = Image.fromarray(cv2.cvtColor(im,cv2.COLOR_BGR2RGB))# 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf',fontsize,encoding="utf-8") # 加载字体文件 + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + draw.text(position,chinese,font=font,fill=color)# PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + img = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)# PIL图片转cv2 图片 + return img +``` +```python +for result in results: + # print(result) + + label = result['data']['label'] + confidence = result['data']['confidence'] + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label + ":" + str(confidence), (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + frame = paint_chinese_opencv(frame, label_cn + ":" + str(confidence), (left, top-36), 24, color) +``` +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/4F75E5C6F42F4C3CBE1341742D032847?ynotemdtimestamp=1582271320612) + + +### 提取头像文件 +```python +img_name = "avatar_%d.png" % (maskIndex) +path = "./result/" + img_name +image = frame[top - 10: bottom + 10, left - 10: right + 10] +cv2.imwrite(path, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9]) +``` + + +### 结果写入JSON +```python +with open("./result/2-mask_detection.json","w") as f: + json.dump(data, f) +``` + +>此处可以按照自己的应用需要改为输出到mysql,Redis,kafka ,MQ 供应用消化数据 + +### 完整代码如下 +```python +import paddlehub as hub +import cv2 +from PIL import Image, ImageDraw, ImageFont +import numpy as np +import json +import os + +module = hub.Module(name="pyramidbox_lite_mobile_mask") + + +def paint_chinese_opencv(im,chinese,position,fontsize,color_bgr):#opencv输出中文 + img_PIL = Image.fromarray(cv2.cvtColor(im,cv2.COLOR_BGR2RGB))# 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf',fontsize,encoding="utf-8") # 加载字体文件 + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + draw.text(position,chinese,font=font,fill=color)# PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + img = cv2.cvtColor(np.asarray(img_PIL),cv2.COLOR_RGB2BGR)# PIL图片转cv2 图片 + return img + + +result_path = './result' +if not os.path.exists(result_path): + os.mkdir(result_path) + + +name = "./result/1-mask_detection.mp4" +width = 1920 +height = 1080 +fps = 30 +fourcc = cv2.VideoWriter_fourcc(*'mp4v') +writer = cv2.VideoWriter(name, fourcc, fps, (width, height)) + +maskIndex = 0 +index = 0 +data = [] + +# capture = cv2.VideoCapture(0) # 打开摄像头 +capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while(1): + frameData = {} + + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + frame_copy = frame.copy() + + input_dict = {"data": [frame]} + + results = module.face_detection(data=input_dict) + # print(results) + + maskFrameDatas = [] + for result in results: + # print(result) + + label = result['data']['label'] + + confidence_origin = result['data']['confidence'] + confidence = round(confidence_origin, 2) + confidence_desc = str(confidence) + + top, right, bottom, left = int(result['data']['top']), int(result['data']['right']), int(result['data']['bottom']), int(result['data']['left']) + + #将当前帧保存为图片 + img_name = "avatar_%d.png" % (maskIndex) + path = "./result/" + img_name + image = frame[top - 10: bottom + 10, left - 10: right + 10] + cv2.imwrite(path, image,[int(cv2.IMWRITE_PNG_COMPRESSION), 9]) + + maskFrameData = {} + maskFrameData['top'] = top + maskFrameData['right'] = right + maskFrameData['bottom'] = bottom + maskFrameData['left'] = left + maskFrameData['confidence'] = float(confidence_origin) + maskFrameData['label'] = label + maskFrameData['img'] = img_name + + maskFrameDatas.append(maskFrameData) + + maskIndex += 1 + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame_copy, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + frame_copy = paint_chinese_opencv(frame_copy, label_cn, (left, top-36), 24, color) + + + writer.write(frame_copy) + + cv2.imshow('Mask Detection', frame_copy) + + frameData['frame'] = index + # frameData['seconds'] = int(index/fps) + frameData['data'] = maskFrameDatas + + data.append(frameData) + + print(json.dumps(frameData)) + + index += 1 + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +with open("./result/2-mask_detection.json","w") as f: + json.dump(data, f) + +writer.release() + +cv2.destroyAllWindows() +``` +## 3 制作网页呈现效果 +此DEMO是显示一个固定视频,分析导出的 json 渲染到网页里面,如需实时显示需要再次开发 + +### python 导出的数据 +使用上面的 python 文件完整执行后会有3个种类的数据输出,放到`web/video/result`目录下 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/329AC9C2D89447EABE6B8C45D620441E?ynotemdtimestamp=1582271320612) + +### json数据结构 +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/5D46F32061B047D4AB0AC016FE2A63A5?ynotemdtimestamp=1582271320612) + +### 使用数据渲染网页 + +- 网页中左侧 "视频播放视频区",播放同时实时回调当前播放的时间点 +- 根据时间点换算为帧(1秒30帧),遍历 json 数据中的数据 +- 把数据中对应的数据输出到网页右侧 "信息区" + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/6329B326216A4950BF35E0CB37CDC58F?ynotemdtimestamp=1582271320612) + +## 4 欢迎交流 + + +**百度飞桨合作伙伴:** + + +![image](https://note.youdao.com/yws/public/resource/b0a4695bc7d58aed3b1ff797409aee1e/DC72DE1CF51747138871BB0E3D54E20D?ynotemdtimestamp=1582271320612) + +北京奇想天外科技有限公司 diff --git a/demo/mask_detection/mask_detection/PaddleMaskDetection.py b/demo/mask_detection/mask_detection/PaddleMaskDetection.py new file mode 100644 index 0000000000000000000000000000000000000000..8d3d7b3219f93f46526ea8b75b65b8076b0aad89 --- /dev/null +++ b/demo/mask_detection/mask_detection/PaddleMaskDetection.py @@ -0,0 +1,125 @@ +import paddlehub as hub +import cv2 +from PIL import Image, ImageDraw, ImageFont +import numpy as np +import json +import os + +module = hub.Module(name="pyramidbox_lite_mobile_mask") + + +#opencv输出中文 +def paint_chinese(im, chinese, position, fontsize, color_bgr): + img_PIL = Image.fromarray(cv2.cvtColor( + im, cv2.COLOR_BGR2RGB)) # 图像从OpenCV格式转换成PIL格式 + font = ImageFont.truetype('思源黑体SC-Heavy.otf', fontsize, encoding="utf-8") + #color = (255,0,0) # 字体颜色 + #position = (100,100)# 文字输出位置 + color = color_bgr[::-1] + draw = ImageDraw.Draw(img_PIL) + # PIL图片上打印汉字 # 参数1:打印坐标,参数2:文本,参数3:字体颜色,参数4:字体 + draw.text(position, chinese, font=font, fill=color) + img = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR) # PIL图片转cv2 图片 + return img + + +result_path = './result' +if not os.path.exists(result_path): + os.mkdir(result_path) + +name = "./result/1-mask_detection.mp4" +width = 1920 +height = 1080 +fps = 30 +fourcc = cv2.VideoWriter_fourcc(*'mp4v') +writer = cv2.VideoWriter(name, fourcc, fps, (width, height)) + +maskIndex = 0 +index = 0 +data = [] + +# capture = cv2.VideoCapture(0) # 打开摄像头 +capture = cv2.VideoCapture('./2.mp4') # 打开视频文件 +while (1): + frameData = {} + + ret, frame = capture.read() # frame即视频的一帧数据 + + if ret == False: + break + + frame_copy = frame.copy() + + input_dict = {"data": [frame]} + + results = module.face_detection(data=input_dict) + # print(results) + + maskFrameDatas = [] + for result in results: + # print(result) + + label = result['data']['label'] + + confidence_origin = result['data']['confidence'] + confidence = round(confidence_origin, 2) + confidence_desc = str(confidence) + + top, right, bottom, left = int(result['data']['top']), int( + result['data']['right']), int(result['data']['bottom']), int( + result['data']['left']) + + #将当前帧保存为图片 + img_name = "avatar_%d.png" % (maskIndex) + path = "./result/" + img_name + image = frame[top - 10:bottom + 10, left - 10:right + 10] + cv2.imwrite(path, image, [int(cv2.IMWRITE_PNG_COMPRESSION), 9]) + + maskFrameData = {} + maskFrameData['top'] = top + maskFrameData['right'] = right + maskFrameData['bottom'] = bottom + maskFrameData['left'] = left + maskFrameData['confidence'] = float(confidence_origin) + maskFrameData['label'] = label + maskFrameData['img'] = img_name + + maskFrameDatas.append(maskFrameData) + + maskIndex += 1 + + color = (0, 255, 0) + label_cn = "有口罩" + if label == 'NO MASK': + color = (0, 0, 255) + label_cn = "无口罩" + + cv2.rectangle(frame_copy, (left, top), (right, bottom), color, 3) + # cv2.putText(frame, label, (left, top-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, color, 2) + origin_point = (left, top - 36) + frame_copy = paint_chinese(frame_copy, label_cn, origin_point, 24, + color) + + writer.write(frame_copy) + + cv2.imshow('Mask Detection', frame_copy) + + frameData['frame'] = index + # frameData['seconds'] = int(index/fps) + frameData['data'] = maskFrameDatas + + data.append(frameData) + + print(json.dumps(frameData)) + + index += 1 + + if cv2.waitKey(1) & 0xFF == ord('q'): + break + +with open("./result/2-mask_detection.json", "w") as f: + json.dump(data, f) + +writer.release() + +cv2.destroyAllWindows() diff --git a/demo/mask_detection/web/css/css.css b/demo/mask_detection/web/css/css.css new file mode 100644 index 0000000000000000000000000000000000000000..589c32ee4c4ce7c0f0867d9c6c23b32629a0785b --- /dev/null +++ b/demo/mask_detection/web/css/css.css @@ -0,0 +1,354 @@ +/*reset*/ +*{ margin: 0; padding: 0; box-sizing: border-box; } +body{ font-family: Helvetica Neue,Helvetica,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Noto Sans CJK SC,WenQuanYi Micro Hei,Arial,sans-serif; font-size: 14px; line-height: 1.4; color: #fff; -webkit-font-smoothing: antialiased; background: #2f3242;} +ul,ol{ list-style-type: none; } +a{ text-decoration: none; transition: all .2s ease; -webkit-transition: all .2s ease;} +img{border: none; } +table{ border-collapse:collapse; border-spacing:0; } +p{ line-height: 1.4 } +a {color: #333;} +a:hover {color: #666;} +input{ outline: none; } +button {background: none;border:none} +.clear:after{ content: " "; clear: both; display: block; } +h1,h2,h3,h4,h5,h6{font-style: normal;margin:0;padding:0;font-weight: normal;} +.clear:after{ content: " "; clear: both; display: block; } +.header {height:95px;padding-left:95px;padding-right:25px;} +.header .logo{padding-left:0px;padding-top:25px;} +.header .right-bar {float: right;padding-top:20px;} +.header .search {width: 313px; + height: 48px; + border: 2px solid #fff; /* stroke */ + -moz-border-radius: 26px; + -webkit-border-radius: 26px; + border-radius: 26px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background: url(../image/search.png) 10px center no-repeat; + padding-left:50px; + color: #fff; + font-size: 16px; + } + +.header .icon {display: inline-block;margin-left:40px;width:31px;height: 31px;vertical-align: middle;position: relative;} +.icon1 {background: url(../image/icon1.png) no-repeat center center;} +.icon2 {background: url(../image/icon2.png) no-repeat center center;} +.header .avatar {width:56px;height: 56px;border-radius: 100%;overflow: hidden;display: inline-block;margin-left:40px;vertical-align: middle;} +.header .right-bar .news-dot { + width: 15px; +height: 15px; +border: 3px solid #2f3141; /* stroke */ +-moz-border-radius: 9px; +-webkit-border-radius: 9px; +border-radius: 9px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2195f3; /* layer fill content */ +position: absolute; +right:0px; +top:0px; +} +.header .arrow {display: inline-block;background: url(../image/arrow.png) no-repeat 0 0;width:12px;height: 8px;margin-left:10px;} +.bd {padding-left:95px;position: relative;background: #2f3242;} +.bd .side {width:95px;position: absolute;left:0;top:0;} +.bd .con {background: #2b2d3c;} +.bd .con .hd {background: #6d7499;color: #fff;font-size: 18px;padding:0 25px 0 60px;line-height: 60px;height: 60px;} +.bd.chart {padding:0;} +.bd .con .hd .right-bar {float:right;} +.select-wrap {min-width: 150px;margin-top:10px;line-height: 38px; + height: 38px; + border-radius: 19px; + position: relative; + border:1px solid #9da3bd; + display: inline-block; + color: #fff; + margin-left:20px; +} +.select-wrap select {border: none; + outline: none; + width: 100%; + height: 40px; + line-height: 40px; + background: transparent; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + font-size: 16px; + color: #fff; + padding-left: 20px;} +.select-wrap:after{ + content: ""; + width: 14px; + height: 8px; + background: url(../image/arrow.png) no-repeat center; + position: absolute; + right: 20px; + top: 45%; + pointer-events: none; +} +.con-bd {position: relative;min-height: 960px;} +.maper {padding-left:380px;} +.con-left {left:0;top:0;position: absolute;width:380px;min-height: 960px;} +.con-left .map {padding:20px;} + +.con-left .ctr-pan {position:absolute;bottom:20px;left:0;width:380px;color: #fff;} +.con-left .ctr-pan ul{padding-left:20px;} +.con-left .ctr-pan li {padding:5px 0;} +.con-left .ctr-pan .icon {width:23px;height: 23px;display: inline-block;vertical-align: middle;margin-right:10px;} +.con-left .ctr-pan .icon3 {background: url(../image/icon3.png) no-repeat center center;} +.icon4 {background: url(../image/icon4.png) no-repeat center center;} +.con-left .ctr-pan .icon5 {background: url(../image/icon5.png) no-repeat center center;} +.con-left .ctr-pan .switch {border:2px solid #aaaaaa;border-radius:8px;height:15px;width:30px;display: inline-block;line-height: 15px;position: relative;vertical-align: middle;margin-left:10px;} +.con-left .ctr-pan .switch em {width: 7px; + height: 7px; + -moz-border-radius: 4px / 3px; + -webkit-border-radius: 4px / 3px; + border-radius: 4px / 3px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #aaa; /* layer fill content */ + display: inline-block; + vertical-align: middle; + position: absolute; + top:2px; + } + + .con-left .ctr-pan .switch.on em{left:16px;} + .con-left .ctr-pan .switch.off em{left:2px;} +.map-wrap {padding:20px 0 0 0;} + +.map-wrap img {} + +.zoom-bar { + width: 49px; +height: 231px; +border: 3px solid #757da3; /* stroke */ +-moz-border-radius: 27px; +-webkit-border-radius: 27px; +border-radius: 27px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2f3141; /* layer fill content */ +position: absolute; +right:50px; +top:30%; +text-align: center; +} +.zoom-bar .icon {width:30px;height: 30px;display: inline-block;} +.zoom-bar .zoom {background: url(../image/zoom.png) no-repeat center center;margin-top:5px;} +.zoom-bar .narrow {background: url(../image/narrow.png) no-repeat center center;margin-top:55px;} +.zoom-bar .mouse {background: url(../image/mu.png) no-repeat center center;margin-top:58px;} +.side .nav {padding-top:118px;} +.side .nav a{display: block;width:95px;height: 95px;margin:100px 0 0 0;position: relative;} +.side .nav a:hover {background-color: #2c2e3d;} + +.side .nav .nav1 {background-image: url(../image/nav1.png);background-repeat: no-repeat;background-position: center center;} +.side .nav .nav2 {background-image: url(../image/nav2.png);background-repeat: no-repeat;background-position: center center;} +.side .nav .nav3 {background-image: url(../image/nav3.png);background-repeat: no-repeat;background-position: center center;} +.side .news-dot { + width: 15px; +height: 15px; +border: 3px solid #2f3141; /* stroke */ +-moz-border-radius: 9px; +-webkit-border-radius: 9px; +border-radius: 9px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #2195f3; /* layer fill content */ +position: absolute; +left:55px; +top:30px; +} +.side .nav a.current {background-color: #2c2e3d;} + +.person-list {font-size: 16px;padding-left:60px;} +.person-list table {width:100%;} +.person-list thead td{color: #9ea3b4;height:70px;line-height: 70px;text-align: center;background: none;} + +.person-list td {color: #fff;text-align: center;padding:10px 0;} +.person-list .pro .item {display: inline-block;} + +.person-list .pro .item span {display:block;width:33px;height: 33px;margin:0 10px;margin-bottom:5px;} +.t1 {background: url(../image/t1.png) no-repeat center center;} +.t2 {background: url(../image/t2.png) no-repeat center center;} +.t3 {background: url(../image/t3.png) no-repeat center center;} +.t4 {background: url(../image/t4.png) no-repeat center center;} +.t5 {background: url(../image/t5.png) no-repeat center center;} +.t6 {background: url(../image/t6.png) no-repeat center center;} +.t7 {background: url(../image/t7.png) no-repeat center center;} +.person-list .dot {background: url(../image/dot.png) no-repeat 0 0;width:4px;height: 16px;display: inline-block;} +.person-list .time {font-size: 14px;color: #9ea3b4;} +.person-list tr:nth-child(odd) td {background: #3a3e52;} +.person-list thead tr:nth-child(odd) td {background: none;} +.person-list tr:nth-child(even) td {height:20px;} +.person-list tr td:last-child {padding:10px 10px;} +.line-female {border-left:4px solid #ed70bc;} +.line-male {border-left:4px solid #2196f3;} +.line-child {border-left:4px solid #e2e3e8;} + +.mask {background: rgba(0,0,0,.90);position: absolute;width: 100%;height: 100%;left: 0;top:0;z-index: 99;} +.mask .cp {background: url(../image/cp.png) no-repeat 0 0 ;width:154px;height: 59px;margin:10% auto 0 auto;} +.drop-area { + width: 247px; + height: 247px; + border:4px dotted #fff; + border-radius: 30px; + background: url(../image/icon6.png) no-repeat center 50px; + margin:10% auto 50px auto; + } + + .drop-area .text {font-size: 20px;text-align: center;color: #fff;margin-top:170px;} +.match-box {text-align: center;width:470px;margin: auto;color: #fff;font-size: 20px;} + +.match-box .match-bar {width: 316px; + height: 8px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #252734; /* layer fill content */ + -moz-box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + -webkit-box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + box-shadow: 0 0 48px rgba(0,0,0,.14); /* outer glow */ + position: relative; + display: inline-block; + margin:0 10px; + vertical-align: middle; + } + .match-box .match-bar span { +height: 8px; +-moz-border-radius: 4px; +-webkit-border-radius: 4px; +border-radius: 4px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #71799f; /* layer fill content */ +position: absolute; +left: 0; +top:0; + } + .match-box .match-bar span em { + width: 25px; +height: 25px; +-moz-border-radius: 12px / 13px; +-webkit-border-radius: 12px / 13px; +border-radius: 12px / 13px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #fff; /* layer fill content */ +-moz-box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +-webkit-box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +box-shadow: 0 5px 5px rgba(0,0,0,.13); /* drop shadow */ +position: absolute; +right:0; +top:-8px; +} +.match-res-box {text-align: center;margin:60px auto 80px auto;width:320px;counter-reset: #fff;font-size: 17px;} +.match-avatar { + width: 98px; +height: 98px; +-moz-border-radius: 49px; +-webkit-border-radius: 49px; +border-radius: 49px; /* border radius */ +-moz-background-clip: padding; +-webkit-background-clip: padding-box; +background-clip: padding-box; /* prevents bg color from leaking outside the border */ +background-color: #6b7397; /* layer fill content */ +overflow: hidden; +background: #6c7398; +margin: auto; +} +.match-res-box .text {text-align: center;margin-top:15px;} + +.match-res-box .text span {font-weight: bold;} +.avatar-s {width: 56px; + height: 56px; + -moz-border-radius: 28px; + -webkit-border-radius: 28px; + border-radius: 28px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #ed6fbb; /* layer fill content */ + display: inline-block; + overflow: hidden; + vertical-align: middle; + margin-right:20px; + } + +.camera-list {padding:75px 0 0 90px;} + +.camera-list li {float: left;width:400px;padding:0 40px 40px 40px;text-align: center;} + +.camera-list .video-box { + width: 315px; + height: 236px; + -moz-border-radius: 24px; + -webkit-border-radius: 24px; + border-radius: 24px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #37394b; /* layer fill content */ + overflow: hidden; +} +.camera-list li p {height: 44px;line-height: 44px;font-size: 18px;} +.camera-list li .icon {width:23px;height: 23px;display: inline-block;vertical-align: middle;margin-right:10px;} + +.camera-con {padding-right:350px;position: relative;margin-top:40px;padding-left:40px;} +.camera-con .list {width:240px;position: absolute;right:50px;top:0;text-align: center;} +.camera-con .list li {margin-bottom:30px;} +.camera-con .list li .ca {width:240px;height: 178px;overflow: hidden;border-radius: 20px;} +.video-box {width:100%;} +.camera-con .list li p {padding:10px 0 0 0;} + + +.camera-con .list li .icon {width: 23px; + height: 23px; + display: inline-block; + vertical-align: middle; + margin-right: 10px;} + + .tab li {float: left;} +.tab a {font-size: 18px;display: block;width: 180px;height: 58px;list-style: 58px;text-align: center;color: #fff;} +.tab a:hover, +.tab a.current {background: #8088ad;} +.chart .con .hd {padding-left:130px;} +.chart-bd {padding:20px;} +.chart-panel {padding-bottom:20px;} +.left-panel {width:790px;height:380px;float: left;background: #2f3242;padding:10px 20px;} + +.right-panel {width:1040px;height: 380px;float: left;margin-left:20px;} +.panel-hd .right-bar {float:right;color: #9ea3b4;font-size: 16px;} +.panel-hd {font-size: 25px;color:#fff;height:70px;} +.panel-hd .select-wrap select{color: #9ea3b4;font-size: 16px;} + +.right-panel .panel-hd {background: #3a3e52;height:96px;line-height: 96px;font-size: 25px;color: #fff;text-align: center;} +.right-panel .list {height:65px;padding:30px 0;} +.right-panel .list li {padding:30px 100px 30px 85px;position: relative;border-bottom:1px solid #505464;} +.right-panel .list li .avatar { + width: 42px; + height: 42px; + -moz-border-radius: 21px; + -webkit-border-radius: 21px; + border-radius: 21px; /* border radius */ + -moz-background-clip: padding; + -webkit-background-clip: padding-box; + background-clip: padding-box; /* prevents bg color from leaking outside the border */ + background-color: #9ba1b1; /* layer fill content */ + display: block; + position: absolute; + left:25px; + } + .right-panel .list li .time {font-size: 16px;color: #fff;} + .right-panel .list li .text {color: #9ea3b4;} + .right-panel .list li .dot {position: absolute;right:25px;background: url(../image/dot.png) no-repeat center center;width:4px;height: 16px;top:40px;} diff --git a/demo/mask_detection/web/image/arrow.png b/demo/mask_detection/web/image/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..5c636bad6ff3141bd8cfa06c65bcc13eb29e94dc Binary files /dev/null and b/demo/mask_detection/web/image/arrow.png differ diff --git a/demo/mask_detection/web/image/ava.png b/demo/mask_detection/web/image/ava.png new file mode 100644 index 0000000000000000000000000000000000000000..1cfdb55b4508af9c3800d7c8c2d134d1ef7d6ed7 Binary files /dev/null and b/demo/mask_detection/web/image/ava.png differ diff --git a/demo/mask_detection/web/image/b2f2.png b/demo/mask_detection/web/image/b2f2.png new file mode 100644 index 0000000000000000000000000000000000000000..5b48d035a3bad3de8745748fc39805bb04df7261 Binary files /dev/null and b/demo/mask_detection/web/image/b2f2.png differ diff --git a/demo/mask_detection/web/image/cam.png b/demo/mask_detection/web/image/cam.png new file mode 100644 index 0000000000000000000000000000000000000000..d6616b1ef0754f07ba38deec70227d40e5514ac5 Binary files /dev/null and b/demo/mask_detection/web/image/cam.png differ diff --git a/demo/mask_detection/web/image/cam1.png b/demo/mask_detection/web/image/cam1.png new file mode 100644 index 0000000000000000000000000000000000000000..c17ced6cde51b1a0820f55130e1b30d857d54ebb Binary files /dev/null and b/demo/mask_detection/web/image/cam1.png differ diff --git a/demo/mask_detection/web/image/cp.png b/demo/mask_detection/web/image/cp.png new file mode 100644 index 0000000000000000000000000000000000000000..23e6df3b23c795e5fc888c876153abfc35cf994c Binary files /dev/null and b/demo/mask_detection/web/image/cp.png differ diff --git a/demo/mask_detection/web/image/df.jpg b/demo/mask_detection/web/image/df.jpg new file mode 100644 index 0000000000000000000000000000000000000000..81ee01c892c6fa3ea879ed75e0711ff71e49380e Binary files /dev/null and b/demo/mask_detection/web/image/df.jpg differ diff --git a/demo/mask_detection/web/image/dot.png b/demo/mask_detection/web/image/dot.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7b067a59004fa8c5d61e75d1b12201218003c6 Binary files /dev/null and b/demo/mask_detection/web/image/dot.png differ diff --git a/demo/mask_detection/web/image/icon1.png b/demo/mask_detection/web/image/icon1.png new file mode 100644 index 0000000000000000000000000000000000000000..15c0d9a95d6a40435003ce12c674524aeb3edcd1 Binary files /dev/null and b/demo/mask_detection/web/image/icon1.png differ diff --git a/demo/mask_detection/web/image/icon2.png b/demo/mask_detection/web/image/icon2.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5067406fa028d5c1f25d70476a83350a30076a Binary files /dev/null and b/demo/mask_detection/web/image/icon2.png differ diff --git a/demo/mask_detection/web/image/icon3.png b/demo/mask_detection/web/image/icon3.png new file mode 100644 index 0000000000000000000000000000000000000000..1e08e6b8a7257c9ee92d293d35438ea702b10ba3 Binary files /dev/null and b/demo/mask_detection/web/image/icon3.png differ diff --git a/demo/mask_detection/web/image/icon4.png b/demo/mask_detection/web/image/icon4.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e55d4481c25abc11ce44691056d0f35119ee9c Binary files /dev/null and b/demo/mask_detection/web/image/icon4.png differ diff --git a/demo/mask_detection/web/image/icon5.png b/demo/mask_detection/web/image/icon5.png new file mode 100644 index 0000000000000000000000000000000000000000..44f6dd13003dc13063d688674ca8492fad510e5c Binary files /dev/null and b/demo/mask_detection/web/image/icon5.png differ diff --git a/demo/mask_detection/web/image/icon6.png b/demo/mask_detection/web/image/icon6.png new file mode 100644 index 0000000000000000000000000000000000000000..a6a6087780086c4c3a92b4af32093396be9c05cc Binary files /dev/null and b/demo/mask_detection/web/image/icon6.png differ diff --git a/demo/mask_detection/web/image/logo.png b/demo/mask_detection/web/image/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d42d78883b07db61e117c071950bd831198e2697 Binary files /dev/null and b/demo/mask_detection/web/image/logo.png differ diff --git a/demo/mask_detection/web/image/map.png b/demo/mask_detection/web/image/map.png new file mode 100644 index 0000000000000000000000000000000000000000..6319bf6b73640b69902df8eb83a8681b60b72ae5 Binary files /dev/null and b/demo/mask_detection/web/image/map.png differ diff --git a/demo/mask_detection/web/image/mask.png b/demo/mask_detection/web/image/mask.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8170c6b302f265c77eccf59baed56ffccce51c Binary files /dev/null and b/demo/mask_detection/web/image/mask.png differ diff --git a/demo/mask_detection/web/image/mask1.png b/demo/mask_detection/web/image/mask1.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c81d96f4909506af07b8f381372947e67bc00e Binary files /dev/null and b/demo/mask_detection/web/image/mask1.png differ diff --git a/demo/mask_detection/web/image/mu.png b/demo/mask_detection/web/image/mu.png new file mode 100644 index 0000000000000000000000000000000000000000..c5142e76ae63ab89da3f66abe4921af7f312e6ad Binary files /dev/null and b/demo/mask_detection/web/image/mu.png differ diff --git a/demo/mask_detection/web/image/narrow.png b/demo/mask_detection/web/image/narrow.png new file mode 100644 index 0000000000000000000000000000000000000000..e320c5f75375dcf73ef8c573a894e3c1c629941a Binary files /dev/null and b/demo/mask_detection/web/image/narrow.png differ diff --git a/demo/mask_detection/web/image/nav1.png b/demo/mask_detection/web/image/nav1.png new file mode 100644 index 0000000000000000000000000000000000000000..1d6fc53cdc7bc5950f88f689c9114b8cd67ccc6e Binary files /dev/null and b/demo/mask_detection/web/image/nav1.png differ diff --git a/demo/mask_detection/web/image/nav2.png b/demo/mask_detection/web/image/nav2.png new file mode 100644 index 0000000000000000000000000000000000000000..76e46557a40a7b10684f21cb803404a3fad7f5a1 Binary files /dev/null and b/demo/mask_detection/web/image/nav2.png differ diff --git a/demo/mask_detection/web/image/nav3.png b/demo/mask_detection/web/image/nav3.png new file mode 100644 index 0000000000000000000000000000000000000000..4686a0ee6d4e69c5f4fc84ec6059b2bab7f58310 Binary files /dev/null and b/demo/mask_detection/web/image/nav3.png differ diff --git a/demo/mask_detection/web/image/point1.png b/demo/mask_detection/web/image/point1.png new file mode 100644 index 0000000000000000000000000000000000000000..20a9cd5deec1af3909770d80d7c92879e8e18d7f Binary files /dev/null and b/demo/mask_detection/web/image/point1.png differ diff --git a/demo/mask_detection/web/image/point2.png b/demo/mask_detection/web/image/point2.png new file mode 100644 index 0000000000000000000000000000000000000000..24b156f657e80ab8e81714fb174b55014f900fb1 Binary files /dev/null and b/demo/mask_detection/web/image/point2.png differ diff --git a/demo/mask_detection/web/image/search.png b/demo/mask_detection/web/image/search.png new file mode 100644 index 0000000000000000000000000000000000000000..af1512bff475474d64bdfdd23626e8e0d89d2fdf Binary files /dev/null and b/demo/mask_detection/web/image/search.png differ diff --git a/demo/mask_detection/web/image/t1.png b/demo/mask_detection/web/image/t1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce8475af2b169bf3611914956e0700bdb1d930d4 Binary files /dev/null and b/demo/mask_detection/web/image/t1.png differ diff --git a/demo/mask_detection/web/image/t2.png b/demo/mask_detection/web/image/t2.png new file mode 100644 index 0000000000000000000000000000000000000000..91df4352a696f944dbb5ed2ed6808337e08ce4a8 Binary files /dev/null and b/demo/mask_detection/web/image/t2.png differ diff --git a/demo/mask_detection/web/image/t3.png b/demo/mask_detection/web/image/t3.png new file mode 100644 index 0000000000000000000000000000000000000000..8d17abecaa113d58c0d821472ad76732835cdb53 Binary files /dev/null and b/demo/mask_detection/web/image/t3.png differ diff --git a/demo/mask_detection/web/image/t4.png b/demo/mask_detection/web/image/t4.png new file mode 100644 index 0000000000000000000000000000000000000000..04b23fe4a54e75b72941bdb6bab2cf6cc2dcae2a Binary files /dev/null and b/demo/mask_detection/web/image/t4.png differ diff --git a/demo/mask_detection/web/image/t5.png b/demo/mask_detection/web/image/t5.png new file mode 100644 index 0000000000000000000000000000000000000000..bcd42b597eafa36fc34fb3a1c5e16be197f6588c Binary files /dev/null and b/demo/mask_detection/web/image/t5.png differ diff --git a/demo/mask_detection/web/image/t6.png b/demo/mask_detection/web/image/t6.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8bbab9bc9a95245300f17ec39fd8f5783ccf62 Binary files /dev/null and b/demo/mask_detection/web/image/t6.png differ diff --git a/demo/mask_detection/web/image/t7.png b/demo/mask_detection/web/image/t7.png new file mode 100644 index 0000000000000000000000000000000000000000..b89f96a372c6140fb1757d38503e53d53b15fb15 Binary files /dev/null and b/demo/mask_detection/web/image/t7.png differ diff --git a/demo/mask_detection/web/image/zoom.png b/demo/mask_detection/web/image/zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..b642f38e12608b2130a1c098182c95921e92790b Binary files /dev/null and b/demo/mask_detection/web/image/zoom.png differ diff --git a/demo/mask_detection/web/index.php b/demo/mask_detection/web/index.php new file mode 100644 index 0000000000000000000000000000000000000000..41c17aa7684adf72a46929968c16d907520eedab --- /dev/null +++ b/demo/mask_detection/web/index.php @@ -0,0 +1,241 @@ + + + + + + + + + + + + + + + + +
+
+ + +
+
+ +
+
+
+ +
+ +
+
+
摄像头分组显示 + +
+ 摄像头_1
+
+
+
+
+ + + + + + + + +

+ + + +
+ + +
+
+ +

无口罩

+





+

有口罩

+

+
+ +
+
deg);"> " height="" /> + +
+
px;top: px;">
+
+ +
+
+
+
+
+
+ + + + diff --git a/demo/mask_detection/web/js/ckplayer/ckplayer.js b/demo/mask_detection/web/js/ckplayer/ckplayer.js new file mode 100644 index 0000000000000000000000000000000000000000..6f91adc3a550a6bf2d09cb043623c9b17f875f6f --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/ckplayer.js @@ -0,0 +1,8182 @@ +/* + 软件名称:ckplayer + 软件版本:X1 + 软件作者:http://www.ckplayer.com + -------------------------------------------------------------------------------------------------------------------- + 开发说明: + 使用的主要程序语言:javascript(js)及actionscript3.0(as3.0)(as3.0主要用于flashplayer部分的开发,不在该页面呈现) + 功能:播放视频 + 特点:兼容HTML5-VIDEO(优先)以及FlashPlayer + ===================================================================================================================== +*/ +function ckplayerConfig() { + return { + flashvars: {},//用来补充flashvars里的对象 + languagePath: '',//语言包文件地址 + stylePath: '',//风格包文件地址 + config: { + fullInteractive: true,//是否开启交互功能 + delay: 30,//延迟加载视频,单位:毫秒 + timeFrequency: 100,//计算当前播放时间和加载量的时间频率,单位:毫秒 + autoLoad: true,//视频是否自动加载 + loadNext: 0,//多段视频预加载的段数,设置成0则全部加载 + definition: true,//是否使用清晰度组件 + smartRemove: true,//是否使用智能清理,使用该功能则在多段时当前播放段之前的段都会被清除出内存,减少对内存的使用 + bufferTime: 200,//缓存区的长度,单位:毫秒,不要小于10 + click: true,//是否支持屏幕单击暂停 + doubleClick: true,//是否支持屏幕双击全屏 + doubleClickInterval: 200,//判断双击的标准,即二次单击间隔的时间差之内判断为是双击,单位:毫秒 + keyDown: { + space: true,//是否启用空格键切换播放/暂停 + left: true,//是否启用左方向键快退 + right: true,//是否启用右方向键快进 + up: true,//是否支持上方向键增加音量 + down: true //是否支持下方向键减少音量 + }, + timeJump: 10,//快进快退时的秒数 + volumeJump: 0.1,//音量调整的数量,大于0小于1的小数 + timeScheduleAdjust: 1,//是否可调节调节栏,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动 + previewDefaultLoad: true,//预览图片是否默认加载,优点是鼠标第一次经过进度条即可显示预览图片 + promptSpotTime: false,//提示点文字是否在前面加上对应时间 + buttonMode: { + player: false,//鼠标在播放器上是否显示可点击形态 + controlBar: false,//鼠标在控制栏上是否显示可点击形态 + timeSchedule: true,//鼠标在时间进度条上是否显示可点击形态 + volumeSchedule: true //鼠标在音量调节栏上是否显示可点击形态 + }, + liveAndVod: { //直播+点播=回播功能 + open: false,//是否开启,开启该功能需要设置flashvars里live=true + vodTime: 2,//可以回看的整点数 + start: 'start' //回看请求参数 + }, + errorNum: 3,//错误重连次数 + playCorrect: false,//是否需要错误修正,这是针对rtmp的 + timeCorrect: true,//http视频播放时间错误纠正,有些因为视频格式的问题导致视频没有实际播放结束视频文件就返回了stop命令 + m3u8Definition: { //m3u8自动清晰度时按关键字来进行判断 + //tags:['200k','110k','400k','600k','1000k'] + }, + m3u8MaxBufferLength: 30,//m3u8每次缓冲时间,单位:秒数 + split: '|',//当视频地址采用字符形式并且需要使用逗号或其它符号来切割数组里定义 + timeStamp: '',//一个地址,用来请求当前时间戳,用于播放器内部时间效准 + mobileVolumeBarShow: false,//在移动端是否显示音量调节按钮 + addCallback: 'adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition'//需要支持的事件 + }, + menu: { //版权名称支持 + ckkey: '', + name: '', + link: '', + version: '', + domain: '', + more: [] + }, + style: { //风格部分内容配置,这里主要配置loading和logo以及广告的部分内容 + loading: { //视频加载前显示在播放器中间的图片,如果不需要可以删除该属性 + file: 'data:image/swf;base64,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', + align: 'center', + vAlign: 'middle', + offsetX: -100, + offsetY: -40 + }, + logo: { //显示在右上角的logo图片,如果不需要可以删除该属性 + file: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAUCAYAAAD4BKGuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVTSURBVHja1Fl/aJVVGP4cw/mH5tUWi3I53cA0WbeIzMgaq6lQoVawm0S6glHhIKM/TELICotqCxMSGWQRdFfRLEhc9mMxqA0rbdS2wsV0GkZXuaKUWlHvgeeNh7f3u1du3Ft74eGcnXu+c873vD/Pt0nZbDZyZL2gWZAQTBH8IjggeEjgPZASPIB+g/P7EsGT6J/BfHfjHFIv2Jpjj/+dlDskvCm42Jk7X3C7YJOgw/z2oOBGwdEYRW0RVAjOCZ4ugNggqwU3CTLRBJFyQ+xuwVRY14igB78tE9QKpgmeEHwkGKRnq9AeMesHRWwEsYGUxwSdBZ51ecweE4Lct0DsOVjaZvptA8jfC4JfghWpXIJ2jMY+EDShf1pwh6DvX5x1GtpDE43cNFlfhyFWpQ9xd5FgFo3fRi++C+2nCBNBRgU3O6RsEyyEQv4QLMb4CcE9RlFBLqS1WZ6BZ83A35ofVhuvfE5QJrjWebdgCJOx51qM1QgewbMzsO57MDQrB9DeC8ObHd5Xyb2eiNiQQxmtgkZBr+OuZwV7BIcF1RgbF1wTE2MbEccX48VY9sMzBilhTke/m+b1Q9lefpgruI7OsYhIGzPJuAnn3+6EM7vu1YKl5vkrYRSfCGZivCxoMklk7M5j6eFlXyRNRSAvAoFf0Fo/CC7LkbwuQjsZsf0qwbuI9wlYgIqGl6NEzDYibJ/gbmAfxpKoMDRcaSK8xZzjZbK+NMhSYoNSngV5e+ksKXp+JdqZwDDmdpSbsqa9gNAyi5JalSGv3iQ+dtNK9HvI+sNBh2AhvNYVaH+msRtAdsa4ehoKCuQsoP2PY8+kCSkJ5IRWjD2FZ4/BOFSWYv9KhI40eUKQ31CqdnLM1c1OOnHufKSS+iEZvgHNhji8g1yT5VZKdCnHO+ajvrYK/I7GkuSWjwvq8Mzl5M79NF89aCHaBNXmWv0sQVUUZEDwsDnbr2i9s31lKyGuFs7kITEBC+snJaToRYIFrRN0CeYgoSUxJ23WUm85eB41b4IUuIvGtyIMVMY8lzHGMoYworF7J/onKYk10/wVQL6zXYr+Zq9aOEhuXZPDel8Q3If+HMzTeHPKlForEK+mws3SMfH2UMxNLIJbasKsoIQZwVLbKFkN4T1C3HxUMM+EkCAfgjwNV40Y304KriOP+jIHqa+jvYsqnH/kqzKaGCFZxWnoTqooxky8+dHUsOGwr6Jfi9jmlVVTHGLnot9L3qGWqCToWYYRF5fDa96mtb93yI2g8B0IWxlTHWmi/hOG00D4mEJfJ5WhQX7ySCsDUaNkJeud6+sgXCgs3OLEG2/xdZSh10JBeiB1zQU0HuQdSib60rOdm9kFToIL8hmFiRHzm1YM0ylet5k579OFpcUk4I0oD0/QuJ7tcBy5ERY6ixdrh5uNwN3bUV7pd4E+J958HmPxbRRydqK/in6vxj5aH9din/udEPKtuU1GqBL24xJwBInQWiHLcbQVKBXTzkVpHP0tWHsIpZUqPeWcrScXuX2ImRkqlufBhdQl15ig3WLKH0/SeAmtD+uprBqGx1ThhlWN5LKG4lcNKbDblFDjVDU0wWK7yLLqnPNk6cKzKsfXt1GQmQQXSuwymhd3tr9lkvPJMUV152kc2PsmUEMxtzdPRk2SNX2DQ3Vhr02Is18LXjHVAz/bG0NEK8johus3UBiwyfkYlDkQUyLaWrwZBrbHMaB8Z3PJLaYk8IIVKKPSJdxbv3ecynNzLNr33GKLV1YVW4IyfycXfq0UxP4X5HJdXCqX4Wv0AKqYkkipw4LG6WxMNi+GhAtH+M/K8wVe7wuWvwQYAFT+UsGCXmX3AAAAAElFTkSuQmCC', + align: 'right', + vAlign: 'top', + offsetX: -100, + offsetY: 10 + }, + advertisement: { //广告相关的配置 + time: 5,//广告默认播放时长以及多个广告时每个广告默认播放时间,单位:秒 + method: 'get',//广告监测地址默认请求方式,get/post + videoForce: false,//视频广告是否强制播放结束 + videoVolume: 0.8,//视频音量 + skipButtonShow: true,//是否显示跳过广告按钮 + linkButtonShow: true,//是否显示广告链接按钮,如果选择显示,只有在提供了广告链接地址时才会显示 + muteButtonShow: true,//是否在视频广告时显示静音按钮 + closeButtonShow: true,//暂停时是否显示关闭广告按钮 + closeOtherButtonShow: true,//其它广告是否需要关闭广告按钮 + frontSkipButtonDelay: 1,//前置广告跳过广告按钮延时显示的时间,单位:秒 + insertSkipButtonDelay: 0,//插入广告跳过广告按钮延时显示的时间,单位:秒 + endSkipButtonDelay: 0,//后置广告跳过广告按钮延时显示的时间,单位:秒 + frontStretched: 2,//前置广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + insertStretched: 2,//插入广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + pauseStretched: 2,//暂停广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + endStretched: 2 //结束广告拉伸方式,0=原始大小,1=自动缩放,2=只有当广告的宽或高大于播放器宽高时才进行缩放,3=参考播放器宽高,4=宽度参考播放器宽、高度自动,5=高度参考播放器高、宽度自动 + }, + video: { //视频的默认比例,当视频元数据里没有宽和高属性时默认使用该宽高 + defaultWidth: 4,//宽度 + defaultHeight: 3 //高度 + } + } + }; +} +! (function() { + var javascriptPath = ''; + !function() { + var scriptList = document.scripts, + thisPath = scriptList[scriptList.length - 1].src; + javascriptPath = thisPath.substring(0, thisPath.lastIndexOf('/') + 1); + } (); + var ckplayer = function(obj) { + /* + javascript部分开发所用的注释说明: + 1:初始化-程序调用时即运行的代码部分 + 2:定义样式-定义容器(div,p,canvas等)的样式表,即css + 3:监听动作-监听元素节点(单击-click,鼠标进入-mouseover,鼠标离开-mouseout,鼠标移动-mousemove等)事件 + 4:监听事件-监听视频的状态(播放,暂停,全屏,音量调节等)事件 + 5:共用函数-这类函数在外部也可以使用 + 6:全局变量-定义成全局使用的变量 + 7:其它相关注释 + 全局变量说明: + 在本软件中所使用到的全局变量(变量(类型)包括Boolean,String,Int,Object(包含元素对象和变量对象),Array,Function等) + 下面列出重要的全局变量: + V:Object:视频对象 + VA:Array:视频列表(包括视频地址,类型,清晰度说明) + ID:String:视频ID + CB:Object:控制栏各元素的集合对象 + PD:Object:内部视频容器对象 + --------------------------------------------------------------------------------------------- + 程序开始 + 下面为需要初始化配置的全局变量 + 初始化配置 + config:全局变量定义一些基本配置 + */ + this.config = { + videoDbClick: true,//是否支持双击全屏/退出全屏动作 + errorTime: 100,//延迟判断失败的时间,单位:毫秒 + videoDrawImage: false,//是否使用视频drawImage功能,注意,该功能在移动端表现不了 + adSkipClick: 'javaScript->adjump' //h5环境中点击跳过广告按钮触发的功能 + }; + //全局变量:播放器默认配置,在外部传递过来相应配置后,则进行相关替换 + this.varsConfig = { + playerID: '',//播放器ID + container: '',//视频容器的ID + variable: 'ckplayer',//播放函数(变量)名称 + volume: 0.8,//默认音量,范围0-1 + poster: '',//封面图片地址 + autoplay: false,//是否自动播放 + loop: false,//是否需要循环播放 + live: false,//是否是直播 + duration: 0,//指定总时间 + seek: 0,//默认需要跳转的秒数 + drag: '',//拖动时支持的前置参数 + front: '',//前一集按钮动作 + next: '',//下一集按钮动作 + loaded: '',//加载播放器后调用的函数 + flashplayer: false,//设置成true则强制使用flashplayer + html5m3u8: false,//PC平台上是否使用h5播放器播放m3u8 + track: null,//字幕轨道 + cktrack: null,//ck字幕 + preview: null,//预览图片对象 + prompt: null,//提示点功能 + video: null,//视频地址 + config: '',//调用配置函数名称 + type: '',//视频格式 + crossorigin: '',//设置html5视频的crossOrigin属性 + crossdomain: '',//安全策略文件地址 + unescape: false,//默认flashplayer里需要解码 + mobileCkControls: false,//移动端h5显示控制栏 + mobileAutoFull: true,//移动端是否默认全屏播放 + playbackrate: 1,//默认倍速 + h5container: '',//h5环境中使用自定义容器 + debug: false,//是否开启调试模式 + //以下为广告相关配置 + adfront: '', + adfronttime: '', + adfrontlink: '', + adpause: '', + adpausetime: '', + adpauselink: '', + adinsert: '', + adinserttime: '', + adinsertlink: '', + inserttime: '', + adend: '', + adendtime: '', + adendlink: '', + advertisements: '' + }; + this.vars = {};//全局变量:语言配置 + this.language = { + volume: '音量:', + play: '点击播放', + pause: '点击暂停', + full: '点击全屏', + escFull: '退出全屏', + mute: '点击静音', + escMute: '取消静音', + front: '上一集', + next: '下一集', + definition: '点击选择清晰度', + playbackRate: '点击选择速度', + error: '加载出错', + adTime: '广告{$second}秒', + skipAd: '跳过广告', + skipAdTime: '{$second}秒后可跳过广告', + adLink: '查看详情' + }; + //全局变量:右键菜单:[菜单标题,类型(link:链接,default:灰色,function:调用函数,javascript:调用js函数),执行内容(包含链接地址,函数名称),[line(间隔线)]] + this.contextMenu = [['ckplayer', 'link', 'http://www.ckplayer.com', '_blank'], ['version:X1', 'default', 'line']]; + //全局变量:错误提示列表 + this.errorList = [['000', 'Object does not exist'], ['001', 'Variables type is not a object'], ['002', 'Video object does not exist'], ['003', 'Video object format error'], ['004', 'Video object format error'], ['005', 'Video object format error'], ['006', '[error] does not exist '], ['007', 'Ajax error'], ['008', 'Ajax error'], ['009', 'Ajax object format error'], ['010', 'Ajax.status:[error]']]; + //全局变量:HTML5变速播放的值数组/如果不需要可以设置成null + this.playbackRateArr = [[0.5, '0.5倍'], [1, '正常'], [1.25, '1.25倍'], [1.5, '1.5倍'], [2, '2倍速'], [4, '4倍速']]; + //全局变量:HTML5默认变速播放的值 + this.playbackRateDefault = 1; + //全局变量:定义logo + this.logo = ''; + //全局变量:是否加载了播放器 + this.loaded = false; + //全局变量:计时器,监听视频加载出错的状态 + this.timerError = null; + //全局变量:是否出错 + this.error = false; + //全局变量:出错地址的数组 + this.errorUrl = []; + //全局变量:计时器,监听全屏与非全屏状态 + this.timerFull = null; + //全局变量:是否全屏状态 + this.full = false; + //全局变量:计时器,监听当前的月/日 时=分=秒 + this.timerTime = null; + //全局变量:计时器,监听视频加载 + this.timerBuffer = null; + //全局变量:设置进度按钮及进度条是否跟着时间变化,该属性主要用来在按下进度按钮时暂停进度按钮移动和进度条的长度变化 + this.isTimeButtonMove = true; + //全局变量:进度栏是否有效,如果是直播,则不需要监听时间让进度按钮和进度条变化 + this.isTimeButtonDown = false; + //全局变量:用来模拟双击功能的判断 + this.isClick = false; + //全局变量:计时器,用来模拟双击功能的计时器 + this.timerClick = null; + //全局变量:计时器,旋转loading + this.timerLoading = null; + //全局变量:计时器,监听鼠标在视频上移动显示控制栏 + this.timerCBar = null; + //全局变量:播放视频时如果该变量的值大于0,则进行跳转后设置该值为0 + this.needSeek = 0; + //全局变量:当前音量 + this.volume = 0; + //全局变量:静音时保存临时音量 + this.volumeTemp = 0; + //全局变量/变量类型:Number/功能:当前播放时间 + this.time = 0; + //全局变量:定义首次调用 + this.isFirst = true; + //全局变量:是否使用HTML5-VIDEO播放 + this.html5Video = true; + //全局变量记录视频容器节点的x;y + this.pdCoor = { + x: 0, + y: 0 + }; + //全局变量:判断当前使用的播放器类型,html5video或flashplayer + this.playerType = ''; + //全局变量:加载进度条的长度 + this.loadTime = 0; + //全局变量:body对象 + this.body = document.body || document.documentElement; + //全局变量:播放器 + this.V = null; + //全局变量:保存外部js监听事件数组 + this.listenerJsArr = []; + //全局变量:保存控制栏显示元素的总宽度 + this.buttonLen = 0; + //全局变量:保存控制栏显示元素的数组 + this.buttonArr = []; + //全局变量:保存按钮元素的宽 + this.buttonWidth = {}; + //全局变量:保存播放器上新增元件的数组 + this.elementArr = []; + //全局变量:保存播放器上弹幕的临时数组 + this.elementTempArr = []; + //全局变量:字幕内容 + this.track = []; + //全局变量:字幕索引 + this.trackIndex = 0; + //全局变量:当前显示的字幕内容 + this.nowTrackShow = { + sn: '' + }; + //全局变量:保存字幕元件数组 + this.trackElement = []; + //全局变量:将视频转换为图片 + this.timerVCanvas = null; + //全局变量:animate,缓动对象数组 + this.animateArray = []; + //全局变量:保存animate的元件 + this.animateElementArray = []; + //全局变量:保存需要在暂停时停止缓动的数组 + this.animatePauseArray = []; + //全局变量:预览图片加载状态/0=没有加载,1=正在加载,2=加载完成 + this.previewStart = 0; + //全局变量:预览图片容器 + this.previewDiv = null; + //全局变量:预览框 + this.previewTop = null; + //全局变量:预览框的宽 + this.previewWidth = 120; + //全局变量:预览图片容器缓动函数 + this.previewTween = null; + //全局变量:是否是m3u8格式,是的话则可以加载hls.js + this.isM3u8 = false; + //全局变量:保存提示点数组 + this.promptArr = []; + //全局变量:显示提示点文件的容器 + this.promptElement = null; + //全局变量:配置文件函数 + this.ckplayerConfig = {}; + //全局变量:控制栏是否显示 + this.showFace = true; + //全局变量:是否监听过h5的错误 + this.errorAdd = false; + //全局变量:是否发送了错误 + this.errorSend = false; + //全局变量:控制栏是否隐藏 + this.controlBarIsShow = true; + //全局变量,保存当前缩放比例 + this.videoScale = 1; + //全局变量:设置字体 + this.fontFamily = '"Microsoft YaHei"; YaHei; "\5FAE\8F6F\96C5\9ED1"; SimHei; "\9ED1\4F53";Arial'; + //全局变量:记录第一次拖动进度按钮时的位置 + this.timeSliderLeftTemp = 0; + //全局变量:判断是否记录了总时间 + this.durationSendJS = false; + //全局变量:初始化广告分析是否结束设置 + this.adAnalysisEnd = false; + //全局变量:广告变量 + this.advertisements = {}; + //全局变量:是否是第一次播放视频 + this.isFirstTimePlay = true; + //全局变量:当前需要播放的广告类型 + this.adType = ''; + //全局变量:播放广告计数 + this.adI = 0; + //全局变量:要播放的临时地址 + this.videoTemp = { + src: '', + source: '', + currentSrc: '', + loop: false + }; + //全局变量:当前要播放的广告组总时间 + this.adTimeAllTotal = 0; + //全局变量:肖前要播放的广告时间 + this.adTimeTotal = 0; + //全局变量:用来做倒计时 + this.adCountDownObj = null; + //全局变量:前置,中插,结尾广告是否已开始运行 + this.adPlayStart = false; + //全局变量:目前是否在播放广告 + this.adPlayerPlay = false; + //全局变量:当前广告是否暂停 + this.adIsPause = false; + //全局变量:视频广告是否静音 + this.adVideoMute = false; + //全局变量:是否需要记录当前播放的时间供广告播放结束后进行跳转 + this.adIsVideoTime = false; + //全局变量:后置广告是否播放 + this.endAdPlay = false; + //全局变量:暂停广告是否在显示 + this.adPauseShow = false; + //全局变量:是否需要重置广告以实现重新播放时再播放一次 + this.adReset = false; + //全局变量:是否在播放广告时播放过视频广告 + this.adVideoPlay = false; + if (obj) { + this.embed(obj); + } + }; + ckplayer.prototype = { + /* + 主要函数部分开始 + 主接口函数: + 调用播放器需初始化该函数 + */ + embed: function(c) { + //c:Object:是调用接口传递的属性对象 + if (window.location.href.substr(0, 7) == 'file://') {//如果是使用的file协议打网页则弹出提示 + alert('Please use the HTTP protocol to open the page'); + return; + } + if (c == undefined || !c) { + this.eject(this.errorList[0]); + return; + } + if (typeof(c) != 'object') { + this.eject(this.errorList[1]); + } + this.vars = this.standardization(this.varsConfig, c); + if (!this.vars['mobileCkControls'] && this.isMobile()) { + this.vars['flashplayer'] = false; + this.showFace = false; + } + var videoString = this.vars['video']; + if (!videoString) { + this.eject(this.errorList[2]); + return; + } + if (typeof(videoString) == 'string') { + if (videoString.substr(0, 3) == 'CK:' || videoString.substr(0, 3) == 'CE:' || videoString.substr(8, 3) == 'CK:' || videoString.substr(8, 3) == 'CE:') { + this.vars['flashplayer'] = true; + } + } + if (typeof(videoString) == 'object') { + if (videoString.length > 1) { + if (videoString[0][0].substr(0, 3) == 'CK:' || videoString[0][0].substr(0, 3) == 'CE:' || videoString[0][0].substr(8, 3) == 'CK:' || videoString[0][0].substr(8, 3) == 'CE:') { + this.vars['flashplayer'] = true; + } + } + } + if (this.vars['config']) { + this.ckplayerConfig = eval(this.vars['config'] + '()'); + } else { + this.ckplayerConfig = ckplayerConfig(); + } + if ((!this.supportVideo() && this.vars['flashplayer'] != '') || (this.vars['flashplayer'] && this.uploadFlash()) || !this.isMsie()) { + this.html5Video = false; + this.getVideo(); + } else if (videoString) { + //判断视频数据类型 + this.analysedVideoUrl(videoString); + return this; + } else { + this.eject(this.errorList[2]); + } + }, + /* + 内部函数 + 根据外部传递过来的video开始分析视频地址 + */ + analysedVideoUrl: function(video) { + var i = 0, + y = 0; + var thisTemp = this; + this.VA = [];//定义全局变量VA:视频列表(包括视频地址,类型,清晰度说明) + if (typeof(video) == 'string') { //如果是字符形式的则判断后缀进行填充 + if (video.substr(0, 8) != 'website:') { + this.VA = [[video, '', '', 0]]; + var fileExt = this.getFileExt(video); + switch (fileExt) { + case '.mp4': + this.VA[0][1] = 'video/mp4'; + break; + case '.ogg': + this.VA[0][1] = 'video/ogg'; + break; + case '.webm': + this.VA[0][1] = 'video/webm'; + break; + default: + break; + } + this.getVideo(); + } else { + if (this.html5Video) { + var ajaxObj = { + url: video.substr(8), + success: function(data) { + if (data) { + thisTemp.analysedUrl(data); + } else { + thisTemp.eject(thisTemp.errorList[5]); + this.VA = video; + thisTemp.getVideo(); + } + } + }; + this.ajax(ajaxObj); + } else { + this.VA = video; + this.getVideo(); + } + + } + } else if (typeof(video) == 'object') { //如果视频地址是对象或数组 + if (!this.isUndefined(typeof(video.length))) { //如果视频地址是数组 + if (!this.isUndefined(typeof(video[0].length))) { //如果视频地址是二维数组 + this.VA = video; + } + this.getVideo(); + } else { + /* + 如果video格式是对象形式,则分二种 + 如果video对象里包含type,则直接播放 + */ + if (!this.isUndefined(video['type'])) { + this.VA.push([video['file'], video['type'], '', 0]); + this.getVideo(); + } else { + this.eject(this.errorList[5]); + } + } + } else { + this.eject(this.errorList[4]); + } + }, + /* + 对请求到的视频地址进行重新分析 + */ + analysedUrl: function(data) { + this.vars = this.standardization(this.vars, data); + if (!this.isUndefined(data['video'])) { + this.vars['video'] = data['video']; + } + this.analysedVideoUrl(this.vars['video']); + }, + /* + 内部函数 + 检查浏览器支持的视频格式,如果是则将支持的视频格式重新分组给播放列表 + */ + getHtml5Video: function() { + var va = this.VA; + var nva = []; + var mobile = false; + var video = document.createElement('video'); + var codecs = function(type) { + var cod = ''; + switch (type) { + case 'video/mp4': + cod = 'avc1.4D401E, mp4a.40.2'; + break; + case 'video/ogg': + cod = 'theora, vorbis'; + break; + case 'video/webm': + cod = 'vp8.0, vorbis'; + break; + default: + break; + } + return cod; + }; + var supportType = function(vidType, codType) { + if (!video.canPlayType) { + this.html5Video = false; + return; + } + var isSupp = video.canPlayType(vidType + ';codecs="' + codType + '"'); + if (isSupp == '') { + return false + } + return true; + }; + if (this.vars['flashplayer'] || !this.isMsie()) { + this.html5Video = false; + return; + } + if (this.isMobile()) { + mobile = true; + } + for (var i = 0; i < va.length; i++) { + var v = va[i]; + if (v) { + if (v[1] != '' && !mobile && supportType(v[1], codecs(v[1])) && v[0].substr(0, 4) != 'rtmp') { + nva.push(v); + } + if ((this.getFileExt(v[0]) == '.m3u8' || this.vars['type'] == 'video/m3u8' || this.vars['type'] == 'm3u8' || v[1] == 'video/m3u8' || v[1] == 'm3u8') && this.vars['html5m3u8']) { + this.isM3u8 = true; + nva.push(v); + } + } + } + if (nva.length > 0) { + this.VA = nva; + } else { + if (!mobile) { + this.html5Video = false; + } + } + }, + /* + 内部函数 + 根据视频地址开始构建播放器 + */ + getVideo: function() { + var thisTemp = this; + var v = this.vars; + //如果存在广告字段则开始分析广告 + if (!this.adAnalysisEnd && (v['adfront'] != '' || v['adpause'] != '' || v['adinsert'] != '' || v['adend'] != '' || v['advertisements'] != '')) { + this.adAnalysisEnd = true; + this.adAnalysis(); + return; + } + //如果存在字幕则加载 + if (this.V) { //如果播放器已存在,则认为是从newVideo函数发送过来的请求 + this.changeVideo(); + return; + } + if (this.vars['cktrack']) { + this.loadTrack(); + } + if (this.supportVideo() && !this.vars['flashplayer']) { + this.getHtml5Video(); //判断浏览器支持的视频格式 + } + var src = '', + source = '', + poster = '', + loop = '', + autoplay = '', + track = ''; + var video = v['video']; + var i = 0; + this.CD = this.getByElement(v['container']); + volume = v['volume']; + if (!this.CD) { + this.eject(this.errorList[6], v['container']); + return false; + } + //开始构建播放器容器 + this.V = undefined; + var thisPd = null; + if (v['h5container'] != '') { + thisPd = this.getByElement(v['h5container']); + if (this.isUndefined(thisPd)) { + thisPd = null; + } + } + var isVideoH5 = null; //isUndefined thisPd + if (v['playerID'] != '') { + isVideoH5 = this.getByElement('#' + v['playerID']); + if (this.isUndefined(isVideoH5)) { + isVideoH5 = null; + } + } + if (thisPd != null && isVideoH5 != null) { + this.PD = thisPd; //PD:定义播放器容器对象全局变量 + } else { + var playerID = 'ckplayer' + this.randomString(); + var playerDiv = document.createElement('div'); + playerDiv.className = playerID; + this.CD.innerHTML = ''; + this.CD.appendChild(playerDiv); + this.PD = this.getByElement(playerID); //PD:定义播放器容器对象全局变量 + } + this.css(this.CD, { + backgroundColor: '#000000', + overflow: 'hidden', + position: 'relative' + }); + this.css(this.PD, { + backgroundColor: '#000000', + width: '100%', + height: '100%', + fontFamily: this.fontFamily + }); + if (this.html5Video) { //如果支持HTML5-VIDEO则默认使用HTML5-VIDEO播放器 + //禁止播放器容器上鼠标选择文本 + this.PD.onselectstart = this.PD.ondrag = function() { + return false; + }; + //播放器容器构建完成并且设置好样式 + //构建播放器 + if (this.VA.length == 1) { + this.videoTemp['src'] = decodeURIComponent(this.VA[0][0]); + src = ' src="' + this.videoTemp['src'] + '"'; + + } else { + var videoArr = this.VA.slice(0); + videoArr = this.arrSort(videoArr); + for (i = 0; i < videoArr.length; i++) { + var type = ''; + var va = videoArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + if (type == ' type="video/m3u8"' || type == ' type="m3u8"') { + type = ''; + } + } + source += ''; + } + this.videoTemp['source'] = source; + } + //分析视频地址结束 + if (v['autoplay']) { + autoplay = ' autoplay="autoplay"'; + } + if (v['poster']) { + poster = ' poster="' + v['poster'] + '"'; + } + if (v['loop']) { + loop = ' loop="loop"'; + } + if (v['seek'] > 0) { + this.needSeek = v['seek']; + } + if (v['track'] != null && v['cktrack'] == null) { + var trackArr = v['track']; + var trackDefault = ''; + var defaultHave = false; + for (i = 0; i < trackArr.length; i++) { + var trackObj = trackArr[i]; + if (trackObj['default'] && !defaultHave) { + trackDefault = ' default'; + defaultHave = true; + } else { + trackDefault = ''; + } + track += ''; + } + } + var autoLoad = this.ckplayerConfig['config']['autoLoad']; + var preload = ''; + if (!autoLoad) { + preload = ' preload="meta"'; + } + var vid = this.randomString(); + var controls = ''; + if (!this.showFace) { + controls = ' controls="controls"'; + } + var mobileAutoFull = v['mobileAutoFull']; + var mobileautofull = ''; + if (!mobileAutoFull) { + mobileautofull = ' x-webkit-airplay="true" playsinline webkit-playsinline="true" x5-video-player-type="h5"'; + } + if (isVideoH5 != null && thisPd != null) { + this.V = isVideoH5; + if (v['poster']) { + this.V.poster = v['poster']; + } + } else { + var html = ''; + if (!this.isM3u8) { + html = ''; + } else { + html = ''; + } + this.PD.innerHTML = html; + this.V = this.getByElement('#' + vid); //V:定义播放器对象全局变量 + } + if (this.vars['crossorigin']) { + this.V.crossOrigin = this.vars['crossorigin']; + } + try { + this.V.volume = volume; //定义音量 + if (this.playbackRateArr && this.vars['playbackrate'] > -1) { + if (this.vars['playbackrate'] < this.playbackRateArr.length) { + this.playbackRateDefault = this.vars['playbackrate']; + } + this.V.playbackRate = this.playbackRateArr[this.playbackRateDefault][0]; //定义倍速 + } + } catch(error) {} + this.css(this.V, { + width: '100%', + height: '100%' + }); + if (this.isM3u8) { + var loadJsHandler = function() { + thisTemp.embedHls(thisTemp.VA[0][0], v['autoplay']); + }; + this.loadJs(javascriptPath + 'hls/hls.min.js', loadJsHandler); + } + this.css(this.V, 'backgroundColor', '#000000'); + //创建一个画布容器 + if (this.config['videoDrawImage']) { + var canvasID = 'vcanvas' + this.randomString(); + var canvasDiv = document.createElement('div'); + canvasDiv.className = canvasID; + this.PD.appendChild(canvasDiv); + this.MD = this.getByElement(canvasID); //定义画布存储容器 + this.css(this.MD, { + backgroundColor: '#000000', + width: '100%', + height: '100%', + position: 'absolute', + display: 'none', + cursor: 'pointer', + left: '0px', + top: '0px', + zIndex: '10' + }); + var cvid = 'ccanvas' + this.randomString(); + this.MD.innerHTML = this.newCanvas(cvid, this.PD.offsetWidth, this.PD.offsetHeight); + this.MDC = this.getByElement(cvid + '-canvas'); + this.MDCX = this.MDC.getContext('2d'); + } + this.playerType = 'html5video'; + //播放器构建完成并且设置好样式 + //建立播放器的监听函数,包含操作监听及事件监听 + this.addVEvent(); + //根据清晰度的值构建清晰度切换按钮 + if (this.showFace) { + this.definition(); + if (!this.vars['live'] && this.playbackRateArr && this.vars['playbackrate'] > -1) { + this.playbackRate(); + } + if (v['autoplay']) { + this.loadingStart(true); + } + } + this.playerLoad(); + } else { //如果不支持HTML5-VIDEO则调用flashplayer + this.embedSWF(); + } + }, + /* + 分析广告数据 + */ + adAnalysis: function() { + var thisTemp = this; + var v = this.vars; + var isAdvShow = []; + var i = 0; + if (v['advertisements'] != '' && v['advertisements'].substr(0, 8) == 'website:') { + var ajaxObj = { + url: v['advertisements'].substr(8), + success: function(data) { + if (data) { + var newData = {}; + var val = null; + //对广告进行分析 + try { + if (!thisTemp.isUndefined(data['front'])) { + val = thisTemp.arrayDel(data['front']); + if (!thisTemp.isUndefined(val)) { + newData['front'] = val; + } + val = thisTemp.arrayDel(data['pause']); + if (!thisTemp.isUndefined(val)) { + newData['pause'] = val; + } + val = thisTemp.arrayDel(data['insert']); + if (!thisTemp.isUndefined(val)) { + newData['insert'] = val; + if (!thisTemp.isUndefined(data['inserttime'])) { + newData['inserttime'] = thisTemp.arrayInt(data['inserttime']); + isAdvShow = []; + for (i = 0; i < newData['inserttime'].length; i++) { + isAdvShow.push(false); + } + newData['insertPlay'] = isAdvShow; + } + } + val = thisTemp.arrayDel(data['end']); + if (!thisTemp.isUndefined(val)) { + newData['end'] = val; + } + val = thisTemp.arrayDel(data['other']); + if (!thisTemp.isUndefined(val)) { + newData['other'] = val; + isAdvShow = []; + var arrTemp = []; + for (i = 0; i < val.length; i++) { + isAdvShow.push(false); + arrTemp.push(parseInt('0' + val[i]['startTime'])); + } + newData['othertime'] = arrTemp; + newData['otherPlay'] = isAdvShow; + } + } + } catch(event) { + thisTemp.log(event) + } + thisTemp.advertisements = newData; + //对广告进行分析结束 + } + thisTemp.getVideo(); + } + }; + this.ajax(ajaxObj); + } else { + //根据广告分析 + this.adAnalysisOne('front', 'adfront', 'adfronttime', 'adfrontlink', 'adfronttype'); + this.adAnalysisOne('pause', 'adpause', 'adpausetime', 'adpauselink', 'adpausetype'); + this.adAnalysisOne('insert', 'adinsert', 'adinserttime', 'adinsertlink', 'adinserttype'); + this.adAnalysisOne('end', 'adend', 'adendtime', 'adendlink', 'adendtype'); + if (!this.isUndefined(this.advertisements['insert'])) { + if (!this.isUndefined(v['inserttime'])) { + thisTemp.advertisements['inserttime'] = v['inserttime']; + } + } + if (!this.isUndefined(thisTemp.advertisements['inserttime'])) { + thisTemp.advertisements['inserttime'] = thisTemp.arrayInt(thisTemp.advertisements['inserttime']); + isInsert = []; + for (i = 0; i < thisTemp.advertisements['inserttime'].length; i++) { + isInsert.push(false); + } + thisTemp.advertisements['insertPlay'] = isInsert; + } + thisTemp.getVideo(); + } + }, + /* + 将广告数组数据里不是视频和图片的去除 + */ + arrayDel: function(arr) { + if (arr.length == 0) { + return null; + } + var newArr = []; + for (var i = 0; i < arr.length; i++) { + var type = arr[i]['type']; + if (type == 'mp4' || type == 'mov' || this.isStrImage(type)) { + newArr.push(arr[i]); + } + } + if (newArr.length > 0) { + return newArr; + } + return null; + }, + /*分析单个类型的广告*/ + adAnalysisOne: function(adType, adName, adTime, adLink, adStype) { + var v = this.vars; + if (this.isUndefined(v[adName])) { + v[adName] = ''; + } + if (this.isUndefined(v[adTime])) { + v[adTime] = ''; + } + if (this.isUndefined(v[adLink])) { + v[adLink] = ''; + } + if (this.isUndefined(v[adStype])) { + v[adStype] = ''; + } + if (v[adName] != '') { + var adList = []; + var ad = v[adName].split(','); + var adtime = v[adTime].split(','); + var adlink = v[adLink].split(','); + var adstype = v[adStype].split(','); + var i = 0; + if (ad.length > 0) { + var adLinkLen = adlink.length, + adTimeLen = adtime.length; + if (v[adLink] == '') { + adLinkLen = 0; + adlink = []; + } + if (v[adTime] == '') { + adTimeLen = 0; + adtime = []; + } + if (adLinkLen < ad.length) { + for (i = adLinkLen; i < ad.length; i++) { + adlink.push(''); + } + } + if (adTimeLen < ad.length) { + for (i = adTimeLen; i < ad.length; i++) { + adtime.push(''); + } + } + var adstypeLen = adstype.length; + if (v[adStype] == '') { + adstypeLen = 0; + adstype = []; + } + if (adstypeLen < ad.length) { + for (i = adstypeLen; i < ad.length; i++) { + adstype.push(this.getFileExt(ad[i]).replace('.', '')); + } + } + for (i = 0; i < ad.length; i++) { + var type = adstype[i]; + if (type == 'mp4' || type == 'mov' || this.isStrImage(type)) { + var obj = { + file: ad[i], + type: type, + time: parseInt(adtime[i]) > 0 ? parseInt(adtime[i]) : this.ckplayerConfig['style']['advertisement']['time'], + link: adlink[i] + }; + adList.push(obj); + } + + } + if (this.isUndefined(this.advertisements)) { + this.advertisements = {}; + } + if (adList.length > 0) { + this.advertisements[adType] = adList; + } + } + } + }, + /* + 内部函数 + 发送播放器加载成功的消息 + */ + playerLoad: function() { + var thisTemp = this; + if (this.isFirst) { + this.isFirst = false; + setTimeout(function() { + thisTemp.loadedHandler(); + },1); + } + }, + /* + 内部函数 + 建立播放器的监听函数,包含操作监听及事件监听 + */ + addVEvent: function() { + var thisTemp = this; + //监听视频单击事件 + var eventVideoClick = function(event) { + thisTemp.videoClick(); + }; + this.addListenerInside('click', eventVideoClick); + this.addListenerInside('click', eventVideoClick, this.MDC); + //延迟计算加载失败事件 + this.timerErrorFun(); + //监听视频加载到元数据事件 + var eventJudgeIsLive = function(event) { + thisTemp.sendJS('loadedmetadata'); + if (typeof(thisTemp.V.duration) == 'number' && thisTemp.V.duration > 1) { + thisTemp.sendJS('duration', thisTemp.V.duration); + thisTemp.formatInserttime(thisTemp.V.duration); + if (thisTemp.adPlayerPlay) { + thisTemp.advertisementsTime(thisTemp.V.duration + 1); + } + thisTemp.durationSendJS = true; + } + thisTemp.judgeIsLive(); + }; + this.addListenerInside('loadedmetadata', eventJudgeIsLive); + //监听视频播放事件 + var eventPlaying = function(event) { + thisTemp.playingHandler(); + thisTemp.sendJS('play'); + thisTemp.sendJS('paused', false); + if (!thisTemp.durationSendJS && typeof(thisTemp.V.duration) == 'number' && thisTemp.V.duration > 0) { + thisTemp.durationSendJS = true; + thisTemp.sendJS('duration', thisTemp.V.duration); + thisTemp.formatInserttime(thisTemp.V.duration); + } + }; + this.addListenerInside('playing', eventPlaying); + //监听视频暂停事件 + var eventPause = function(event) { + thisTemp.pauseHandler(); + thisTemp.sendJS('pause'); + thisTemp.sendJS('paused', true); + }; + this.addListenerInside('pause', eventPause); + //监听视频播放结束事件 + var eventEnded = function(event) { + thisTemp.endedHandler(); + }; + this.addListenerInside('ended', eventEnded); + //监听视频播放时间事件 + var eventTimeupdate = function(event) { + if (thisTemp.timerLoading != null) { + thisTemp.loadingStart(false); + } + if (thisTemp.time) { + if (!thisTemp.adPlayerPlay) { + thisTemp.sendJS('time', thisTemp.time); + //监听中间插入广告是否需要播放 + if (!thisTemp.isUndefined(thisTemp.advertisements['insert'])) { + thisTemp.checkAdInsert(thisTemp.time); + } + //监听其它广告 + if (!thisTemp.isUndefined(thisTemp.advertisements['other'])) { + thisTemp.checkAdOther(thisTemp.time); + } + if (thisTemp.time < 3 && thisTemp.adReset) { + thisTemp.adReset = false; + thisTemp.endedAdReset(); + } + } else { //如果是广告则进行广告倒计时 + thisTemp.adPlayerTimeHandler(thisTemp.time); + } + + } + }; + this.addListenerInside('timeupdate', eventTimeupdate); + //监听视频缓冲事件 + var eventWaiting = function(event) { + thisTemp.loadingStart(true); + }; + this.addListenerInside('waiting', eventWaiting); + //监听视频seek开始事件 + var eventSeeking = function(event) { + thisTemp.sendJS('seek', 'start'); + }; + this.addListenerInside('seeking', eventSeeking); + //监听视频seek结束事件 + var eventSeeked = function(event) { + thisTemp.seekedHandler(); + thisTemp.sendJS('seek', 'ended'); + }; + this.addListenerInside('seeked', eventSeeked); + //监听视频音量 + var eventVolumeChange = function(event) { + try { + thisTemp.volumechangeHandler(); + thisTemp.sendJS('volume', thisTemp.volume || thisTemp.V.volume); + } catch(event) {} + }; + this.addListenerInside('volumechange', eventVolumeChange); + //监听全屏事件 + var eventFullChange = function(event) { + var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen; + thisTemp.sendJS('full', fullState); + }; + this.addListenerInside('fullscreenchange', eventFullChange); + this.addListenerInside('webkitfullscreenchange', eventFullChange); + this.addListenerInside('mozfullscreenchange', eventFullChange); + //建立界面 + if (this.showFace) { + this.interFace(); + } + }, + /* + 内部函数 + 重置界面元素 + */ + resetPlayer: function() { + this.timeTextHandler(); + if (this.showFace) { + this.timeProgress(0, 1); //改变时间进度条宽 + this.changeLoad(0); + this.initPlayPause(); //判断显示播放或暂停按钮 + this.definition(); //构建清晰度按钮 + this.showFrontNext(); //构建上一集下一集按钮 + this.deletePrompt(); //删除提示点 + this.deletePreview(); //删除预览图 + this.trackHide(); //重置字幕 + this.resetTrack(); + this.trackElement = []; + this.track = []; + } + }, + /* + 内部函数 + 构建界面元素 + */ + interFace: function() { + this.showFace = true; + var thisTemp = this; + var html = ''; //控制栏内容 + var i = 0; + var bWidth = 38,//按钮的宽 + bHeight = 38; //按钮的高 + var bBgColor = '#FFFFFF',//按钮元素默认颜色 + bOverColor = '#0782F5'; //按钮元素鼠标经过时的颜色 + var timeInto = this.formatTime(0) + ' / ' + this.formatTime(this.vars['duration']); //时间显示框默认显示内容 + var randomS = this.randomString(10); //获取一个随机字符串 + /* + 以下定义界面各元素的ID,统一以ID结束 + */ + var controlBarBgID = 'controlbgbar' + randomS,//控制栏背景 + controlBarID = 'controlbar' + randomS,//控制栏容器 + timeProgressBgID = 'timeprogressbg' + randomS,//播放进度条背景 + loadProgressID = 'loadprogress' + randomS,//加载进度条 + timeProgressID = 'timeprogress' + randomS,//播放进度条 + timeBOBGID = 'timebobg' + randomS,//播放进度按钮容器,该元素为一个透明覆盖在播放进度条上 + timeBOID = 'timebo' + randomS,//播放进度可拖动按钮外框 + timeBWID = 'timebw' + randomS,//播放进度可拖动按钮内框 + timeTextID = 'timetext' + randomS,//时间文本框 + playID = 'play' + randomS,//播放按钮 + pauseID = 'pause' + randomS,//暂停按钮 + frontID = 'front' + randomS,//前一集按钮 + nextID = 'next' + randomS,//下一集按钮 + fullID = 'full' + randomS,//全屏按钮 + escFullID = 'escfull' + randomS,//退出全屏按钮 + muteID = 'mute' + randomS,//静音按钮 + escMuteID = 'escmute' + randomS,//取消静音按钮 + volumeID = 'volume' + randomS,//音量调节框容器 + volumeDbgID = 'volumedbg' + randomS,//音量调节框容器背景 + volumeBgID = 'volumebg' + randomS,//音量调节框背景层 + volumeUpID = 'volumeup' + randomS,//音量调节框可变宽度层 + volumeBOID = 'volumebo' + randomS,//音量调节按钮外框 + volumeBWID = 'volumebw' + randomS,//音量调节按钮内框 + definitionID = 'definition' + randomS,//清晰度容器 + definitionPID = 'definitionp' + randomS,//清晰度列表容器 + playbackRateID = 'playbackrate' + randomS,//清晰度容器 + playbackRatePID = 'playbackratep' + randomS,//清晰度列表容器 + promptBgID = 'promptbg' + randomS,//提示框背景 + promptID = 'prompt' + randomS,//提示框 + dlineID = 'dline' + randomS,//分隔线共用前缀 + menuID = 'menu' + randomS,//右键容器 + pauseCenterID = 'pausecenter' + randomS,//中间暂停按钮 + loadingID = 'loading' + randomS,//缓冲 + errorTextID = 'errortext' + randomS,//错误文本框 + logoID = 'logo' + randomS,//logo + adBackgroundID = 'background' + randomS,//广告背景图片 + adElementID = 'adelement' + randomS,//广告容器 + adBarID = 'adBar' + randomS,//广告顶部倒计时,跳过广告,静音按钮容器 + adSkipID = 'adskip' + randomS,//跳过广告按钮 + adTimeID = 'adtime' + randomS,//倒计时按钮 + adLinkID = 'adlink' + randomS,//广告链接按钮 + adMuteID = 'admute' + randomS,//广告静音按钮 + adEscMuteID = 'adescmute' + randomS,//广告取消静音按钮 + adPauseCloseID = 'adpauseclose' + randomS; //暂停广场的关闭按钮 + /* + 构建一些PD(播放器容器)里使用的元素 + */ + var controlBarBg = document.createElement('div'), + controlBar = document.createElement('div'), + timeProgressBg = document.createElement('div'), + timeBoBg = document.createElement('div'), + pauseCenter = document.createElement('div'), + errorText = document.createElement('div'), + promptBg = document.createElement('div'), + prompt = document.createElement('div'), + menuDiv = document.createElement('div'), + definitionP = document.createElement('div'), + playbackrateP = document.createElement('div'), + loading = document.createElement('div'), + logo = document.createElement('div'), + adBackground = document.createElement('div'), + adElement = document.createElement('div'), + adBar = document.createElement('div'), + adLink = document.createElement('div'), + adPauseClose = document.createElement('div'); + /* + 定义各节点的样式 + */ + controlBarBg.className = controlBarBgID; + controlBar.className = controlBarID; + timeProgressBg.className = timeProgressBgID; + timeBoBg.className = timeBOBGID; + promptBg.className = promptBgID; + prompt.className = promptID; + menuDiv.className = menuID; + definitionP.className = definitionPID; + playbackrateP.className = playbackRatePID; + pauseCenter.className = pauseCenterID; + loading.className = loadingID; + logo.className = logoID; + errorText.className = errorTextID; + adBackground.className = adBackgroundID; + adElement.className = adElementID; + adBar.className = adBarID; + adLink.className = adLinkID; + adPauseClose.className = adPauseCloseID; + /* + 加载节点到播放器容器中 + */ + this.PD.appendChild(controlBarBg); + this.PD.appendChild(controlBar); + this.PD.appendChild(timeProgressBg); + this.PD.appendChild(timeBoBg); + this.PD.appendChild(promptBg); + this.PD.appendChild(prompt); + this.PD.appendChild(definitionP); + this.PD.appendChild(playbackrateP); + this.PD.appendChild(pauseCenter); + this.PD.appendChild(loading); + this.PD.appendChild(errorText); + this.PD.appendChild(logo); + this.PD.appendChild(adBackground); + this.PD.appendChild(adElement); + this.PD.appendChild(adBar); + this.PD.appendChild(adLink); + this.PD.appendChild(adPauseClose); + this.body.appendChild(menuDiv); + if (this.vars['live']) { //如果是直播,时间显示文本框里显示当前系统时间 + timeInto = this.getNowDate(); + } + /* + 构建控制栏的内容 + */ + html += '
' + this.newCanvas(playID, bWidth, bHeight) + '
'; //播放按钮 + html += '
' + this.newCanvas(pauseID, bWidth, bHeight) + '
'; //暂停按钮 + html += '
'; //分隔线 + html += '
' + this.newCanvas(frontID, bWidth, bHeight) + '
'; //前一集按钮 + html += '
'; //分隔线 + html += '
' + this.newCanvas(nextID, bWidth, bHeight) + '
'; //下一集按钮 + html += '
'; //分隔线 + html += '
' + timeInto + '
'; //时间文本 + html += '
' + this.newCanvas(fullID, bWidth, bHeight) + '
'; //全屏按钮 + html += '
' + this.newCanvas(escFullID, bWidth, bHeight) + '
'; //退出全屏按钮 + html += '
'; //分隔线 + html += '
'; //清晰度容器 + html += '
'; //分隔线 + html += '
'; //倍速 + html += '
'; //分隔线 + html += '
'; //音量调节框,音量调节按钮 + html += '
' + this.newCanvas(muteID, bWidth, bHeight) + '
'; //静音按钮 + html += '
' + this.newCanvas(escMuteID, bWidth, bHeight) + '
'; //退出静音按钮 + html += '
'; //分隔线 + this.getByElement(controlBarID).innerHTML = html; + //构建进度条内容 + this.getByElement(timeProgressBgID).innerHTML = '
'; + this.getByElement(timeBOBGID).innerHTML = '
'; + //构建进度条内容结束 + this.getByElement(pauseCenterID).innerHTML = this.newCanvas(pauseCenterID, 80, 80); //构建中间暂停按钮 + this.getByElement(loadingID).innerHTML = this.newCanvas(loadingID, 60, 60); //构建中间缓冲时显示的图标 + this.getByElement(errorTextID).innerHTML = this.language['error']; //构建错误时显示的文本框 + //构建广告相关 + html = '
' + this.language['adTime'].replace('{$second}', 0) + '
'; + html += '
' + this.newCanvas(adMuteID, 30, 30) + '
'; + html += '
' + this.newCanvas(adEscMuteID, 30, 30) + '
'; + html += '
'; + this.getByElement(adBarID).innerHTML = html; + this.getByElement(adLinkID).innerHTML = this.language['adLink']; + this.getByElement(adPauseCloseID).innerHTML = this.newCanvas(adPauseCloseID, 20, 20); + if (this.ckplayerConfig['style']['logo']) { + if (this.ckplayerConfig['style']['logo']['file']) { + var logoFile = this.ckplayerConfig['style']['logo']['file']; + if (logoFile.substr(0, 15) == 'data:image/png;' || logoFile.substr(0, 15) == 'data:image/jpg;' || logoFile.substr(0, 16) == 'data:image/jpeg;') { + this.getByElement(logoID).innerHTML = ''; //构建logo + } + } + } else { + this.getByElement(logoID).innerHTML = this.vars['logo'] || this.logo || ''; //构建logo + } + var pd = this.PD; + //CB:Object:全局变量,将一些全局需要用到的元素统一放在CB对象里 + this.CB = { + controlBarBg: this.getByElement(controlBarBgID, pd), + controlBar: this.getByElement(controlBarID, pd), + promptBg: this.getByElement(promptBgID, pd), + prompt: this.getByElement(promptID, pd), + timeProgressBg: this.getByElement(timeProgressBgID, pd), + loadProgress: this.getByElement(loadProgressID, pd), + timeProgress: this.getByElement(timeProgressID, pd), + timeBoBg: this.getByElement(timeBOBGID, pd), + timeButton: this.getByElement(timeBOID, pd), + timeText: this.getByElement(timeTextID, pd), + play: this.getByElement(playID, pd), + front: this.getByElement(frontID, pd), + next: this.getByElement(nextID, pd), + pause: this.getByElement(pauseID, pd), + definition: this.getByElement(definitionID, pd), + definitionP: this.getByElement(definitionPID, pd), + definitionLine: this.getByElement(dlineID + '-rb', pd), + playbackrate: this.getByElement(playbackRateID, pd), + playbackrateP: this.getByElement(playbackRatePID, pd), + playbackrateLine: this.getByElement(dlineID + '-rc', pd), + full: this.getByElement(fullID, pd), + escFull: this.getByElement(escFullID, pd), + mute: this.getByElement(muteID, pd), + escMute: this.getByElement(escMuteID, pd), + volume: this.getByElement(volumeID, pd), + volumeBg: this.getByElement(volumeBgID, pd), + volumeUp: this.getByElement(volumeUpID, pd), + volumeBO: this.getByElement(volumeBOID, pd), + pauseCenter: this.getByElement(pauseCenterID, pd), + menu: this.getByElement(menuID), + loading: this.getByElement(loadingID, pd), + loadingCanvas: this.getByElement(loadingID + '-canvas', pd), + errorText: this.getByElement(errorTextID, pd), + logo: this.getByElement(logoID, pd), + playLine: this.getByElement(dlineID + '-la', pd), + frontLine: this.getByElement(dlineID + '-lb', pd), + nextLine: this.getByElement(dlineID + '-lc', pd), + fullLine: this.getByElement(dlineID + '-ra'), + definitionLine: this.getByElement(dlineID + '-rb', pd), + muteLine: this.getByElement(dlineID + '-rd', pd), + adBackground: this.getByElement(adBackgroundID, pd), + adElement: this.getByElement(adElementID, pd), + adBar: this.getByElement(adBarID, pd), + adSkip: this.getByElement(adSkipID, pd), + adTime: this.getByElement(adTimeID, pd), + adLink: this.getByElement(adLinkID, pd), + adMute: this.getByElement(adMuteID, pd), + adEscMute: this.getByElement(adEscMuteID, pd), + adPauseClose: this.getByElement(adPauseCloseID, pd) + }; + this.buttonWidth = { + play: bWidth, + full: bWidth, + front: bWidth, + next: bWidth, + mute: bWidth + }; + //定义界面元素的样式 + //控制栏背景 + this.css(controlBarBgID, { + width: '100%', + height: bHeight + 'px', + backgroundColor: '#000000', + position: 'absolute', + bottom: '0px', + filter: 'alpha(opacity:0.8)', + opacity: '0.8', + zIndex: '990' + }); + //控制栏容器 + this.css(controlBarID, { + width: '100%', + height: bHeight + 'px', + position: 'absolute', + bottom: '0px', + zIndex: '990' + }); + //中间暂停按钮 + this.css(pauseCenterID, { + width: '80px', + height: '80px', + borderRadius: '50%', + position: 'absolute', + display: 'none', + cursor: 'pointer', + zIndex: '996' + }); + //loading + this.css(loadingID, { + width: '60px', + height: '60px', + position: 'absolute', + display: 'none', + zIndex: '996' + }); + //出错文本框 + this.css(errorTextID, { + width: '120px', + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontSize: '14px', + textAlign: 'center', + position: 'absolute', + display: 'none', + zIndex: '101', + cursor: 'default', + zIndex: '996' + }); + //定义logo文字的样式 + this.css(logoID, { + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontFamily: 'Arial', + fontSize: '28px', + textAlign: 'center', + position: 'absolute', + float: 'left', + left: '-1000px', + top: '20px', + zIndex: '996', + filter: 'alpha(opacity:0.8)', + opacity: '0.8', + cursor: 'default' + }); + + this.css(this.CB['loadingCanvas'], { + transform: 'rotate(0deg)', + msTransform: 'rotate(0deg)', + mozTransform: 'rotate(0deg)', + webkitTransform: 'rotate(0deg)', + oTransform: 'rotate(0deg)' + }); + //定义提示语的样式 + this.css([promptBgID, promptID], { + height: '30px', + lineHeight: '30px', + color: '#FFFFFF', + fontSize: '14px', + textAlign: 'center', + position: 'absolute', + borderRadius: '5px', + paddingLeft: '5px', + paddingRight: '5px', + bottom: '0px', + display: 'none', + zIndex: '995' + }); + this.css(promptBgID, { + backgroundColor: '#000000', + filter: 'alpha(opacity:0.5)', + opacity: '0.5' + }); + //时间进度条背景容器 + this.css(timeProgressBgID, { + width: '100%', + height: '6px', + backgroundColor: '#3F3F3F', + overflow: 'hidden', + position: 'absolute', + bottom: '38px', + zIndex: '888' + }); + //加载进度和时间进度 + this.css([loadProgressID, timeProgressID], { + width: '1px', + height: '6px', + position: 'absolute', + bottom: '38px', + top: '0px', + zIndex: '991' + }); + this.css(loadProgressID, 'backgroundColor', '#6F6F6F'); + this.css(timeProgressID, 'backgroundColor', bOverColor); + //时间进度按钮 + this.css(timeBOBGID, { + width: '100%', + height: '14px', + overflow: 'hidden', + position: 'absolute', + bottom: '34px', + cursor: 'pointer', + zIndex: '992' + }); + this.css(timeBOID, { + width: '14px', + height: '14px', + overflow: 'hidden', + borderRadius: '50%', + backgroundColor: bBgColor, + cursor: 'pointer', + position: 'absolute', + top: '0px', + zIndex: '200' + }); + this.css(timeBWID, { + width: '8px', + height: '8px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bOverColor, + left: '3px', + top: '3px' + }); + this.css(timeTextID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + fontFamily: 'arial', + fontSize: '16px', + paddingLeft: '10px', + float: 'left', + overflow: 'hidden', + cursor: 'default' + }); + //分隔线 + this.css([dlineID + '-la', dlineID + '-lb', dlineID + '-lc', dlineID + '-ra', dlineID + '-rb', dlineID + '-rc', dlineID + '-rd'], { + width: '0px', + height: bHeight + 'px', + overflow: 'hidden', + borderLeft: '1px solid #303030', + borderRight: '1px solid #151515', + filter: 'alpha(opacity:0.9)', + opacity: '0.9' + }); + this.css([dlineID + '-la', dlineID + '-lb', dlineID + '-lc'], 'float', 'left'); + this.css([dlineID + '-ra', dlineID + '-rb', dlineID + '-rc', dlineID + '-rd'], 'float', 'right'); + this.css([dlineID + '-lb', dlineID + '-lc', dlineID + '-rb', dlineID + '-rc'], 'display', 'none'); + //播放/暂停/上一集/下一集按钮 + this.css([playID, pauseID, frontID, nextID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'left', + overflow: 'hidden', + cursor: 'pointer' + }); + this.css([frontID, nextID], 'display', 'none'); + //初始化判断播放/暂停按钮隐藏项 + this.initPlayPause(); + + //设置静音/取消静音的按钮样式 + this.css([muteID, escMuteID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'right', + overflow: 'hidden', + cursor: 'pointer' + }); + if (this.vars['volume'] > 0) { + this.css(escMuteID, 'display', 'none'); + } else { + this.css(muteID, 'display', 'none'); + } + if (!this.ckplayerConfig['config']['mobileVolumeBarShow'] && this.isMobile()) { + this.css([muteID, escMuteID, volumeID, volumeDbgID, dlineID + '-rd'], { + display: 'none' + }); + } + //音量调节框 + this.css([volumeID, volumeDbgID], { + width: '110px', + height: bHeight + 'px', + overflow: 'hidden', + float: 'right' + }); + this.css(volumeDbgID, { + position: 'absolute' + }); + this.css([volumeBgID, volumeUpID], { + width: '100px', + height: '6px', + overflow: 'hidden', + borderRadius: '5px', + cursor: 'pointer' + }); + this.css(volumeBgID, { + position: 'absolute', + top: '16px' + }); + this.css(volumeBgID, 'backgroundColor', '#666666'); + this.css(volumeUpID, 'backgroundColor', bOverColor); + this.buttonWidth['volume'] = 100; + //音量调节按钮 + this.css(volumeBOID, { + width: '12px', + height: '12px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bBgColor, + top: '13px', + left: '0px', + cursor: 'pointer' + }); + this.css(volumeBWID, { + width: '6px', + height: '6px', + overflow: 'hidden', + borderRadius: '50%', + position: 'absolute', + backgroundColor: bOverColor, + left: '3px', + top: '3px' + }); + //清晰度容器 + this.css(definitionID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + float: 'right', + fontSize: '14px', + textAlign: 'center', + overflow: 'hidden', + display: 'none', + cursor: 'pointer' + }); + this.css(definitionPID, { + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + overflow: 'hidden', + position: 'absolute', + bottom: '4px', + backgroundColor: '#000000', + textAlign: 'center', + zIndex: '995', + cursor: 'pointer', + display: 'none' + }); + //倍速容器 + this.css(playbackRateID, { + lineHeight: bHeight + 'px', + color: '#FFFFFF', + float: 'right', + fontSize: '14px', + textAlign: 'center', + overflow: 'hidden', + display: 'none', + cursor: 'pointer' + }); + this.css(playbackRatePID, { + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + overflow: 'hidden', + position: 'absolute', + bottom: '4px', + backgroundColor: '#000000', + textAlign: 'center', + zIndex: '995', + cursor: 'pointer', + display: 'none' + }); + //设置全屏/退出全屏按钮样式 + this.css([fullID, escFullID], { + width: bWidth + 'px', + height: bHeight + 'px', + float: 'right', + overflow: 'hidden', + cursor: 'pointer' + }); + this.css(escFullID, 'display', 'none'); + //设置广告背景层样式 + this.css(adBackgroundID, { + width: '100%', + height: '100%', + backgroundColor: '#000000', + position: 'absolute', + top: '0px', + zIndex: '997', + display: 'none' + }); + this.css(adElementID, { + position: 'absolute', + overflow: 'hidden', + top: '0px', + zIndex: '998', + float: 'center', + display: 'none' + }); + this.css(adBarID, { + position: 'absolute', + overflow: 'hidden', + top: '10px', + right: '10px', + zIndex: '999', + textAlign: 'right', + display: 'none' + }); + this.css(adTimeID, { + backgroundColor: '#000000', + color: '#FF0000', + paddingLeft: '10px', + paddingRight: '10px', + lineHeight: (bHeight - 8) + 'px', + marginLeft: '5px', + float: 'right', + cursor: 'pointer' + }); + this.css([adMuteID, adEscMuteID], { + backgroundColor: '#000000', + width: '30px', + height: '30px', + marginLeft: '5px', + float: 'right', + display: 'none', + cursor: 'pointer' + }); + this.css(adSkipID, { + backgroundColor: '#000000', + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + paddingLeft: '10px', + paddingRight: '10px', + float: 'right', + display: 'none', + cursor: 'pointer' + }); + this.css(adLinkID, { + backgroundColor: '#ea5503', + lineHeight: (bHeight - 8) + 'px', + color: '#FFFFFF', + paddingLeft: '10px', + paddingRight: '10px', + position: 'absolute', + overflow: 'hidden', + bottom: '10px', + right: '10px', + zIndex: '999', + display: 'none' + }); + this.css(adPauseCloseID, { + backgroundColor: '#f7f7f7', + //f8f7f7 + widht: '20px', + height: '20px', + position: 'absolute', + overflow: 'hidden', + zIndex: '999', + top: '60px', + left: '30px', + borderRadius: '20px', + display: 'none', + cursor: 'pointer' + }); + //构建各按钮的形状 + //播放按钮 + var cPlay = this.getByElement(playID + '-canvas').getContext('2d'); + var cPlayFillRect = function() { + thisTemp.canvasFill(cPlay, [[12, 10], [29, 19], [12, 28]]); + }; + cPlay.fillStyle = bBgColor; + cPlayFillRect(); + var cPlayOver = function(event) { + cPlay.clearRect(0, 0, bWidth, bHeight); + cPlay.fillStyle = bOverColor; + cPlayFillRect(); + }; + var cPlayOut = function(event) { + cPlay.clearRect(0, 0, bWidth, bHeight); + cPlay.fillStyle = bBgColor; + cPlayFillRect(); + }; + + this.addListenerInside('mouseover', cPlayOver, this.getByElement(playID + '-canvas')); + this.addListenerInside('mouseout', cPlayOut, this.getByElement(playID + '-canvas')); + //暂停按钮 + var cPause = this.getByElement(pauseID + '-canvas').getContext('2d'); + var cPauseFillRect = function() { + thisTemp.canvasFillRect(cPause, [[10, 10, 5, 18], [22, 10, 5, 18]]); + }; + cPause.fillStyle = bBgColor; + cPauseFillRect(); + var cPauseOver = function(event) { + cPause.clearRect(0, 0, bWidth, bHeight); + cPause.fillStyle = bOverColor; + cPauseFillRect(); + }; + var cPauseOut = function(event) { + cPause.clearRect(0, 0, bWidth, bHeight); + cPause.fillStyle = bBgColor; + cPauseFillRect(); + }; + this.addListenerInside('mouseover', cPauseOver, this.getByElement(pauseID + '-canvas')); + this.addListenerInside('mouseout', cPauseOut, this.getByElement(pauseID + '-canvas')); + //前一集按钮 + var cFront = this.getByElement(frontID + '-canvas').getContext('2d'); + var cFrontFillRect = function() { + thisTemp.canvasFill(cFront, [[16, 19], [30, 10], [30, 28]]); + thisTemp.canvasFillRect(cFront, [[8, 10, 5, 18]]); + }; + cFront.fillStyle = bBgColor; + cFrontFillRect(); + var cFrontOver = function(event) { + cFront.clearRect(0, 0, bWidth, bHeight); + cFront.fillStyle = bOverColor; + cFrontFillRect(); + }; + var cFrontOut = function(event) { + cFront.clearRect(0, 0, bWidth, bHeight); + cFront.fillStyle = bBgColor; + cFrontFillRect(); + }; + + this.addListenerInside('mouseover', cFrontOver, this.getByElement(frontID + '-canvas')); + this.addListenerInside('mouseout', cFrontOut, this.getByElement(frontID + '-canvas')); + //下一集按钮 + var cNext = this.getByElement(nextID + '-canvas').getContext('2d'); + var cNextFillRect = function() { + thisTemp.canvasFill(cNext, [[8, 10], [22, 19], [8, 28]]); + thisTemp.canvasFillRect(cNext, [[25, 10, 5, 18]]); + }; + cNext.fillStyle = bBgColor; + cNextFillRect(); + var cNextOver = function(event) { + cNext.clearRect(0, 0, bWidth, bHeight); + cNext.fillStyle = bOverColor; + cNextFillRect(); + }; + var cNextOut = function(event) { + cNext.clearRect(0, 0, bWidth, bHeight); + cNext.fillStyle = bBgColor; + cNextFillRect(); + }; + this.addListenerInside('mouseover', cNextOver, this.getByElement(nextID + '-canvas')); + this.addListenerInside('mouseout', cNextOut, this.getByElement(nextID + '-canvas')); + //全屏按钮 + var cFull = this.getByElement(fullID + '-canvas').getContext('2d'); + var cFullFillRect = function() { + thisTemp.canvasFillRect(cFull, [[19, 10, 9, 3], [25, 13, 3, 6], [10, 19, 3, 9], [13, 25, 6, 3]]); + }; + cFull.fillStyle = bBgColor; + cFullFillRect(); + var cFullOver = function() { + cFull.clearRect(0, 0, bWidth, bHeight); + cFull.fillStyle = bOverColor; + cFullFillRect(); + }; + var cFullOut = function() { + cFull.clearRect(0, 0, bWidth, bHeight); + cFull.fillStyle = bBgColor; + cFullFillRect(); + }; + this.addListenerInside('mouseover', cFullOver, this.getByElement(fullID + '-canvas')); + this.addListenerInside('mouseout', cFullOut, this.getByElement(fullID + '-canvas')); + //定义退出全屏按钮样式 + var cEscFull = this.getByElement(escFullID + '-canvas').getContext('2d'); + var cEscFullFillRect = function() { + thisTemp.canvasFillRect(cEscFull, [[20, 9, 3, 9], [23, 15, 6, 3], [9, 20, 9, 3], [15, 23, 3, 6]]); + }; + cEscFull.fillStyle = bBgColor; + cEscFullFillRect(); + var cEscFullOver = function() { + cEscFull.clearRect(0, 0, bWidth, bHeight); + cEscFull.fillStyle = bOverColor; + cEscFullFillRect(); + }; + var cEscFullOut = function() { + cEscFull.clearRect(0, 0, bWidth, bHeight); + cEscFull.fillStyle = bBgColor; + cEscFullFillRect(); + }; + this.addListenerInside('mouseover', cEscFullOver, this.getByElement(escFullID + '-canvas')); + this.addListenerInside('mouseout', cEscFullOut, this.getByElement(escFullID + '-canvas')); + //定义静音按钮的样式 + var cMute = this.getByElement(muteID + '-canvas').getContext('2d'); + var cMuteFillRect = function() { + thisTemp.canvasFill(cMute, [[10, 15], [15, 15], [21, 10], [21, 28], [15, 23], [10, 23]]); + thisTemp.canvasFillRect(cMute, [[23, 15, 2, 8], [27, 10, 2, 18]]); + }; + cMute.fillStyle = bBgColor; + cMuteFillRect(); + var cMuteOver = function() { + cMute.clearRect(0, 0, bWidth, bHeight); + cMute.fillStyle = bOverColor; + cMuteFillRect(); + }; + var cMuteOut = function() { + cMute.clearRect(0, 0, bWidth, bHeight); + cMute.fillStyle = bBgColor; + cMuteFillRect(); + }; + this.addListenerInside('mouseover', cMuteOver, this.getByElement(muteID + '-canvas')); + this.addListenerInside('mouseout', cMuteOut, this.getByElement(muteID + '-canvas')); + //定义取消广告静音按钮样式 + var cEscMute = this.getByElement(escMuteID + '-canvas').getContext('2d'); + var cEscMuteFillRect = function() { + thisTemp.canvasFill(cEscMute, [[10, 15], [15, 15], [21, 10], [21, 28], [15, 23], [10, 23]]); + thisTemp.canvasFill(cEscMute, [[23, 13], [24, 13], [33, 25], [32, 25]]); + thisTemp.canvasFill(cEscMute, [[32, 13], [33, 13], [24, 25], [23, 25]]); + }; + cEscMute.fillStyle = bBgColor; + cEscMuteFillRect(); + var cEscMuteOver = function() { + cEscMute.clearRect(0, 0, bWidth, bHeight); + cEscMute.fillStyle = bOverColor; + cEscMuteFillRect(); + }; + var cEscMuteOut = function() { + cEscMute.clearRect(0, 0, bWidth, bHeight); + cEscMute.fillStyle = bBgColor; + cEscMuteFillRect(); + }; + this.addListenerInside('mouseover', cEscMuteOver, this.getByElement(escMuteID + '-canvas')); + this.addListenerInside('mouseout', cEscMuteOut, this.getByElement(escMuteID + '-canvas')); + //定义广告静音按钮的样式 + var cAdMute = this.getByElement(adMuteID + '-canvas').getContext('2d'); + var cAdMuteFillRect = function() { + thisTemp.canvasFill(cAdMute, [[8, 12], [12, 12], [16, 8], [16, 21], [12, 18], [8, 18]]); + thisTemp.canvasFillRect(cAdMute, [[18, 12, 2, 6], [21, 8, 2, 14]]); + }; + cAdMute.fillStyle = bBgColor; + cAdMuteFillRect(); + var cAdMuteOver = function() { + cAdMute.clearRect(0, 0, bWidth, bHeight); + cAdMute.fillStyle = bOverColor; + cAdMuteFillRect(); + }; + var cAdMuteOut = function() { + cAdMute.clearRect(0, 0, bWidth, bHeight); + cAdMute.fillStyle = bBgColor; + cAdMuteFillRect(); + }; + this.addListenerInside('mouseover', cAdMuteOver, this.getByElement(adMuteID + '-canvas')); + this.addListenerInside('mouseout', cAdMuteOut, this.getByElement(adMuteID + '-canvas')); + //定义取消静音广告按钮样式 + var cAdEscMute = this.getByElement(adEscMuteID + '-canvas').getContext('2d'); + var cAdEscMuteFillRect = function() { + thisTemp.canvasFill(cAdEscMute, [[8, 12], [12, 12], [16, 8], [16, 21], [12, 18], [8, 18]]); + thisTemp.canvasFill(cAdEscMute, [[18, 10], [20, 10], [26, 20], [24, 20]]); + thisTemp.canvasFill(cAdEscMute, [[25, 10], [27, 10], [20, 20], [18, 20]]); + }; + cAdEscMute.fillStyle = bBgColor; + cAdEscMuteFillRect(); + var cAdEscMuteOver = function() { + cAdEscMute.clearRect(0, 0, bWidth, bHeight); + cAdEscMute.fillStyle = bOverColor; + cAdEscMuteFillRect(); + }; + var cAdEscMuteOut = function() { + cAdEscMute.clearRect(0, 0, bWidth, bHeight); + cAdEscMute.fillStyle = bBgColor; + cAdEscMuteFillRect(); + }; + this.addListenerInside('mouseover', cAdEscMuteOver, this.getByElement(adEscMuteID + '-canvas')); + this.addListenerInside('mouseout', cAdEscMuteOut, this.getByElement(adEscMuteID + '-canvas')); + //定义暂停广告关闭按钮 + var adPauseClose = this.getByElement(adPauseCloseID + '-canvas').getContext('2d'); + var adPauseCloseFillRect = function() { + thisTemp.canvasFill(adPauseClose, [[4, 6], [6, 6], [16, 15], [14, 15]]); + thisTemp.canvasFill(adPauseClose, [[14, 6], [16, 6], [6, 15], [4, 15]]); + }; + adPauseClose.fillStyle = '#404856'; + adPauseCloseFillRect(); + var adPauseCloseOver = function() { + adPauseClose.clearRect(0, 0, bWidth, bHeight); + adPauseClose.fillStyle = bOverColor; + adPauseCloseFillRect(); + }; + var adPauseCloseOut = function() { + adPauseClose.clearRect(0, 0, bWidth, bHeight); + adPauseClose.fillStyle = '#404856'; + adPauseCloseFillRect(); + }; + this.addListenerInside('mouseover', adPauseCloseOver, this.getByElement(adPauseCloseID + '-canvas')); + this.addListenerInside('mouseout', adPauseCloseOut, this.getByElement(adPauseCloseID + '-canvas')); + //定义loading样式 + var cLoading = this.getByElement(loadingID + '-canvas').getContext('2d'); + var cLoadingFillRect = function() { + cLoading.save(); + var grad = cLoading.createLinearGradient(0, 0, 60, 60); + grad.addColorStop(0, bBgColor); + var grad2 = cLoading.createLinearGradient(0, 0, 80, 60); + grad2.addColorStop(1, bOverColor); + var grad3 = cLoading.createLinearGradient(0, 0, 80, 60); + grad3.addColorStop(1, '#FF9900'); + var grad4 = cLoading.createLinearGradient(0, 0, 80, 60); + grad4.addColorStop(1, '#CC3300'); + cLoading.strokeStyle = grad; //设置描边样式 + cLoading.lineWidth = 8; //设置线宽 + cLoading.beginPath(); //路径开始 + cLoading.arc(30, 30, 25, 0, 0.4 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.closePath(); //路径结束 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad2; //设置描边样式 + cLoading.arc(30, 30, 25, 0.5 * Math.PI, 0.9 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad3; //设置描边样式 + cLoading.arc(30, 30, 25, Math.PI, 1.4 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.beginPath(); //路径开始 + cLoading.strokeStyle = grad4; //设置描边样式 + cLoading.arc(30, 30, 25, 1.5 * Math.PI, 1.9 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cLoading.stroke(); //绘制 + cLoading.closePath(); //路径结束 + cLoading.restore(); + }; + cLoading.fillStyle = bBgColor; + cLoadingFillRect(); + //定义中间暂停按钮的样式 + var cPauseCenter = this.getByElement(pauseCenterID + '-canvas').getContext('2d'); + var cPauseCenterFillRect = function() { + thisTemp.canvasFill(cPauseCenter, [[28, 22], [59, 38], [28, 58]]); + /* 指定几个颜色 */ + cPauseCenter.save(); + cPauseCenter.lineWidth = 5; //设置线宽 + cPauseCenter.beginPath(); //路径开始 + cPauseCenter.arc(40, 40, 35, 0, 2 * Math.PI, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针) + cPauseCenter.stroke(); //绘制 + cPauseCenter.closePath(); //路径结束 + cPauseCenter.restore(); + }; + cPauseCenter.fillStyle = bBgColor; + cPauseCenter.strokeStyle = bBgColor; + cPauseCenterFillRect(); + var cPauseCenterOver = function() { + cPauseCenter.clearRect(0, 0, 80, 80); + cPauseCenter.fillStyle = bOverColor; + cPauseCenter.strokeStyle = bOverColor; + cPauseCenterFillRect(); + }; + var cPauseCenterOut = function() { + cPauseCenter.clearRect(0, 0, 80, 80); + cPauseCenter.fillStyle = bBgColor; + cPauseCenter.strokeStyle = bBgColor; + cPauseCenterFillRect(); + }; + this.addListenerInside('mouseover', cPauseCenterOver, this.getByElement(pauseCenterID + '-canvas')); + this.addListenerInside('mouseout', cPauseCenterOut, this.getByElement(pauseCenterID + '-canvas')); + + //鼠标经过/离开音量调节按钮 + var volumeBOOver = function() { + thisTemp.css(volumeBOID, 'backgroundColor', bOverColor); + thisTemp.css(volumeBWID, 'backgroundColor', bBgColor); + }; + var volumeBOOut = function() { + thisTemp.css(volumeBOID, 'backgroundColor', bBgColor); + thisTemp.css(volumeBWID, 'backgroundColor', bOverColor); + }; + this.addListenerInside('mouseover', volumeBOOver, this.getByElement(volumeBOID)); + this.addListenerInside('mouseout', volumeBOOut, this.getByElement(volumeBOID)); + //鼠标经过/离开进度按钮 + var timeBOOver = function() { + thisTemp.css(timeBOID, 'backgroundColor', bOverColor); + thisTemp.css(timeBWID, 'backgroundColor', bBgColor); + }; + var timeBOOut = function() { + thisTemp.css(timeBOID, 'backgroundColor', bBgColor); + thisTemp.css(timeBWID, 'backgroundColor', bOverColor); + }; + this.addListenerInside('mouseover', timeBOOver, this.getByElement(timeBOID)); + this.addListenerInside('mouseout', timeBOOut, this.getByElement(timeBOID)); + + this.addButtonEvent(); //注册按钮及音量调节,进度操作事件 + this.newMenu(); //单独设置右键的样式和事件 + this.controlBarHide(); //单独注册控制栏隐藏事件 + this.keypress(); //单独注册键盘事件 + //初始化音量调节框 + this.changeVolume(this.vars['volume']); + //初始化判断是否需要显示上一集和下一集按钮 + this.showFrontNext(); + setTimeout(function() { + thisTemp.elementCoordinate(); //调整中间暂停按钮/loading的位置/error的位置 + }, + 100); + this.checkBarWidth(); + var resize = function() { + thisTemp.elementCoordinate(); + thisTemp.timeUpdateHandler(); + thisTemp.changeLoad(); + thisTemp.checkBarWidth(); + thisTemp.changeElementCoor(); //修改新加元件的坐标 + thisTemp.changePrompt(); + thisTemp.adPauseCoor(); + thisTemp.adOtherCoor(); + }; + this.addListenerInside('resize', resize, window); + }, + /* + 内部函数 + 创建按钮,使用canvas画布 + */ + newCanvas: function(id, width, height) { + return ''; + }, + /* + 内部函数 + 注册按钮,音量调节框,进度操作框事件 + */ + addButtonEvent: function() { + var thisTemp = this; + //定义按钮的单击事件 + var playClick = function(event) { + thisTemp.videoPlay(); + thisTemp.sendJS('clickEvent', 'actionScript->videoPlay'); + }; + this.addListenerInside('click', playClick, this.CB['play']); + this.addListenerInside('click', playClick, this.CB['pauseCenter']); + var pauseClick = function(event) { + thisTemp.videoPause(); + thisTemp.sendJS('clickEvent', 'actionScript->videoPause'); + }; + this.addListenerInside('click', pauseClick, this.CB['pause']); + var frontClick = function(event) { + if (thisTemp.vars['front']) { + eval(thisTemp.vars['front'] + '()'); + thisTemp.sendJS('clickEvent', 'actionScript->' + thisTemp.vars['front']); + } + }; + this.addListenerInside('click', frontClick, this.CB['front']); + var nextClick = function(event) { + if (thisTemp.vars['next']) { + eval(thisTemp.vars['next'] + '()'); + thisTemp.sendJS('clickEvent', 'actionScript->' + thisTemp.vars['next']); + } + }; + this.addListenerInside('click', nextClick, this.CB['next']); + var muteClick = function(event) { + thisTemp.videoMute(); + thisTemp.sendJS('clickEvent', 'actionScript->videoMute'); + }; + this.addListenerInside('click', muteClick, this.CB['mute']); + var escMuteClick = function(event) { + thisTemp.videoEscMute(); + thisTemp.sendJS('clickEvent', 'actionScript->videoEscMute'); + }; + this.addListenerInside('click', escMuteClick, this.CB['escMute']); + var fullClick = function(event) { + thisTemp.fullScreen(); + thisTemp.sendJS('clickEvent', 'actionScript->fullScreen'); + }; + this.addListenerInside('click', fullClick, this.CB['full']); + var escFullClick = function(event) { + thisTemp.quitFullScreen(); + thisTemp.sendJS('clickEvent', 'actionScript->quitFullScreen'); + }; + this.addListenerInside('click', escFullClick, this.CB['escFull']); + var adSkipClick = function(event) { + if (thisTemp.CB['adSkip'].innerHTML == thisTemp.language['skipAd']) { + thisTemp.runFunction(thisTemp.config['adSkipClick']); + } + }; + this.addListenerInside('click', adSkipClick, this.CB['adSkip']); + var adMuteClick = function(event) { + thisTemp.adMuteFunction(); + }; + this.addListenerInside('click', adMuteClick, this.CB['adMute']); + var adEscMuteClick = function(event) { + thisTemp.adEscMuteFunction(); + }; + this.addListenerInside('click', adEscMuteClick, this.CB['adEscMute']); + var adPauseCloseClick = function(event) { + thisTemp.adPauseCloseFunction(); + }; + this.addListenerInside('click', adPauseCloseClick, this.CB['adPauseClose']); + //定义各个按钮的鼠标经过/离开事件 + var promptHide = function(event) { + thisTemp.promptShow(false); + }; + var playOver = function(event) { + thisTemp.promptShow(thisTemp.CB['play']); + }; + this.addListenerInside('mouseover', playOver, this.CB['play']); + this.addListenerInside('mouseout', promptHide, this.CB['play']); + var pauseOver = function(event) { + thisTemp.promptShow(thisTemp.CB['pause']); + }; + this.addListenerInside('mouseover', pauseOver, this.CB['pause']); + this.addListenerInside('mouseout', promptHide, this.CB['pause']); + var frontOver = function(event) { + thisTemp.promptShow(thisTemp.CB['front']); + }; + this.addListenerInside('mouseover', frontOver, this.CB['front']); + this.addListenerInside('mouseout', promptHide, this.CB['front']); + var nextOver = function(event) { + thisTemp.promptShow(thisTemp.CB['next']); + }; + this.addListenerInside('mouseover', nextOver, this.CB['next']); + this.addListenerInside('mouseout', promptHide, this.CB['next']); + var muteOver = function(event) { + thisTemp.promptShow(thisTemp.CB['mute']); + }; + this.addListenerInside('mouseover', muteOver, this.CB['mute']); + this.addListenerInside('mouseout', promptHide, this.CB['mute']); + var escMuteOver = function(event) { + thisTemp.promptShow(thisTemp.CB['escMute']); + }; + this.addListenerInside('mouseover', escMuteOver, this.CB['escMute']); + this.addListenerInside('mouseout', promptHide, this.CB['escMute']); + var fullOver = function(event) { + thisTemp.promptShow(thisTemp.CB['full']); + }; + this.addListenerInside('mouseover', fullOver, this.CB['full']); + this.addListenerInside('mouseout', promptHide, this.CB['full']); + var escFullOver = function(event) { + thisTemp.promptShow(thisTemp.CB['escFull']); + }; + this.addListenerInside('mouseover', escFullOver, this.CB['escFull']); + this.addListenerInside('mouseout', promptHide, this.CB['escFull']); + var definitionOver = function(event) { + thisTemp.promptShow(thisTemp.CB['definition']); + }; + this.addListenerInside('mouseover', definitionOver, this.CB['definition']); + this.addListenerInside('mouseout', promptHide, this.CB['definition']); + var playbackrateOver = function(event) { + thisTemp.promptShow(thisTemp.CB['playbackrate']); + }; + this.addListenerInside('mouseover', playbackrateOver, this.CB['playbackrate']); + this.addListenerInside('mouseout', promptHide, this.CB['playbackrate']); + //定义音量和进度按钮的滑块事件 + var volumePrompt = function(vol) { + var volumeBOXY = thisTemp.getCoor(thisTemp.CB['volumeBO']); + var promptObj = { + title: thisTemp.language['volume'] + vol + '%', + x: volumeBOXY['x'] + thisTemp.CB['volumeBO'].offsetWidth * 0.5, + y: volumeBOXY['y'] + }; + thisTemp.promptShow(false, promptObj); + }; + var volumeObj = { + slider: this.CB['volumeBO'], + follow: this.CB['volumeUp'], + refer: this.CB['volumeBg'], + grossValue: 'volume', + pd: true, + startFun: function(vol) {}, + monitorFun: function(vol) { + thisTemp.changeVolume(vol * 0.01, false, false); + volumePrompt(vol); + }, + endFun: function(vol) {}, + overFun: function(vol) { + volumePrompt(vol); + } + }; + this.slider(volumeObj); + var volumeClickObj = { + refer: this.CB['volumeBg'], + grossValue: 'volume', + fun: function(vol) { + thisTemp.changeVolume(vol * 0.01, true, true); + } + }; + this.progressClick(volumeClickObj); + this.timeButtonMouseDown(); //用单击的函数来判断是否需要建立控制栏监听 + //鼠标经过/离开音量调节框时的 + var volumeBgMove = function(event) { + var volumeBgXY = thisTemp.getCoor(thisTemp.CB['volumeBg']); + var eventX = thisTemp.client(event)['x']; + var eventVolume = parseInt((eventX - volumeBgXY['x']) * 100 / thisTemp.CB['volumeBg'].offsetWidth); + var buttonPromptObj = { + title: thisTemp.language['volume'] + eventVolume + '%', + x: eventX, + y: volumeBgXY['y'] + }; + thisTemp.promptShow(false, buttonPromptObj); + }; + this.addListenerInside('mousemove', volumeBgMove, this.CB['volumeBg']); + this.addListenerInside('mouseout', promptHide, this.CB['volumeBg']); + this.addListenerInside('mouseout', promptHide, this.CB['volumeBO']); + //注册清晰度相关事件 + this.addDefListener(); + //注册倍速相关事件 + this.addPlaybackrate(); + }, + /* + 内部函数 + 注册单击视频动作 + */ + videoClick: function() { + var thisTemp = this; + var clearTimerClick = function() { + if (thisTemp.timerClick != null) { + if (thisTemp.timerClick.runing) { + thisTemp.timerClick.stop(); + } + thisTemp.timerClick = null; + } + }; + var timerClickFun = function() { + clearTimerClick(); + thisTemp.isClick = false; + if (thisTemp.adPlayerPlay) { + var ad = thisTemp.getNowAdvertisements(); + try { + if (ad['link'] != '') { + window.open(ad['link']); + } + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + } catch(event) {} + } else { + if (thisTemp.ckplayerConfig['config']['click']) { + thisTemp.playOrPause(); + } + } + + }; + clearTimerClick(); + if (this.isClick) { + this.isClick = false; + if (thisTemp.ckplayerConfig['config']['doubleClick']) { + if (!this.full) { + thisTemp.fullScreen(); + } else { + thisTemp.quitFullScreen(); + } + } + + } else { + this.isClick = true; + this.timerClick = new this.timer(300, timerClickFun, 1) + //this.timerClick.start(); + } + + }, + /* + 内部函数 + 注册鼠标经过进度滑块的事件 + */ + timeButtonMouseDown: function() { + var thisTemp = this; + var timePrompt = function(time) { + if (isNaN(time)) { + time = 0; + } + var timeButtonXY = thisTemp.getCoor(thisTemp.CB['timeButton']); + var promptObj = { + title: thisTemp.formatTime(time), + x: timeButtonXY['x'] - thisTemp.pdCoor['x'] + thisTemp.CB['timeButton'].offsetWidth * 0.5, + y: timeButtonXY['y'] - thisTemp.pdCoor['y'] + }; + thisTemp.promptShow(false, promptObj); + }; + var timeObj = { + slider: this.CB['timeButton'], + follow: this.CB['timeProgress'], + refer: this.CB['timeBoBg'], + grossValue: 'time', + pd: false, + startFun: function(time) { + thisTemp.isTimeButtonMove = false; + }, + monitorFun: function(time) {}, + endFun: function(time) { + if (thisTemp.V) { + if (thisTemp.V.duration > 0) { + thisTemp.needSeek = 0; + thisTemp.videoSeek(parseInt(time)); + } + } + }, + overFun: function(time) { + timePrompt(time); + } + }; + var timeClickObj = { + refer: this.CB['timeBoBg'], + grossValue: 'time', + fun: function(time) { + if (thisTemp.V) { + if (thisTemp.V.duration > 0) { + thisTemp.needSeek = 0; + thisTemp.videoSeek(parseInt(time)); + } + } + } + }; + var timeBoBgmousemove = function(event) { + var timeBoBgXY = thisTemp.getCoor(thisTemp.CB['timeBoBg']); + var eventX = thisTemp.client(event)['x']; + var eventTime = parseInt((eventX - timeBoBgXY['x']) * thisTemp.V.duration / thisTemp.CB['timeBoBg'].offsetWidth); + var buttonPromptObj = { + title: thisTemp.formatTime(eventTime), + x: eventX, + y: timeBoBgXY['y'] + }; + thisTemp.promptShow(false, buttonPromptObj); + var def = false; + if (!thisTemp.isUndefined(thisTemp.CB['definitionP'])) { + if (thisTemp.css(thisTemp.CB['definitionP'], 'display') != 'block') { + def = true; + } + } + if (thisTemp.vars['preview'] != null && def) { + buttonPromptObj['time'] = eventTime; + thisTemp.preview(buttonPromptObj); + } + }; + var promptHide = function(event) { + thisTemp.promptShow(false); + if (thisTemp.previewDiv != null) { + thisTemp.css([thisTemp.previewDiv, thisTemp.previewTop], 'display', 'none'); + } + }; + if (!this.vars['live']) { //如果不是直播 + this.isTimeButtonDown = true; + this.addListenerInside('mousemove', timeBoBgmousemove, this.CB['timeBoBg']); + this.addListenerInside('mouseout', promptHide, this.CB['timeBoBg']); + } else { + this.isTimeButtonDown = false; + timeObj['removeListenerInside'] = true; + timeClickObj['removeListenerInside'] = true; + } + this.slider(timeObj); + this.progressClick(timeClickObj); + + }, + /* + 内部函数 + 注册调节框上单击事件,包含音量调节框和播放时度调节框 + */ + progressClick: function(obj) { + /* + refer:参考对象 + fun:返回函数 + refer:参考元素,即背景 + grossValue:调用的参考值类型 + pd: + */ + //建立参考元素的mouseClick事件,用来做为鼠标在其上按下时触发的状态 + var thisTemp = this; + var referMouseClick = function(event) { + var referX = thisTemp.client(event)['x'] - thisTemp.getCoor(obj['refer'])['x']; + var rWidth = obj['refer'].offsetWidth; + var grossValue = 0; + if (obj['grossValue'] == 'volume') { + grossValue = 100; + } else { + if (thisTemp.V) { + grossValue = thisTemp.V.duration; + } + } + var nowZ = parseInt(referX * grossValue / rWidth); + if (obj['fun']) { + if (obj['grossValue'] === 'time') { + var sliderXY = thisTemp.getCoor(thisTemp.CB['timeButton']); + sliderLeft = sliderXY['x']; + if (!thisTemp.checkSlideLeft(referX, sliderLeft, rWidth)) { + return; + } + var bimeButtonWB = thisTemp.CB['timeButton'].offsetWidth * 0.5; + thisTemp.css(thisTemp.CB['timeButton'], 'left', (referX - bimeButtonWB) + 'px'); + thisTemp.css(thisTemp.CB['timeProgress'], 'width', (referX) + 'px'); + } + obj['fun'](nowZ); + } + }; + if (this.isUndefined(obj['removeListenerInside'])) { + this.addListenerInside('click', referMouseClick, obj['refer']); + } else { + this.removeListenerInside('click', referMouseClick, obj['refer']); + } + + }, + + /* + 内部函数 + 共用的注册滑块事件 + */ + slider: function(obj) { + /* + obj={ + slider:滑块元素 + follow:跟随滑块的元素 + refer:参考元素,即背景 + grossValue:调用的参考值类型 + startFun:开始调用的元素 + monitorFun:监听函数 + endFun:结束调用的函数 + overFun:鼠标放上去后调用的函数 + pd:是否需要修正 + } + */ + var thisTemp = this; + var clientX = 0, + criterionWidth = 0, + sliderLeft = 0, + referLeft = 0; + var value = 0; + var calculation = function() { //根据滑块的left计算百分比 + var sLeft = parseInt(thisTemp.css(obj['slider'], 'left')); + var rWidth = obj['refer'].offsetWidth - obj['slider'].offsetWidth; + var grossValue = 0; + if (thisTemp.isUndefined(sLeft) || isNaN(sLeft)) { + sLeft = 0; + } + if (obj['grossValue'] == 'volume') { + grossValue = 100; + } else { + if (thisTemp.V) { + grossValue = thisTemp.V.duration; + } + } + return parseInt(sLeft * grossValue / rWidth); + }; + var mDown = function(event) { + thisTemp.addListenerInside('mousemove', mMove, document); + thisTemp.addListenerInside('mouseup', mUp, document); + var referXY = thisTemp.getCoor(obj['refer']); + var sliderXY = thisTemp.getCoor(obj['slider']); + clientX = thisTemp.client(event)['x']; + referLeft = referXY['x']; + sliderLeft = sliderXY['x']; + criterionWidth = clientX - sliderLeft; + if (obj['startFun']) { + obj['startFun'](calculation()); + } + }; + var mMove = function(event) { + clientX = thisTemp.client(event)['x']; + var newX = clientX - criterionWidth - referLeft; + if (newX < 0) { + newX = 0; + } + if (newX > obj['refer'].offsetWidth - obj['slider'].offsetWidth) { + newX = obj['refer'].offsetWidth - obj['slider'].offsetWidth; + } + if (obj['slider'] === thisTemp.CB['timeButton']) { + if (!thisTemp.checkSlideLeft(newX, sliderLeft, obj['refer'].offsetWidth)) { + return; + } + } + thisTemp.css(obj['slider'], 'left', newX + 'px'); + thisTemp.css(obj['follow'], 'width', (newX + obj['slider'].offsetWidth * 0.5) + 'px'); + var nowZ = calculation(); + if (obj['monitorFun']) { + obj['monitorFun'](nowZ); + } + }; + var mUp = function(event) { + thisTemp.removeListenerInside('mousemove', mMove, document); + thisTemp.removeListenerInside('mouseup', mUp, document); + if (obj['endFun']) { + obj['endFun'](calculation()); + } + }; + var mOver = function(event) { + if (obj['overFun']) { + obj['overFun'](calculation()); + } + + }; + if (this.isUndefined(obj['removeListenerInside'])) { + this.addListenerInside('mousedown', mDown, obj['slider']); + this.addListenerInside('mouseover', mOver, obj['slider']); + } else { + this.removeListenerInside('mousedown', mDown, obj['slider']); + this.removeListenerInside('mouseover', mOver, obj['slider']); + } + }, + /* + 内部函数 + 判断是否可以拖动进度按钮或点击进度栏 + */ + checkSlideLeft: function(newX, sliderLeft, refer) { + var timeSA = this.ckplayerConfig['config']['timeScheduleAdjust']; + switch (timeSA) { + case 0: + return false; + break; + case 2: + if (newX < sliderLeft) { + return false; + } + break; + case 3: + if (newX > sliderLeft) { + return false; + } + break; + case 4: + if (!this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = sliderLeft / refer; + } + if (newX < this.timeSliderLeftTemp * refer) { + return false; + } + break; + case 5: + if (!this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = sliderLeft / refer; + } else { + var timeSliderMax = sliderLeft / refer; + if (timeSliderMax > this.timeSliderLeftTemp) { + this.timeSliderLeftTemp = timeSliderMax; + } + } + if (newX > this.timeSliderLeftTemp * refer) { + return false; + } + break; + default: + return true; + break; + } + return true; + }, + /* + 内部函数 + 显示loading + */ + loadingStart: function(rot) { + var thisTemp = this; + if (this.isUndefined(rot)) { + rot = true; + } + if (this.showFace) { + this.css(thisTemp.CB['loading'], 'display', 'none'); + } + if (this.timerLoading != null) { + if (this.timerLoading.runing) { + this.timerLoading.stop(); + } + this.timerLoading = null; + } + var buffer = 0; + var loadingFun = function() { + var nowRotate = '0'; + try { + nowRotate = thisTemp.css(thisTemp.CB['loadingCanvas'], 'transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-ms-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-moz-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-webkit-transform') || thisTemp.css(thisTemp.CB['loadingCanvas'], '-o-transform') || '0'; + } catch(event) {} + nowRotate = parseInt(nowRotate.replace('rotate(', '').replace('deg);', '')); + nowRotate += 4; + if (nowRotate > 360) { + nowRotate = 0; + } + if (thisTemp.showFace) { + thisTemp.css(thisTemp.CB['loadingCanvas'], { + transform: 'rotate(' + nowRotate + 'deg)', + msTransform: 'rotate(' + nowRotate + 'deg)', + mozTransform: 'rotate(' + nowRotate + 'deg)', + webkitTransform: 'rotate(' + nowRotate + 'deg)', + oTransform: 'rotate(' + nowRotate + 'deg)' + }); + } + buffer++; + if (buffer >= 99) { + buffer = 99; + } + thisTemp.sendJS('buffer', buffer); + }; + if (rot) { + this.timerLoading = new this.timer(10, loadingFun); + //this.timerLoading.start(); + if (this.showFace) { + this.css(thisTemp.CB['loading'], 'display', 'block'); + } + } else { + thisTemp.sendJS('buffer', 100); + } + }, + /* + 内部函数 + 判断是否需要显示上一集和下一集 + */ + showFrontNext: function() { + if (!this.showFace) { + return; + } + if (this.vars['front']) { + this.css([this.CB['front'], this.CB['frontLine']], 'display', 'block'); + } else { + this.css([this.CB['front'], this.CB['frontLine']], 'display', 'none'); + } + if (this.vars['next']) { + this.css([this.CB['next'], this.CB['nextLine']], 'display', 'block'); + } else { + this.css([this.CB['next'], this.CB['nextLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 显示提示语 + */ + promptShow: function(ele, data) { + if (!this.showFace) { + return; + } + var obj = {}; + if (ele || data) { + if (!this.isUndefined(data)) { + obj = data; + } else { + var offsetCoor = this.getCoor(ele); + obj = { + title: this.getDataset(ele, 'title'), + x: offsetCoor['x'] + ele.offsetWidth * 0.5, + y: offsetCoor['y'] + }; + } + this.CB['prompt'].innerHTML = obj['title']; + this.css(this.CB['prompt'], 'display', 'block'); + var promoptWidth = this.getStringLen(obj['title']) * 10; + this.css(this.CB['promptBg'], 'width', promoptWidth + 'px'); + this.css(this.CB['prompt'], 'width', promoptWidth + 'px'); + promoptWidth += 10; + var x = obj['x'] - (promoptWidth * 0.5); + var y = this.PD.offsetHeight - obj['y'] + 8; + if (x < 0) { + x = 0; + } + if (x > this.PD.offsetWidth - promoptWidth) { + x = this.PD.offsetWidth - promoptWidth; + } + this.css([this.CB['promptBg'], this.CB['prompt']], { + display: 'block', + left: x + 'px', + bottom: y + 'px' + }); + } else { + this.css([this.CB['promptBg'], this.CB['prompt']], { + display: 'none' + }); + } + }, + /* + 内部函数 + 监听错误 + */ + timerErrorFun: function() { + var thisTemp = this; + this.errorSend = false; + var clearIntervalError = function(event) { + if (thisTemp.timerError != null) { + if (thisTemp.timerError.runing) { + thisTemp.timerError.stop(); + } + thisTemp.timerError = null; + } + }; + var errorFun = function(event) { + clearIntervalError(); + thisTemp.error = true; + //提取错误播放地址 + thisTemp.errorUrl = thisTemp.getVideoUrl(); + //提取错误播放地址结束 + if (!thisTemp.errorSend) { + thisTemp.errorSend = true; + thisTemp.sendJS('error'); + } + if (thisTemp.showFace) { + thisTemp.css(thisTemp.CB['errorText'], 'display', 'block'); + thisTemp.css(thisTemp.CB['pauseCenter'], 'display', 'none'); + thisTemp.css(thisTemp.CB['loading'], 'display', 'none'); + } + thisTemp.V.removeAttribute('poster'); + thisTemp.resetPlayer(); + }; + var errorListenerFun = function(event) { + setTimeout(function() { + if (isNaN(thisTemp.V.duration)) { + errorFun(event); + } + }, + 500); + + }; + if (!this.errorAdd) { + this.errorAdd = true; + this.addListenerInside('error', errorListenerFun, this.V); + } + clearIntervalError(); + var timerErrorFun = function() { + if (thisTemp.V && parseInt(thisTemp.V.networkState) == 3) { + errorFun(); + } + }; + this.timerError = new this.timer(this.config['errorTime'], timerErrorFun); + //this.timerError.start(); + }, + /* + 内部函数 + 构建判断全屏还是非全屏的判断 + */ + judgeFullScreen: function() { + var thisTemp = this; + if (this.timerFull != null) { + if (this.timerFull.runing) { + this.timerFull.stop(); + } + this.timerFull = null; + } + var fullFun = function() { + thisTemp.isFullScreen(); + }; + this.timerFull = new this.timer(20, fullFun); + }, + /* + 内部函数 + 判断是否是全屏 + */ + isFullScreen: function() { + if (!this.showFace) { + return; + } + var fullState = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement; + if (fullState && !this.full) { + this.full = true; + this.sendJS('full', true); + this.elementCoordinate(); + this.css(this.CB['full'], 'display', 'none'); + this.css(this.CB['escFull'], 'display', 'block'); + if (this.vars['live'] == 0) { + this.timeUpdateHandler(); + } + this.PD.appendChild(this.CB['menu']); + } + if (!fullState && this.full) { + this.full = false; + this.sendJS('full', false); + this.elementCoordinate(); + this.css(this.CB['full'], 'display', 'block'); + this.css(this.CB['escFull'], 'display', 'none'); + if (this.timerFull != null) { + if (this.timerFull.runing) { + this.timerFull.stop(); + } + this.timerFull = null; + } + if (this.vars['live'] == 0) { + this.timeUpdateHandler(); + } + this.body.appendChild(this.CB['menu']); + } + }, + /* + 内部函数 + 构建右键内容及注册相关动作事件 + */ + newMenu: function() { + var thisTemp = this; + var i = 0; + this.css(this.CB['menu'], { + backgroundColor: '#FFFFFF', + padding: '5px', + position: 'absolute', + left: '10px', + top: '20px', + display: 'none', + zIndex: '999', + color: '#A1A9BE', + boxShadow: '2px 2px 3px #AAAAAA' + }); + var mArr = this.contextMenu; + var cMenu = this.ckplayerConfig['menu']; + if (cMenu['name']) { + if (cMenu['link']) { + mArr[0] = [cMenu['name'], 'link', cMenu['link']]; + } else { + mArr[0] = [cMenu['name'], 'default']; + } + } + if (cMenu['version']) { + mArr[1] = [cMenu['version'], 'default', 'line']; + } + if (cMenu['more']) { + if (typeof(cMenu['more']) == 'object') { + if (cMenu['more'].length > 0) { + var moreArr = cMenu['more']; + for (i = 0; i < moreArr.length; i++) { + var mTemp = moreArr[i]; + var arrTemp = []; + if (mTemp['name']) { + arrTemp.push(mTemp['name']); + } + if (mTemp['clickEvent'] && mTemp['clickEvent'] != 'none') { + var eveObj = this.clickEvent(mTemp['clickEvent']); + arrTemp.push(eveObj['type']); + if (eveObj['fun']) { + arrTemp.push(eveObj['fun']); + } + if (eveObj['link']) { + arrTemp.push(eveObj['link']); + } + if (eveObj['target']) { + arrTemp.push(' target="' + eveObj['target'] + '"'); + } + } + if (mTemp['separatorBefore']) { + arrTemp.push('line'); + } + mArr.push(arrTemp); + } + } + } + } + var html = ''; + for (i = 0; i < mArr.length; i++) { + var me = mArr[i]; + switch (me[1]) { + case 'default': + html += '

' + me[0] + '

'; + break; + case 'link': + if (me[3]) { + me[3] = 'target="' + me[3] + '"'; + } + html += '

' + me[0] + '

'; + break; + case 'javaScript': + html += '

' + me[0] + '

'; + break; + case 'actionScript': + html += '

' + me[0] + '

'; + break; + default: + break; + } + } + this.CB['menu'].innerHTML = html; + var pArr = this.CB['menu'].childNodes; + for (i = 0; i < pArr.length; i++) { + this.css(pArr[i], { + height: '30px', + lineHeight: '30px', + margin: '0px', + fontFamily: this.fontFamily, + fontSize: '12px', + paddingLeft: '10px', + paddingRight: '30px' + }); + if (mArr[i][mArr[i].length - 1] == 'line') { + this.css(pArr[i], 'borderBottom', '1px solid #e9e9e9'); + } + var aArr = pArr[i].childNodes; + for (var n = 0; n < aArr.length; n++) { + if (aArr[n].localName == 'a') { + this.css(aArr[n], { + color: '#000000', + textDecoration: 'none' + }); + } + } + } + this.PD.oncontextmenu = function(event) { + var eve = event || window.event; + var client = thisTemp.client(event); + if (eve.button == 2) { + eve.returnvalue = false; + var x = client['x'] + thisTemp.pdCoor['x'] - 2; + var y = client['y'] + thisTemp.pdCoor['y'] - 2; + thisTemp.css(thisTemp.CB['menu'], { + display: 'block', + left: x + 'px', + top: y + 'px' + }); + return false; + } + return true; + }; + var setTimeOutPClose = function() { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + var setTimeOutP = null; + var mouseOut = function(event) { + setTimeOutPClose(); + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['menu'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', mouseOut, thisTemp.CB['menu']); + var mouseOver = function(event) { + setTimeOutPClose(); + }; + this.addListenerInside('mouseover', mouseOver, thisTemp.CB['menu']); + + }, + /* + 内部函数 + 构建控制栏隐藏事件 + */ + controlBarHide: function(hide) { + var thisTemp = this; + var client = { + x: 0, + y: 0 + }, + oldClient = { + x: 0, + y: 0 + }; + var cShow = true, + force = false; + var oldCoor = [0, 0]; + var controlBarShow = function(show) { + if (show && !cShow && thisTemp.controlBarIsShow) { + cShow = true; + thisTemp.sendJS('controlBar', true); + thisTemp.css(thisTemp.CB['controlBarBg'], 'display', 'block'); + thisTemp.css(thisTemp.CB['controlBar'], 'display', 'block'); + thisTemp.css(thisTemp.CB['timeProgressBg'], 'display', 'block'); + thisTemp.css(thisTemp.CB['timeBoBg'], 'display', 'block'); + thisTemp.changeVolume(thisTemp.volume); + thisTemp.changeLoad(); + if (!thisTemp.timerBuffer) { + thisTemp.bufferEdHandler(); + } + } else { + if (cShow) { + cShow = false; + var paused = thisTemp.getMetaDate()['paused']; + if (force) { + paused = false; + } + if (!paused) { + thisTemp.sendJS('controlBar', false); + thisTemp.css(thisTemp.CB['controlBarBg'], 'display', 'none'); + thisTemp.css(thisTemp.CB['controlBar'], 'display', 'none'); + thisTemp.css(thisTemp.CB['timeProgressBg'], 'display', 'none'); + thisTemp.css(thisTemp.CB['timeBoBg'], 'display', 'none'); + thisTemp.promptShow(false); + + } + } + } + }; + var cbarFun = function(event) { + if (client['x'] == oldClient['x'] && client['y'] == oldClient['y']) { + var cdH = parseInt(thisTemp.CD.offsetHeight); + if ((client['y'] < cdH - 50 || client['y'] > cdH - 2) && cShow && !thisTemp.getMetaDate()['paused']) { + controlBarShow(false); + } + } else { + if (!cShow) { + controlBarShow(true); + } + } + oldClient = { + x: client['x'], + y: client['y'] + } + }; + this.timerCBar = new this.timer(2000, cbarFun); + var cdMove = function(event) { + var getClient = thisTemp.client(event); + client['x'] = getClient['x']; + client['y'] = getClient['y']; + if (!cShow) { + controlBarShow(true); + } + }; + this.addListenerInside('mousemove', cdMove, thisTemp.CD); + this.addListenerInside('ended', cdMove); + this.addListenerInside('resize', cdMove, window); + if (hide === true) { + cShow = true; + force = true; + controlBarShow(false); + } + if (hide === false) { + cShow = false; + force = true; + controlBarShow(true); + } + }, + + /* + 内部函数 + 注册键盘按键事件 + */ + keypress: function() { + var thisTemp = this; + var keyDown = function(eve) { + var keycode = eve.keyCode || eve.which; + if (this.adPlayerPlay) { + return; + } + switch (keycode) { + case 32: + thisTemp.playOrPause(); + break; + case 37: + thisTemp.fastBack(); + break; + case 39: + thisTemp.fastNext(); + break; + case 38: + now = thisTemp.volume + thisTemp.ckplayerConfig['config']['volumeJump']; + thisTemp.changeVolume(now > 1 ? 1 : now); + break; + case 40: + now = thisTemp.volume - thisTemp.ckplayerConfig['config']['volumeJump']; + thisTemp.changeVolume(now < 0 ? 0 : now); + break; + default: + break; + } + }; + this.addListenerInside('keydown', keyDown, window || document); + }, + /* + 内部函数 + 注册倍速相关 + */ + playbackRate: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var vArr = this.playbackRateArr; + var html = ''; + var nowD = ''; //当前的清晰度 + var i = 0; + if (!nowD) { + nowD = vArr[this.playbackRateDefault][1]; + } + if (vArr.length > 1) { + var zlen = 0; + for (i = 0; i < vArr.length; i++) { + html = '

' + vArr[i][1] + '

' + html; + var dlen = this.getStringLen(vArr[i][1]); + if (dlen > zlen) { + zlen = dlen; + } + } + if (html) { + html += '

' + nowD + '

'; + } + this.CB['playbackrate'].innerHTML = nowD; + this.CB['playbackrateP'].innerHTML = html; + this.css([this.CB['playbackrate'], this.CB['playbackrateLine']], 'display', 'block'); + var pArr = this.CB['playbackrateP'].childNodes; + for (var i = 0; i < pArr.length; i++) { + var fontColor = '#FFFFFF'; + if (pArr[i].innerHTML == nowD) { + fontColor = '#0782F5'; + } + this.css(pArr[i], { + color: fontColor, + margin: '0px', + padding: '0px', + fontSize: '14px' + }); + if (i < pArr.length - 1) { + this.css(pArr[i], 'borderBottom', '1px solid #282828') + } + var defClick = function(event) { + if (nowD != this.innerHTML) { + thisTemp.css(thisTemp.CB['playbackrateP'], 'display', 'none'); + thisTemp.newPlaybackrate(this.innerHTML); + thisTemp.sendJS('clickEvent', 'actionScript->newPlaybackrate'); + } + }; + this.addListenerInside('click', defClick, pArr[i]); + + } + var pW = (zlen * 10) + 20; + this.css(this.CB['playbackrateP'], { + width: pW + 'px' + }); + this.css(this.CB['playbackrate'], { + width: pW + 'px' + }); + this.buttonWidth['playbackrate'] = this.CB['playbackrate'].offsetWidth; + } else { + this.CB['playbackrate'].innerHTML = ''; + this.CB['playbackrateP'].innerHTML = ''; + this.css([this.CB['playbackrate'], this.CB['playbackrateLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 注册切换倍速播放相关事件 + */ + addPlaybackrate: function() { + var thisTemp = this; + var setTimeOutP = null; + var defClick = function(event) { + thisTemp.css(thisTemp.CB['playbackrateP'], { + left: thisTemp.getCoor(thisTemp.CB['playbackrate'])['x'] + 'px', + display: 'block' + }); + }; + this.addListenerInside('click', defClick, this.CB['playbackrate']); + var defMouseOut = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['playbackrateP'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', defMouseOut, thisTemp.CB['playbackrateP']); + var defMouseOver = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + this.addListenerInside('mouseover', defMouseOver, thisTemp.CB['playbackrateP']); + }, + /* + 内部函数 + 切换倍速后发生的动作 + */ + newPlaybackrate: function(title) { + var vArr = this.playbackRateArr; + var nVArr = []; + var i = 0; + for (i = 0; i < vArr.length; i++) { + var v = vArr[i]; + if (v[1] == title) { + this.playbackRateDefault = i; + this.V.playbackRate = v[0]; + if (this.showFace) { + this.CB['playbackrate'].innerHTML = v[1]; + this.playbackRate(); + } + this.sendJS('playbackRate', v); + } + } + }, + + /* + 内部函数 + 构建清晰度按钮及切换事件(Click事件) + */ + definition: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var vArr = this.VA; + var dArr = []; + var html = ''; + var nowD = ''; //当前的清晰度 + var i = 0; + for (i = 0; i < vArr.length; i++) { + var d = vArr[i][2]; + if (dArr.indexOf(d) == -1) { + dArr.push(d); + } + if (this.V) { + if (vArr[i][0] == this.V.currentSrc) { + nowD = d; + } + } + } + if (!nowD) { + nowD = dArr[0]; + } + if (dArr.length > 1) { + var zlen = 0; + for (i = dArr.length - 1; i > -1; i--) { + html = '

' + dArr[i] + '

' + html; + var dlen = this.getStringLen(dArr[i]); + if (dlen > zlen) { + zlen = dlen; + } + } + if (html) { + html += '

' + nowD + '

'; + } + this.CB['definition'].innerHTML = nowD; + this.CB['definitionP'].innerHTML = html; + this.css([this.CB['definition'], this.CB['definitionLine']], 'display', 'block'); + var pArr = this.CB['definitionP'].childNodes; + for (var i = 0; i < pArr.length; i++) { + var fontColor = '#FFFFFF'; + if (pArr[i].innerHTML == nowD) { + fontColor = '#0782F5'; + } + this.css(pArr[i], { + color: fontColor, + margin: '0px', + padding: '0px', + fontSize: '14px' + }); + if (i < pArr.length - 1) { + this.css(pArr[i], 'borderBottom', '1px solid #282828') + } + var defClick = function() { + if (nowD != this.innerHTML) { + thisTemp.css(thisTemp.CB['definitionP'], 'display', 'none'); + thisTemp.newDefinition(this.innerHTML); + } + }; + this.addListenerInside('click', defClick, pArr[i]); + + } + var pW = (zlen * 10) + 20; + this.css(this.CB['definitionP'], { + width: pW + 'px' + }); + this.css(this.CB['definition'], { + width: pW + 'px' + }); + this.buttonWidth['definition'] = this.CB['definition'].offsetWidth; + } else { + this.CB['definition'].innerHTML = ''; + this.CB['definitionP'].innerHTML = ''; + this.css([this.CB['definition'], this.CB['definitionLine']], 'display', 'none'); + } + }, + /* + 内部函数 + 注册清晰度相关事件 + */ + addDefListener: function() { + var thisTemp = this; + var setTimeOutP = null; + var defClick = function(event) { + thisTemp.css(thisTemp.CB['definitionP'], { + left: thisTemp.getCoor(thisTemp.CB['definition'])['x'] + 'px', + display: 'block' + }); + }; + this.addListenerInside('click', defClick, this.CB['definition']); + var defMouseOut = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + setTimeOutP = setTimeout(function(event) { + thisTemp.css(thisTemp.CB['definitionP'], 'display', 'none'); + }, + 500); + }; + this.addListenerInside('mouseout', defMouseOut, thisTemp.CB['definitionP']); + var defMouseOver = function(event) { + if (setTimeOutP) { + window.clearTimeout(setTimeOutP); + setTimeOutP = null; + } + }; + this.addListenerInside('mouseover', defMouseOver, thisTemp.CB['definitionP']); + }, + /* + 接口函数 + 提供给外部api + */ + changeDefinition: function(n) { + if (!this.loaded || n < 0) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeDefinition(n); + return; + } + if (this.VA.length > n) { + var arr = this.VA[n]; + if (arr.length > 3) { + var title = arr[2]; + if (title) { + this.newDefinition(title); + } + } + } + }, + /* + 内部函数 + 切换清晰度后发生的动作 + */ + newDefinition: function(title) { + var vArr = this.VA; + var nVArr = []; + var i = 0; + for (i = 0; i < vArr.length; i++) { + var v = vArr[i]; + if (v[2] == title) { + nVArr.push(v); + this.sendJS('definitionChange', i + ''); + } + } + if (nVArr.length < 1) { + return; + } + if (this.V != null && this.needSeek == 0) { + this.needSeek = this.V.currentTime; + } + if (this.getFileExt(nVArr[0][0]) != '.m3u8') { + this.isM3u8 = false; + } + if (!this.isM3u8) { + if (nVArr.length == 1) { + this.V.innerHTML = ''; + this.V.src = nVArr[0][0]; + this.V.currentSrc = nVArr[0][0]; + } else { + var source = ''; + nVArr = this.arrSort(nVArr); + for (i = 0; i < nVArr.length; i++) { + var type = ''; + var va = nVArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + } + source += ''; + } + this.V.removeAttribute('src'); + this.V.innerHTML = source; + this.V.currentSrc = nVArr[0][0]; + } + } else { + this.embedHls(vArr[0][0], this.vars['autoplay']); + } + this.V.autoplay = 'autoplay'; + this.V.load(); + this.timerErrorFun(); + }, + /* + 内置函数 + 播放hls + */ + embedHls: function(url, autoplay) { + var thisTemp = this; + if (Hls.isSupported()) { + var hls = new Hls(); + hls.loadSource(url); + hls.attachMedia(this.V); + hls.on(Hls.Events.MANIFEST_PARSED, + function() { + thisTemp.playerLoad(); + if (autoplay) { + thisTemp.videoPlay(); + } + }); + } + }, + /* + 内部函数 + 构建提示点 + */ + prompt: function() { + if (!this.showFace) { + return; + } + var thisTemp = this; + var prompt = this.vars['promptSpot']; + if (prompt == null || this.promptArr.length > 0) { + return; + } + var showPrompt = function(event) { + if (thisTemp.promptElement == null) { + var random2 = 'prompte' + thisTemp.randomString(5); + var ele2 = document.createElement('div'); + ele2.className = random2; + thisTemp.PD.appendChild(ele2); + thisTemp.promptElement = thisTemp.getByElement(random2); + thisTemp.css(thisTemp.promptElement, { + overflowX: 'hidden', + lineHeight: '22px', + fontSize: '14px', + color: '#FFFFFF', + position: 'absolute', + display: 'block', + zIndex: '90' + }); + } + var pcon = thisTemp.getPromptTest(); + var pW = pcon['pW'], + pT = pcon['pT'], + pL = parseInt(thisTemp.css(this, 'left')) - parseInt(pW * 0.5); + if (pcon['pL'] > 10) { + pL = pcon['pL']; + } + if (pL < 0) { + pL = 0; + } + thisTemp.css(thisTemp.promptElement, { + width: pW + 'px', + left: ( - pW - 10) + 'px', + display: 'block' + }); + thisTemp.promptElement.innerHTML = thisTemp.getDataset(this, 'words'); + thisTemp.css(thisTemp.promptElement, { + left: pL + 'px', + top: (pT - thisTemp.promptElement.offsetHeight - 10) + 'px' + }); + }; + var hidePrompt = function(event) { + if (thisTemp.promptElement != null) { + thisTemp.css(thisTemp.promptElement, { + display: 'none' + }); + } + }; + var i = 0; + for (i = 0; i < prompt.length; i++) { + var pr = prompt[i]; + var words = pr['words']; + var time = pr['time']; + var random = 'prompt' + this.randomString(5); + var ele = document.createElement('div'); + ele.className = random; + this.CB['timeBoBg'].appendChild(ele); + var div = this.getByElement(random); + div.setAttribute('data-time', time); + div.setAttribute('data-words', words); + this.css(div, { + width: '6px', + height: '6px', + backgroundColor: '#FFFFFF', + position: 'absolute', + top: '4px', + left: '-100px', + display: 'none', + zIndex: '1', + borderRadius: '6px' + }); + + this.addListenerInside('mouseover', showPrompt, div); + this.addListenerInside('mouseout', hidePrompt, div); + this.promptArr.push(div); + } + this.changePrompt(); + }, + /* + 内部函数 + 计算提示文本的位置 + */ + getPromptTest: function() { + var pW = this.previewWidth, + pT = this.getCoor(this.CB['timeButton'])['y'], + pL = 0; + if (this.previewTop != null) { + pT -= parseInt(this.css(this.previewTop, 'height')); + pL = parseInt(this.css(this.previewTop, 'left')); + } else { + pT -= 35; + } + pL += 2; + if (pL < 0) { + pL = 0; + } + if (pL > this.PD.offsetWidth - pW) { + pL = this.PD.offsetWidth - pW; + } + return { + pW: pW, + pT: pT, + pL: pL + }; + }, + /* + 内部函数 + 删除提示点 + */ + deletePrompt: function() { + var arr = this.promptArr; + if (arr.length > 0) { + for (var i = 0; i < arr.length; i++) { + if (arr[i]) { + this.deleteChild(arr[i]); + } + } + } + this.promptArr = []; + }, + /* + 内部函数 + 计算提示点坐标 + */ + changePrompt: function() { + if (this.promptArr.length == 0) { + return; + } + var arr = this.promptArr; + var duration = this.getMetaDate()['duration']; + var bw = this.CB['timeBoBg'].offsetWidth; + for (var i = 0; i < arr.length; i++) { + var time = parseInt(this.getDataset(arr[i], 'time')); + var left = parseInt(time * bw / duration) - parseInt(arr[i].offsetWidth * 0.5); + if (left < 0) { + left = 0; + } + if (left > bw - parseInt(arr[i].offsetWidth * 0.5)) { + left = bw - parseInt(arr[i].offsetWidth * 0.5); + } + this.css(arr[i], { + left: left + 'px', + display: 'block' + }); + } + }, + /* + 内部函数 + 构建预览图片效果 + */ + preview: function(obj) { + var thisTemp = this; + var preview = { + file: null, + scale: 0 + }; + preview = this.standardization(preview, this.vars['preview']); + if (preview['file'] == null || preview['scale'] <= 0) { + return; + } + var srcArr = preview['file']; + if (this.previewStart == 0) { //如果还没有构建,则先进行构建 + this.previewStart = 1; + if (srcArr.length > 0) { + var i = 0; + var imgW = 0, + imgH = 0; + var random = thisTemp.randomString(10); + var loadNum = 0; + var loadImg = function(i) { + srcArr[i] = thisTemp.getNewUrl(srcArr[i]); + var n = 0; + var img = new Image(); + img.src = srcArr[i]; + img.className = random + i; + img.onload = function(event) { + loadNum++; + if (thisTemp.previewDiv == null) { //如果没有建立DIV,则建 + imgW = img.width; + imgH = img.height; + thisTemp.previewWidth = parseInt(imgW * 0.1); + var ele = document.createElement('div'); + ele.className = random; + thisTemp.PD.appendChild(ele); + thisTemp.previewDiv = thisTemp.getByElement(random); + var eleTop = (obj['y'] - parseInt(imgH * 0.1) + 2); + thisTemp.css(thisTemp.previewDiv, { + width: srcArr.length * imgW * 10 + 'px', + height: parseInt(imgH * 0.1) + 'px', + backgroundColor: '#000000', + position: 'absolute', + left: '0px', + top: eleTop + 'px', + display: 'none', + zIndex: '80' + }); + ele.setAttribute('data-x', '0'); + ele.setAttribute('data-y', eleTop); + var ele2 = document.createElement('div'); + ele2.className = random + 'd2'; + thisTemp.PD.appendChild(ele2); + thisTemp.previewTop = thisTemp.getByElement(ele2.className); + thisTemp.css(thisTemp.previewTop, { + width: parseInt(imgW * 0.1) + 'px', + height: parseInt(imgH * 0.1) + 'px', + position: 'absolute', + border: '5px solid ' + thisTemp.css(thisTemp.CB['timeProgress'], 'backgroundColor'), + left: '0px', + top: (obj['y'] - parseInt(imgH * 0.1) + 2) + 'px', + display: 'none', + zIndex: '81' + }); + var html = ''; + for (n = 0; n < srcArr.length; n++) { + html += thisTemp.newCanvas(random + n, imgW * 10, parseInt(imgH * 0.1)) + } + thisTemp.previewDiv.innerHTML = html; + } + thisTemp.previewDiv.appendChild(img); + var cimg = thisTemp.getByElement(img.className); + var canvas = thisTemp.getByElement(img.className + '-canvas'); + var context = canvas.getContext('2d'); + var sx = 0, + sy = 0, + x = 0, + h = parseInt(imgH * 0.1); + for (n = 0; n < 100; n++) { + x = parseInt(n * imgW * 0.1); + context.drawImage(cimg, sx, sy, parseInt(imgW * 0.1), h, x, 0, parseInt(imgW * 0.1), h); + sx += parseInt(imgW * 0.1); + if (sx >= imgW) { + sx = 0; + sy += h; + } + thisTemp.css(cimg, 'display', 'none'); + } + if (loadNum == srcArr.length) { + thisTemp.previewStart = 2; + } else { + i++; + loadImg(i); + } + }; + }; + } + loadImg(i); + return; + } + if (this.previewStart == 2) { + var isTween = true; + var nowNum = parseInt(obj['time'] / this.vars['preview']['scale']); + var numTotal = parseInt(thisTemp.getMetaDate()['duration'] / this.vars['preview']['scale']); + if (thisTemp.css(thisTemp.previewDiv, 'display') == 'none') { + isTween = false; + } + thisTemp.css(thisTemp.previewDiv, 'display', 'block'); + var imgWidth = thisTemp.previewDiv.offsetWidth * 0.01 / srcArr.length; + var left = (imgWidth * nowNum) - obj['x'] + parseInt(imgWidth * 0.5), + top = obj['y'] - thisTemp.previewDiv.offsetHeight; + thisTemp.css(thisTemp.previewDiv, 'top', top + 2 + 'px'); + var topLeft = obj['x'] - parseInt(imgWidth * 0.5); + var timepieces = 0; + if (topLeft < 0) { + topLeft = 0; + timepieces = obj['x'] - topLeft - imgWidth * 0.5; + } + if (topLeft > thisTemp.PD.offsetWidth - imgWidth) { + topLeft = thisTemp.PD.offsetWidth - imgWidth; + timepieces = obj['x'] - topLeft - imgWidth * 0.5; + } + if (left < 0) { + left = 0; + } + if (left > numTotal * imgWidth - thisTemp.PD.offsetWidth) { + left = numTotal * imgWidth - thisTemp.PD.offsetWidth; + } + thisTemp.css(thisTemp.previewTop, { + left: topLeft + 'px', + top: top + 2 + 'px', + display: 'block' + }); + if (thisTemp.previewTop.offsetHeight > thisTemp.previewDiv.offsetHeight) { + thisTemp.css(thisTemp.previewTop, { + height: thisTemp.previewDiv.offsetHeight - (thisTemp.previewTop.offsetHeight - thisTemp.previewDiv.offsetHeight) + 'px' + }); + } + if (this.previewTween != null) { + this.animatePause(this.previewTween); + this.previewTween = null + } + var nowLeft = parseInt(thisTemp.css(thisTemp.previewDiv, 'left')); + var leftC = nowLeft + left; + if (nowLeft == -(left + timepieces)) { + return; + } + if (isTween) { + var obj = { + element: thisTemp.previewDiv, + start: null, + end: -(left + timepieces), + speed: 0.3 + }; + this.previewTween = this.animate(obj); + } else { + thisTemp.css(thisTemp.previewDiv, 'left', -(left + timepieces) + 'px') + } + } + }, + /* + 内部函数 + 删除预览图节点 + */ + deletePreview: function() { + if (this.previewDiv != null) { + this.deleteChild(this.previewDiv); + this.previewDiv = null; + this.previewStart = 0; + } + }, + /* + 内部函数 + 修改视频地址,属性 + */ + changeVideo: function() { + if (!this.html5Video) { + this.getVarsObject(); + this.V.newVideo(this.vars); + return; + } + var vArr = this.VA; + var v = this.vars; + var i = 0; + if (vArr.length < 1) { + return; + } + if (this.V != null && this.needSeek == 0) { + this.needSeek = this.V.currentTime; + } + if (v['poster']) { + this.V.poster = v['poster']; + } else { + this.V.removeAttribute('poster'); + } + if (v['loop']) { + this.V.loop = 'loop'; + } else { + this.V.removeAttribute('loop'); + } + if (v['seek'] > 0) { + this.needSeek = v['seek']; + } else { + this.needSeek = 0; + } + if (this.getFileExt(vArr[0][0]) != '.m3u8') { + this.isM3u8 = false; + } + if (!this.isM3u8) { + if (vArr.length == 1) { + this.V.innerHTML = ''; + this.V.src = vArr[0][0]; + } else { + var source = ''; + vArr = this.arrSort(vArr); + for (i = 0; i < vArr.length; i++) { + var type = ''; + var va = vArr[i]; + if (va[1]) { + type = ' type="' + va[1] + '"'; + } + source += ''; + } + this.V.removeAttribute('src'); + this.V.innerHTML = source; + } + //分析视频地址结束 + if (v['autoplay']) { + this.V.autoplay = 'autoplay'; + } else { + this.V.removeAttribute('autoplay'); + } + this.V.load(); + } else { + this.embedHls(vArr[0][0], v['autoplay']); + } + if (!this.isUndefined(v['volume'])) { + this.changeVolume(v['volume']); + } + this.resetPlayer(); //重置界面元素 + this.timerErrorFun(); + //如果存在字幕则加载 + if (this.vars['cktrack']) { + this.loadTrack(); + } + }, + /* + 内部函数 + 调整中间暂停按钮,缓冲loading,错误提示文本框的位置 + */ + elementCoordinate: function() { + this.pdCoor = this.getXY(this.PD); + try { + this.css(this.CB['pauseCenter'], { + left: parseInt((this.PD.offsetWidth - 80) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 80) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['loading'], { + left: parseInt((this.PD.offsetWidth - 60) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 60) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['errorText'], { + left: parseInt((this.PD.offsetWidth - 120) * 0.5) + 'px', + top: parseInt((this.PD.offsetHeight - 30) * 0.5) + 'px' + }); + } catch(event) {} + try { + this.css(this.CB['logo'], { + left: parseInt(this.PD.offsetWidth - this.CB['logo'].offsetWidth - 20) + 'px', + top: '20px' + }); + } catch(event) {} + this.checkBarWidth(); + }, + /* + 内部函数 + 当播放器尺寸变化时,显示和隐藏相关节点 + */ + checkBarWidth: function() { + if (!this.showFace) { + return; + } + var controlBarW = this.CB['controlBar'].offsetWidth; + var ele = []; + ele.push([[this.CB['full'], this.CB['escFull'], this.CB['fullLine']], this.buttonWidth['full'] + 2, 'full']); + if (this.vars['front'] != '') { + ele.push([[this.CB['front'], this.CB['frontLine']], this.buttonWidth['front'] + 2]); + } + if (this.vars['next'] != '') { + ele.push([[this.CB['next'], this.CB['nextLine']], this.buttonWidth['next'] + 2]); + } + if (this.CB['definition'].innerHTML != '') { + ele.push([[this.CB['definition'], this.CB['definitionLine']], this.buttonWidth['definition'] + 2]); + } + if ((this.ckplayerConfig['config']['mobileVolumeBarShow'] || !this.isMobile()) && this.css(this.CB['volume'], 'display') == 'block') { + ele.push([[this.CB['volume']], this.buttonWidth['volume']]); + ele.push([[this.CB['mute'], this.CB['escMute'], this.CB['muteLine']], this.buttonWidth['mute'] + 2, 'mute']); + } + ele.push([[this.CB['timeText']], this.buttonWidth['timeText']]); + ele.push([[this.CB['play'], this.CB['pause'], this.CB['playLine']], this.buttonWidth['play'] + 2, 'play']); + + var i = 0; + var len = 0; + var isc = true; + //计算所有要显示的节点的总宽度 + for (var i = 0; i < ele.length; i++) { + var nlen = ele[i][1]; + if (nlen > 2) { + len += nlen; + } else { + isc = false; + } + } + if (isc) { + this.buttonLen = len; + this.buttonArr = ele; + } + len = this.buttonLen; + ele = this.buttonArr; + for (var i = 0; i < ele.length; i++) { + if (len > controlBarW) { + len -= ele[i][1]; + this.css(ele[i][0], 'display', 'none'); + } else { + this.css(ele[i][0], 'display', 'block'); + if (ele[i].length == 3) { + var name = ele[i][2]; + switch (name) { + case 'mute': + if (this.volume == 0) { + this.css(this.CB['mute'], 'display', 'none'); + } else { + this.css(this.CB['escMute'], 'display', 'none'); + } + break; + case 'play': + this.playShow(this.V.paused ? false: true); + break; + case 'full': + if (this.full) { + this.css(this.CB['full'], 'display', 'none'); + } else { + this.css(this.CB['escFull'], 'display', 'none'); + } + break; + } + } + } + } + }, + /* + 内部函数 + 初始化暂停或播放按钮 + */ + initPlayPause: function() { + if (!this.showFace) { + return; + } + if (this.vars['autoplay']) { + this.css([this.CB['play'], this.CB['pauseCenter']], 'display', 'none'); + this.css(this.CB['pause'], 'display', 'block'); + } else { + this.css(this.CB['play'], 'display', 'block'); + if (this.css(this.CB['errorText'], 'display') == 'none') { + this.css(this.CB['pauseCenter'], 'display', 'block'); + } + this.css(this.CB['pause'], 'display', 'none'); + } + }, + + /* + 下面为监听事件 + 内部函数 + 监听元数据已加载 + */ + loadedHandler: function() { + this.loaded = true; + if (this.vars['loaded'] != '') { + try { + eval(this.vars['loaded'] + '()'); + } catch(event) { + this.log(event); + } + } + }, + /* + 内部函数 + 监听播放 + */ + playingHandler: function() { + this.playShow(true); + //如果是第一次播放 + if (this.isFirstTimePlay && !this.isUndefined(this.advertisements['front'])) { + this.isFirstTimePlay = false; + //调用播放前置广告组件 + this.adI = 0; + this.adType = 'front'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + //调用播放前置广告组件结束 + return; + } + if (this.adPlayerPlay) { + return; + } + //判断第一次播放结束 + if (this.needSeek > 0) { + this.videoSeek(this.needSeek); + this.needSeek = 0; + } + if (this.animatePauseArray.length > 0) { + this.animateResume('pause'); + } + if (this.playerType == 'html5video' && this.V != null && this.config['videoDrawImage']) { + this.sendVCanvas(); + } + if (!this.isUndefined(this.advertisements['pause']) && !this.adPlayStart) { //如果存在暂停广告 + this.adPauseCloseFunction(); + } + }, + /*暂停时播放暂停广告*/ + adPausePlayer: function() { + this.adI = 0; + this.adType = 'pause'; + this.adPauseShow = true; + this.loadAdPause(); + }, + loadAdPause: function() { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + var thisTemp = this; + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + if (this.isStrImage(type) && this.adPauseShow) { + this.css(this.CB['adElement'], 'display', 'block'); + var imgClass = 'adimg' + this.randomString(10); + var imgHtml = ''; + if (ad['link']) { + imgHtml = '' + imgHtml + ''; + } + this.CB['adElement'].innerHTML = imgHtml; + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css([thisTemp.getByElement(imgClass), thisTemp.CB['adElement']], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + if (thisTemp.ckplayerConfig['style']['advertisement']['closeButtonShow'] && thisTemp.adPauseShow) { + thisTemp.css(thisTemp.CB['adPauseClose'], { + display: 'block' + }); + } + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + thisTemp.adPauseCoor(); + }, + this.getByElement(imgClass)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adElement']); + var newI = this.adI; + if (this.adI < this.advertisements['pause'].length - 1) { + newI++; + } else { + newI = 0; + } + if (ad['time'] > 0) { + setTimeout(function() { + if (thisTemp.adPauseShow) { + thisTemp.adI = newI; + thisTemp.loadAdPause(); + } + }, + ad['time'] * 1000); + } + } + }, + /*调整暂停广告的位置*/ + adPauseCoor: function() { + if (this.css(this.CB['adElement'], 'display') == 'block') { + var w = this.CB['adElement'].offsetWidth, + h = this.CB['adElement'].offsetHeight; + var pw = this.PD.offsetWidth, + ph = this.PD.offsetHeight; + this.css(this.CB['adElement'], { + top: (ph - h) * 0.5 + 'px', + left: (pw - w) * 0.5 + 'px' + }); + if (this.css(this.CB['adPauseClose'], 'display') == 'block') { + this.css(this.CB['adPauseClose'], { + top: (ph - h) * 0.5 - 10 + 'px', + left: (pw - w) * 0.5 + w - 10 + 'px', + }); + } + } + }, + /* + 关闭暂停广告 + */ + adPauseCloseFunction: function() { + this.CB['adElement'].innerHTML = ''; + this.css([this.CB['adElement'], this.CB['adPauseClose']], 'display', 'none'); + this.adPauseShow = false; + }, + /*计算广告时间*/ + advertisementsTime: function(nt) { + if (this.isUndefined(nt)) { + nt = 0; + } + var ad = this.advertisements[this.adType]; + if (nt > 0) { + ad[this.adI]['time'] = Math.ceil(nt); + } + this.adTimeAllTotal = 0; + for (var i = this.adI; i < ad.length; i++) { + if (!this.isUndefined(ad[i]['time'])) { + this.adTimeAllTotal += Math.ceil(ad[i]['time']); + } + } + if (this.adTimeAllTotal > 0) { + this.CB['adTime'].innerHTML = this.language['adTime'].replace('{$second}', this.adTimeAllTotal > 9 ? this.adTimeAllTotal: '0' + this.adTimeAllTotal); + } + if (this.adPauseShow) { + this.adPauseCloseFunction(); + } + this.adOtherCloseAll(); + this.adTimeTotal = -1; + }, + /*判断是否需要显示跳过广告按钮*/ + adSkipButtonShow: function() { + var thisTemp = this; + var skipConfig = this.ckplayerConfig['style']['advertisement']; + var delayTimeTemp = skipConfig[this.adType + 'SkipButtonDelay']; + var timeFun = function() { + if (delayTimeTemp >= 0) { + thisTemp.CB['adSkip'].innerHTML = thisTemp.language['skipAdTime'].replace('{$second}', delayTimeTemp > 9 ? delayTimeTemp: '0' + delayTimeTemp); + setTimeout(timeFun, 1000); + } else { + thisTemp.CB['adSkip'].innerHTML = thisTemp.language['skipAd']; + } + delayTimeTemp--; + }; + if (skipConfig['skipButtonShow']) { + this.css(thisTemp.CB['adSkip'], 'display', 'block'); + if (skipConfig[this.adType + 'SkipButtonDelay'] > 0 && this.isUndefined(this.adSkipButtonTime)) { + timeFun(); + } else { + thisTemp.css(thisTemp.CB['adSkip'], 'display', 'block'); + thisTemp.CB['adSkip'].innerHTML = this.language['skipAd']; + } + } + }, + /*播放广告*/ + advertisementsPlay: function() { + this.css([this.CB['adBackground'], this.CB['adElement'], this.CB['adBar'], this.CB['adLink']], 'display', 'none'); + this.adPlayerPlay = false; + var ad = this.advertisements[this.adType]; + if (this.adI == 0 && (this.adType == 'front' || this.adType == 'insert' || this.adType == 'end')) { + this.sendJS('process', this.adType + ' ad play') + } + this.trackHide(); + if (this.adI < ad.length) { + if (!this.isUndefined(ad[this.adI]['time'])) { + this.adTimeTotal = parseInt(ad[this.adI]['time']); + } + this.loadAdvertisements(); + } else { + this.adEnded(); + } + }, + /*清除当前所有广告*/ + eliminateAd: function() { + if (this.adType) { + var ad = this.advertisements[this.adType]; + this.adI = ad.length; + this.advertisementsPlay(); + } + + }, + /*广告播放结束*/ + adEnded: function() { + var thisTemp = this; + this.adPlayStart = false; + this.adPlayerPlay = false; + if (this.adVideoPlay) { + if (this.videoTemp['src'] != '') { + this.V.src = this.videoTemp['src']; + } else { + if (this.V.src) { + this.V.removeAttribute('src'); + } + } + if (this.videoTemp['source'] != '') { + this.V.innerHTML = this.videoTemp['source']; + } + if (this.videoTemp['currentSrc'] != '') { + this.V.src = this.videoTemp['currentSrc']; + this.V.currentSrc = this.videoTemp['currentSrc']; + } + if (this.videoTemp['loop']) { + this.V.loop = true; + this.videoTemp['loop'] = false; + } + if (this.adType == 'end') { + this.endedHandler(); + } else { + this.videoPlay(); + } + } else { + this.videoPlay(); + } + this.changeVolume(this.vars['volume']); + this.sendJS('process', this.adType + ' ad ended'); + this.changeControlBarShow(true); + }, + /*加载广告*/ + loadAdvertisements: function() { + //this.videoTemp + var ad = this.getNowAdvertisements(); + var type = ad['type']; + var thisTemp = this; + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + this.changeControlBarShow(false); + this.adPlayerPlay = true; + if (this.isStrImage(type)) { + this.css([this.CB['adBackground'], this.CB['adElement'], this.CB['adBar']], 'display', 'block'); + this.css([this.CB['adMute'], this.CB['adEscMute']], 'display', 'none'); + var imgClass = 'adimg' + this.randomString(10); + var imgHtml = ''; + if (ad['link']) { + imgHtml = '' + imgHtml + ''; + } + this.CB['adElement'].innerHTML = imgHtml; + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css(thisTemp.getByElement(imgClass), { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + thisTemp.css(thisTemp.CB['adElement'], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + top: (height - imgWH['height']) * 0.5 + 'px', + left: (width - imgWH['width']) * 0.5 + 'px', + }); + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + }, + this.getByElement(imgClass)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adElement']); + if (!this.isUndefined(ad['time'])) { + this.adCountDown(); + } + } else { + this.css(this.CB['adBar'], 'display', 'block'); + //判断是否静音 + if (this.adVideoMute) { + this.css(this.CB['adEscMute'], 'display', 'block'); + this.css(this.CB['adMute'], 'display', 'none'); + } else { + this.css(this.CB['adEscMute'], 'display', 'none'); + this.css(this.CB['adMute'], 'display', 'block'); + } + this.CB['adElement'].innerHTML = ''; + if (this.videoTemp['currentSrc'] == '') { + this.videoTemp['currentSrc'] = this.getCurrentSrc(); + } + if (this.V.loop) { + this.videoTemp['loop'] = true; + this.V.loop = false; + } + if (this.V != null && this.V.currentTime > 0 && this.adIsVideoTime) { //当有视频广告时而又没有记录下已播放的时间则进行记录 + this.adIsVideoTime = false; + this.needSeek = this.V.currentTime; + } + this.V.src = ad['file']; + this.V.currentSrc = ad['file']; + this.V.innerHTML = ''; + this.V.play(); + this.adVideoPlay = true; + this.ajaxSuccessNull(ad['exhibitionMonitor']); + if (!this.adVideoMute) { + this.adEscMuteFunction(); + } + } + if (ad['link']) { + this.css(this.CB['adLink'], 'display', 'block'); + var link = '' + this.language['adLink'] + ''; + this.CB['adLink'].innerHTML = link; + this.css(this.getByElement('ckadmorelink'), { + color: '#FFFFFF', + textDecoration: 'none' + }); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.CB['adLink']); + } else { + this.css(this.CB['adLink'], 'display', 'none'); + } + + }, + /*普通广告倒计时*/ + adCountDown: function() { + var thisTemp = this; + if (this.adTimeTotal > 0) { + if (!this.adIsPause) { + this.adTimeTotal--; + this.showAdTime(); + this.adCountDownObj = null; + this.adCountDownObj = setTimeout(function() { + thisTemp.adCountDown(); + }, + 1000); + } + } else { + this.adI++; + this.advertisementsPlay(); + } + }, + /*视频广告倒计时*/ + adPlayerTimeHandler: function(time) { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (this.isStrImage(type)) { + return; + } + if (this.adTimeTotal != parseInt(time)) { + this.adTimeTotal = parseInt(time); + this.showAdTime(); + } + }, + /*格式化广告倒计时显示*/ + showAdTime: function() { + this.adTimeAllTotal--; + var n = this.adTimeAllTotal; + if (n < 0) { + n = 0; + } + this.CB['adTime'].innerHTML = this.language['adTime'].replace('{$second}', n < 10 ? '0' + n: n); + }, + /* + 单独监听其它广告 + */ + checkAdOther: function(t) { + if (this.adPlayerPlay) { + return; + } + var adTime = this.advertisements['othertime']; + var adPlay = this.advertisements['otherPlay']; + for (var i = 0; i < adTime.length; i++) { + if (t >= adTime[i] && !adPlay[i]) { //如果播放时间大于广告时间而该广告还没有播放,则开始播放 + adPlay[i] = true; + this.newAdOther(i); + } + } + }, + /* + 新建其它广告 + */ + newAdOther: function(i) { + var thisTemp = this; + var ad = this.advertisements['other'][i]; + var randomS = this.randomString(10); //获取一个随机字符串 + var adDivID = 'adother' + randomS; //广告容器 + imgClassName = 'adimgother' + randomS; + var adDiv = document.createElement('div'); + adDiv.className = adDivID; + this.PD.appendChild(adDiv); + ad['div'] = adDivID; + ad['element'] = imgClassName; + this.getByElement(adDivID).innerHTML = ''; + this.css(adDivID, { + position: 'absolute', + overflow: 'hidden', + zIndex: '996', + top: '60px', + left: '30px', + cursor: 'pointer' + }); + if (this.ckplayerConfig['style']['advertisement']['closeOtherButtonShow']) { + var closeAdDivID = 'adotherclose' + randomS; //广告容器 + var closeAdDiv = document.createElement('div'); + closeAdDiv.className = closeAdDivID; + this.PD.appendChild(closeAdDiv); + this.getByElement(closeAdDivID).innerHTML = this.newCanvas(closeAdDivID, 20, 20); + ad['closeDiv'] = closeAdDivID; + ad['close'] = false; + this.css(closeAdDivID, { + backgroundColor: '#f7f7f7', + //f8f7f7 + widht: '20px', + height: '20px', + position: 'absolute', + overflow: 'hidden', + zIndex: '997', + top: '60px', + left: '30px', + borderRadius: '20px', + cursor: 'pointer' + }); + var adOtherClose = this.getByElement(closeAdDivID + '-canvas').getContext('2d'); + var adOtherCloseFillRect = function() { + thisTemp.canvasFill(adOtherClose, [[4, 6], [6, 6], [16, 15], [14, 15]]); + thisTemp.canvasFill(adOtherClose, [[14, 6], [16, 6], [6, 15], [4, 15]]); + }; + adOtherClose.fillStyle = '#404856'; + adOtherCloseFillRect(); + var adOtherCloseOver = function() { + adOtherClose.clearRect(0, 0, 20, 20); + adOtherClose.fillStyle = '#0782F5'; + adOtherCloseFillRect(); + }; + var adOtherCloseOut = function() { + adOtherClose.clearRect(0, 0, 20, 20); + adOtherClose.fillStyle = '#404856'; + adOtherCloseFillRect(); + }; + this.addListenerInside('mouseover', adOtherCloseOver, this.getByElement(closeAdDivID + '-canvas')); + this.addListenerInside('mouseout', adOtherCloseOut, this.getByElement(closeAdDivID + '-canvas')); + } + this.addListenerInside('load', + function() { + var imgObj = new Image(); + imgObj.src = this.src; + var imgWH = thisTemp.adjustmentWH(imgObj.width, imgObj.height); + thisTemp.css([thisTemp.getByElement(imgClassName), thisTemp.getByElement(adDivID)], { + width: imgWH['width'] + 'px', + height: imgWH['height'] + 'px', + border: '0px' + }); + thisTemp.advertisements['other'][i] = ad; + thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']); + thisTemp.adOtherCoor(); + }, + this.getByElement(imgClassName)); + this.addListenerInside('click', + function() { + thisTemp.adOtherClose(i); + }, + this.getByElement(closeAdDivID)); + this.addListenerInside('click', + function() { + thisTemp.ajaxSuccessNull(ad['clickMonitor']); + }, + this.getByElement(imgClassName)); + if (ad['time'] > 0) { + setTimeout(function() { + thisTemp.adOtherClose(i); + }, + ad['time'] * 1000); + } + }, + /* + 关闭其它广告 + */ + adOtherClose: function(i) { + var ad = this.advertisements['other'][i]; + if (!this.isUndefined(ad['close'])) { + if (!ad['close']) { + ad['close'] = true; + this.PD.removeChild(this.getByElement(ad['div'])); + this.PD.removeChild(this.getByElement(ad['closeDiv'])); + } + } + }, + adOtherCloseAll: function() { + if (!this.isUndefined(this.advertisements['other'])) { + var ad = this.advertisements['other']; + for (var i = 0; i < ad.length; i++) { + this.adOtherClose(i); + } + } + }, + /* + 计算其它广告的坐标 + */ + adOtherCoor: function() { + if (!this.isUndefined(this.advertisements['other'])) { + var arr = this.advertisements['other']; + for (var i = 0; i < arr.length; i++) { + var ad = arr[i]; + if (!this.isUndefined(ad['close'])) { + if (!ad['close']) { + var coor = this.getPosition(ad); + var x = coor['x'], + y = coor['y'], + cx = x + this.getByElement(ad['div']).offsetWidth - 10, + cy = y - 10; + this.css(this.getByElement(ad['div']), { + left: x + 'px', + top: y + 'px' + }); + if (!this.isUndefined(ad['closeDiv'])) { + this.css(this.getByElement(ad['closeDiv']), { + left: cx + 'px', + top: cy + 'px' + }); + } + } + } + } + } + }, + /* + 单独监听中间插入广告 + */ + checkAdInsert: function(t) { + if (this.adPlayerPlay) { + return; + } + var adTime = this.advertisements['inserttime']; + var adPlay = this.advertisements['insertPlay']; + var duration = this.getMetaDate()['duration']; + for (var i = adTime.length - 1; i > -1; i--) { + if (t >= adTime[i] && t < duration - 2 && t > 1 && !adPlay[i]) { //如果播放时间大于广告时间而该广告还没有播放,则开始播放 + this.adI = 0; + this.adType = 'insert'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + adPlay[i] = true; + for (var n = 0; n < i + 1; n++) { + adPlay[n] = true; + } + break; + } + } + }, + /*格式化中间插入广告的播放时间*/ + formatInserttime: function(duration) { + if (!this.isUndefined(this.advertisements['inserttime'])) { + var arr = this.advertisements['inserttime']; + var newArr = []; + for (var i = 0; i < arr.length; i++) { + if (arr[i].toString().substr( - 1) == '%') { + newArr.push(parseInt(duration * parseInt(arr[i]) * 0.01)); + } else { + newArr.push(parseInt(arr[i])); + } + } + this.advertisements['inserttime'] = newArr; + } + }, + /*获取当前的广告*/ + getNowAdvertisements: function() { + if (this.adI == -1) { + return { + file: '', + time: 0, + link: '' + }; + } + return this.advertisements[this.adType][this.adI]; + }, + /*根据元件尺寸和播放器尺寸调整大小*/ + adjustmentWH: function(w, h) { + var width = this.PD.offsetWidth, + height = this.PD.offsetHeight; + var nw = 0, + nh = 0; + if (w >= width || h >= height) { + if (width / w > height / h) { + nh = height - 20; + nw = w * nh / h; + } else { + nw = width - 20; + nh = h * nw / w; + } + } else { + nw = w; + nh = h; + } + return { + width: nw, + height: nh + } + }, + /*单独请求一次地址,但不处理返回的数据*/ + ajaxSuccessNull: function(url) { + if (!this.isUndefined(url)) { + var ajaxObj = { + url: url, + success: function(data) {} + }; + this.ajax(ajaxObj); + } + }, + /* + 内部函数 + 运行指定函数 + */ + runFunction: function(s) { + try { + var arr = s.split('->'); + switch (arr[0]) { + case 'javaScript': + eval(arr[1] + '()'); + break; + case 'actionScript': + eval('this.' + arr[1] + '()'); + break; + } + } catch(event) {} + }, + /* + 内部函数 + 使用画布附加视频 + */ + sendVCanvas: function() { + if (this.timerVCanvas == null) { + this.css(this.V, 'display', 'none'); + this.css(this.MD, 'display', 'block'); + var thisTemp = this; + var videoCanvas = function() { + if (thisTemp.MDCX.width != thisTemp.PD.offsetWidth) { + thisTemp.MDC.width = thisTemp.PD.offsetWidth; + } + if (thisTemp.MDCX.height != thisTemp.PD.offsetHeight) { + thisTemp.MDC.height = thisTemp.PD.offsetHeight; + } + thisTemp.MDCX.clearRect(0, 0, thisTemp.MDCX.width, thisTemp.MDCX.height); + var coor = thisTemp.getProportionCoor(thisTemp.PD.offsetWidth, thisTemp.PD.offsetHeight, thisTemp.V.videoWidth, thisTemp.V.videoHeight); + thisTemp.MDCX.drawImage(thisTemp.V, 0, 0, thisTemp.V.videoWidth, thisTemp.V.videoHeight, coor['x'], coor['y'], coor['width'], coor['height']); + }; + this.timerVCanvas = new this.timer(0, videoCanvas); + } + }, + /* + 内部函数 + 监听暂停 + */ + pauseHandler: function() { + var thisTemp = this; + this.playShow(false); + if (this.animatePauseArray.length > 0) { + this.animatePause('pause'); + } + if (this.playerType == 'html5video' && this.V != null && this.config['videoDrawImage']) { + this.stopVCanvas(); + } + if (!this.isUndefined(this.advertisements['pause']) && !this.adPlayStart && !this.adPauseShow) { //如果存在暂停广告 + setTimeout(function() { + if (!thisTemp.isUndefined(thisTemp.advertisements['pause']) && !thisTemp.adPlayStart && !thisTemp.adPauseShow && thisTemp.time > 1) { //如果存在暂停广告 + thisTemp.adPausePlayer(); + } + }, + 300); + } + }, + /* + 内部函数 + 停止画布 + */ + stopVCanvas: function() { + if (this.timerVCanvas != null) { + this.css(this.V, 'display', 'block'); + this.css(this.MD, 'display', 'none'); + if (this.timerVCanvas.runing) { + this.timerVCanvas.stop(); + } + this.timerVCanvas = null; + } + }, + /* + 内部函数 + 根据当前播放还是暂停确认图标显示 + */ + playShow: function(b) { + if (!this.showFace) { + return; + } + if (b) { + this.css(this.CB['play'], 'display', 'none'); + this.css(this.CB['pauseCenter'], 'display', 'none'); + this.css(this.CB['pause'], 'display', 'block'); + } else { + this.css(this.CB['play'], 'display', 'block'); + if (this.css(this.CB['errorText'], 'display') == 'none') { + if (!this.adPlayerPlay) { + this.css(this.CB['pauseCenter'], 'display', 'block'); + } + + } else { + this.css(this.CB['pauseCenter'], 'display', 'none'); + } + this.css(this.CB['pause'], 'display', 'none'); + } + }, + /* + 内部函数 + 监听seek结束 + */ + seekedHandler: function() { + this.resetTrack(); + this.isTimeButtonMove = true; + if (this.V.paused) { + this.videoPlay(); + } + }, + /* + 内部函数 + 监听播放结束 + */ + endedHandler: function() { + if (this.adPlayerPlay) { + this.adI++; + this.advertisementsPlay(); + return; + } + if (!this.endAdPlay && !this.isUndefined(this.advertisements['end'])) { + this.endAdPlay = true; + this.adI = 0; + this.adType = 'end'; + this.adMuteInto(); + this.adIsVideoTime = true; + this.adPlayStart = true; + this.adVideoPlay = false; + this.videoPause(); + this.advertisementsTime(); + this.advertisementsPlay(); + this.adSkipButtonShow(); + this.adReset = true; + return; + } + this.sendJS('ended'); + this.endedAdReset(); + if (!this.vars['loop']) { + this.videoSeek(0); + } + }, + /* + 重置结束后相关的设置 + */ + endedAdReset: function() { + var arr = []; + var i = 0; + if (!this.isUndefined(this.advertisements['insertPlay'])) { + arr = this.advertisements['insertPlay']; + for (i = 0; i < arr.length; i++) { + this.advertisements['insertPlay'][i] = false; + } + } + if (!this.isUndefined(this.advertisements['otherPlay'])) { + arr = this.advertisements['otherPlay']; + for (i = 0; i < arr.length; i++) { + this.advertisements['otherPlay'][i] = false; + } + } + //this.endAdPlay=false; + }, + /* + 内部函数 + 监听音量改变 + */ + volumechangeHandler: function() { + if (!this.showFace) { + return; + } + if ((this.ckplayerConfig['config']['mobileVolumeBarShow'] || !this.isMobile()) && this.css(this.CB['volume'], 'display') == 'block') { + try { + if (this.V.volume > 0) { + this.css(this.CB['mute'], 'display', 'block'); + this.css(this.CB['escMute'], 'display', 'none'); + } else { + this.css(this.CB['mute'], 'display', 'none'); + this.css(this.CB['escMute'], 'display', 'block'); + } + } catch(event) {} + } + }, + /* + 内部函数 + 监听播放时间调节进度条 + */ + timeUpdateHandler: function() { + var duration = 0; + if (this.playerType == 'html5video') { + try { + duration = this.V.duration; + } catch(event) {} + } + if (duration > 0) { + this.time = this.V.currentTime; + this.timeTextHandler(); + this.trackShowHandler(); + if (this.isTimeButtonMove) { + this.timeProgress(this.time, duration); + } + } + }, + /* + 内部函数 + 按时间改变进度条 + */ + timeProgress: function(time, duration) { + if (!this.showFace) { + return; + } + var timeProgressBgW = this.CB['timeProgressBg'].offsetWidth; + var timeBOW = parseInt((time * timeProgressBgW / duration) - (this.CB['timeButton'].offsetWidth * 0.5)); + if (timeBOW > timeProgressBgW - this.CB['timeButton'].offsetWidth) { + timeBOW = timeProgressBgW - this.CB['timeButton'].offsetWidth; + } + if (timeBOW < 0) { + timeBOW = 0; + } + this.css(this.CB['timeProgress'], 'width', timeBOW + 'px'); + this.css(this.CB['timeButton'], 'left', parseInt(timeBOW) + 'px'); + }, + /* + 内部函数 + 监听播放时间改变时间显示文本框 + */ + timeTextHandler: function() { //显示时间/总时间 + if (!this.showFace) { + return; + } + var duration = this.V.duration; + var time = this.V.currentTime; + if (isNaN(duration) || parseInt(duration) < 0.2) { + duration = this.vars['duration']; + } + this.CB['timeText'].innerHTML = this.formatTime(time) + ' / ' + this.formatTime(duration); + if (this.CB['timeText'].offsetWidth > 0) { + this.buttonWidth['timeText'] = this.CB['timeText'].offsetWidth; + } + }, + /* + 内部函数 + 监听是否是缓冲状态 + */ + bufferEdHandler: function() { + if (!this.showFace || this.playerType == 'flashplayer') { + return; + } + var thisTemp = this; + var clearTimerBuffer = function() { + if (thisTemp.timerBuffer != null) { + if (thisTemp.timerBuffer.runing) { + thisTemp.sendJS('buffer', 100); + thisTemp.timerBuffer.stop(); + } + thisTemp.timerBuffer = null; + } + }; + clearTimerBuffer(); + var bufferFun = function() { + if (!thisTemp.isUndefined(thisTemp.V) && thisTemp.V.buffered.length > 0) { + var duration = thisTemp.V.duration; + var len = thisTemp.V.buffered.length; + var bufferStart = thisTemp.V.buffered.start(len - 1); + var bufferEnd = thisTemp.V.buffered.end(len - 1); + var loadTime = bufferStart + bufferEnd; + var loadProgressBgW = thisTemp.CB['timeProgressBg'].offsetWidth; + var timeButtonW = thisTemp.CB['timeButton'].offsetWidth; + var loadW = parseInt((loadTime * loadProgressBgW / duration) + timeButtonW); + if (loadW >= loadProgressBgW) { + loadW = loadProgressBgW; + clearTimerBuffer(); + } + thisTemp.changeLoad(loadTime); + } + }; + this.timerBuffer = new this.timer(200, bufferFun); + }, + /* + 内部函数 + 单独计算加载进度 + */ + changeLoad: function(loadTime) { + if (this.V == null) { + return; + } + if (!this.showFace) { + return; + } + var loadProgressBgW = this.CB['timeProgressBg'].offsetWidth; + var timeButtonW = this.CB['timeButton'].offsetWidth; + var duration = this.V.duration; + if (this.isUndefined(loadTime)) { + loadTime = this.loadTime; + } else { + this.loadTime = loadTime; + } + var loadW = parseInt((loadTime * loadProgressBgW / duration) + timeButtonW); + this.css(this.CB['loadProgress'], 'width', loadW + 'px'); + }, + /* + 内部函数 + 判断是否是直播 + */ + judgeIsLive: function() { + var thisTemp = this; + if (this.timerError != null) { + if (this.timerError.runing) { + this.timerError.stop(); + } + this.timerError = null; + } + this.error = false; + if (this.showFace) { + this.css(this.CB['errorText'], 'display', 'none'); + } + var timeupdate = function(event) { + thisTemp.timeUpdateHandler(); + }; + if (!this.vars['live']) { + if (this.V != null && this.playerType == 'html5video') { + this.addListenerInside('timeupdate', timeupdate); + thisTemp.timeTextHandler(); + thisTemp.prompt(); //添加提示点 + setTimeout(function() { + thisTemp.bufferEdHandler(); + }, + 200); + } + } else { + this.removeListenerInside('timeupdate', timeupdate); + if (this.timerTime != null) { + window.clearInterval(this.timerTime); + timerTime = null; + } + if (this.timerTime != null) { + if (this.timerTime.runing) { + this.timerTime.stop(); + } + this.timerTime = null; + } + var timeFun = function() { + if (thisTemp.V != null && !thisTemp.V.paused && thisTemp.showFace) { + thisTemp.CB['timeText'].innerHTML = thisTemp.getNowDate(); + } + }; + this.timerTime = new this.timer(1000, timeFun); + //timerTime.start(); + } + this.definition(); + }, + /* + 内部函数 + 加载字幕 + */ + loadTrack: function() { + if (this.playerType == 'flashplayer' || this.vars['flashplayer'] == true) { + return; + } + var thisTemp = this; + var track = this.vars['cktrack']; + var obj = { + method: 'get', + dataType: 'text', + url: track, + charset: 'utf-8', + success: function(data) { + thisTemp.track = thisTemp.parseSrtSubtitles(data); + thisTemp.trackIndex = 0; + thisTemp.nowTrackShow = { + sn: '' + }; + } + }; + this.ajax(obj); + }, + /* + 内部函数 + 重置字幕 + */ + resetTrack: function() { + this.trackIndex = 0; + this.nowTrackShow = { + sn: '' + }; + }, + /* + 内部函数 + 根据时间改变读取显示字幕 + */ + trackShowHandler: function() { + if (!this.showFace || this.adPlayerPlay) { + return; + } + if (this.track.length < 1) { + return; + } + if (this.trackIndex >= this.track.length) { + this.trackIndex = 0; + } + var nowTrack = this.track[this.trackIndex]; //当前编号对应的字幕内容 + /* + this.nowTrackShow=当前显示在界面上的内容 + 如果当前时间正好在nowTrack时间内,则需要判断 + */ + if (this.time >= nowTrack['startTime'] && this.time <= nowTrack['endTime']) { + /* + 如果当前显示的内容不等于当前需要显示的内容时,则需要显示正确的内容 + */ + var nowShow = this.nowTrackShow; + if (nowShow['sn'] != nowTrack['sn']) { + this.trackHide(); + this.trackShow(nowTrack); + } + } else { + /* + * 如果当前播放时间不在当前编号字幕内,则需要先清空当前的字幕内容,再显示新的字幕内容 + */ + this.trackHide(); + this.checkTrack(); + } + }, + /* + 内部函数 + 显示字幕内容 + */ + trackShow: function(track) { + this.nowTrackShow = track; + var arr = track['content']; + for (var i = 0; i < arr.length; i++) { + var obj = { + list: [{ + type: 'text', + text: arr[i], + color: '#FFFFFF', + size: 16, + font: this.fontFamily, + lineHeight: 30 + }], + position: [1, 2, null, -(arr.length - i) * 30 - 50] + }; + var ele = this.addElement(obj); + this.trackElement.push(ele); + } + }, + /* + 内部函数 + 隐藏字字幕内容 + */ + trackHide: function() { + for (var i = 0; i < this.trackElement.length; i++) { + this.deleteElement(this.trackElement[i]); + } + this.trackElement = []; + }, + /* + 内部函数 + 重新计算字幕的编号 + */ + checkTrack: function() { + var num = this.trackIndex; + var arr = this.track; + var i = 0; + for (i = num; i < arr.length; i++) { + if (this.time >= arr[i]['startTime'] && this.time <= arr[i]['endTime']) { + this.trackIndex = i; + break; + } + } + }, + /* + -----------------------------------------------------------------------------接口函数开始 + 接口函数 + 在播放和暂停之间切换 + */ + playOrPause: function() { + if (!this.loaded) { + return; + } + if (this.V == null) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.playOrPause(); + return; + } + if (this.V.paused) { + this.videoPlay(); + } else { + this.videoPause(); + } + }, + /* + 接口函数 + 播放动作 + */ + videoPlay: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoPlay(); + return; + } + if (this.adPlayerPlay) { + this.eliminateAd(); //清除广告 + return; + } + try { + if (this.V.currentSrc) { + this.V.play(); + } + } catch(event) {} + }, + /* + 接口函数 + 暂停动作 + */ + videoPause: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoPause(); + return; + } + try { + this.V.pause(); + } catch(event) {} + }, + /* + 接口函数 + 跳转时间动作 + */ + videoSeek: function(time) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoSeek(time); + return; + } + var duration = this.getMetaDate()['duration']; + if (duration > 0 && time > duration) { + time = duration; + } + if (time >= 0) { + this.V.currentTime = time; + this.sendJS('seekTime', time); + } + }, + /* + 接口函数 + 调节音量/获取音量 + */ + changeVolume: function(vol, bg, button) { + if (this.loaded) { + if (this.playerType == 'flashplayer') { + this.V.changeVolume(time); + return; + } + } + if (isNaN(vol) || this.isUndefined(vol)) { + vol = 0; + } + if (!this.loaded) { + this.vars['volume'] = vol; + } + if (!this.html5Video) { + this.V.changeVolume(vol); + return; + } + try { + if (this.isUndefined(bg)) { + bg = true; + } + } catch(e) {} + try { + if (this.isUndefined(button)) { + button = true; + } + } catch(e) {} + if (!vol) { + vol = 0; + } + if (vol < 0) { + vol = 0; + } + if (vol > 1) { + vol = 1; + } + try { + this.V.volume = vol; + } catch(error) {} + this.volume = vol; + if (bg && this.showFace) { + var bgW = vol * this.CB['volumeBg'].offsetWidth; + if (bgW < 0) { + bgW = 0; + } + if (bgW > this.CB['volumeBg'].offsetWidth) { + bgW = this.CB['volumeBg'].offsetWidth; + } + this.css(this.CB['volumeUp'], 'width', bgW + 'px'); + } + + if (button && this.showFace) { + var buLeft = parseInt(this.CB['volumeUp'].offsetWidth - (this.CB['volumeBO'].offsetWidth * 0.5)); + if (buLeft > this.CB['volumeBg'].offsetWidth - this.CB['volumeBO'].offsetWidth) { + buLeft = this.CB['volumeBg'].offsetWidth - this.CB['volumeBO'].offsetWidth + } + if (buLeft < 0) { + buLeft = 0; + } + this.css(this.CB['volumeBO'], 'left', buLeft + 'px'); + } + }, + /* + 接口函数 + 静音 + */ + videoMute: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoMute(); + return; + } + this.volumeTemp = this.V ? (this.V.volume > 0 ? this.V.volume: this.vars['volume']) : this.vars['volume']; + this.changeVolume(0); + }, + /* + 接口函数 + 取消静音 + */ + videoEscMute: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoEscMute(); + return; + } + this.changeVolume(this.volumeTemp > 0 ? this.volumeTemp: this.vars['volume']); + }, + /* + 接口函数 + 视频广告静音 + */ + adMuteFunction: function() { + if (!this.loaded) { + return; + } + this.changeVolume(0); + this.adVideoMute = true; + this.css(this.CB['adEscMute'], 'display', 'block'); + this.css(this.CB['adMute'], 'display', 'none'); + }, + /* + 接口函数 + 视频广告取消静音 + */ + adEscMuteFunction: function() { + if (!this.loaded) { + return; + } + var v = this.ckplayerConfig['style']['advertisement']['videoVolume']; + this.changeVolume(v); + this.adMuteInto(); + }, + /* + 初始化广告的音量按钮 + */ + adMuteInto: function() { + this.adVideoMute = false; + this.css(this.CB['adEscMute'], 'display', 'none'); + this.css(this.CB['adMute'], 'display', 'block'); + }, + /* + 接口函数 + 快退 + */ + fastBack: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.fastBack(); + return; + } + var time = this.time - this.ckplayerConfig['config']['timeJump']; + if (time < 0) { + time = 0; + } + this.videoSeek(time); + }, + /* + 接口函数 + 快进 + */ + fastNext: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.fastNext(); + return; + } + var time = this.time + this.ckplayerConfig['config']['timeJump']; + if (time > this.V.duration) { + time = this.V.duration; + } + this.videoSeek(time); + }, + /* + 接口函数 + 获取当前播放的地址 + */ + getCurrentSrc: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + return this.V.getCurrentSrc(); + } + return this.V.currentSrc; + }, + /* + 内置函数 + 全屏/退出全屏动作,该动作只能是用户操作才可以触发,比如用户点击按钮触发该事件 + */ + switchFull: function() { + if (this.full) { + this.quitFullScreen(); + } else { + this.fullScreen(); + } + }, + /* + 内置函数 + 全屏动作,该动作只能是用户操作才可以触发,比如用户点击按钮触发该事件 + */ + fullScreen: function() { + if (this.html5Video && this.playerType == 'html5video') { + var element = this.PD; + if (element.requestFullscreen) { + element.requestFullscreen(); + } else if (element.mozRequestFullScreen) { + element.mozRequestFullScreen(); + } else if (element.webkitRequestFullscreen) { + element.webkitRequestFullscreen(); + } else if (element.msRequestFullscreen) { + element.msRequestFullscreen(); + } else if (element.oRequestFullscreen) { + element.oRequestFullscreen(); + } + this.judgeFullScreen(); + } else { + //this.V.fullScreen(); + } + }, + /* + 接口函数 + 退出全屏动作 + */ + quitFullScreen: function() { + if (this.html5Video && this.playerType == 'html5video') { + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.msExitFullscreen) { + document.msExitFullscreen(); + } else if (document.mozCancelFullScreen) { + document.mozCancelFullScreen(); + } else if (document.oRequestFullscreen) { + document.oCancelFullScreen(); + } else if (document.requestFullscreen) { + document.requestFullscreen(); + } else if (document.webkitExitFullscreen) { + document.webkitExitFullscreen(); + } else { + this.css(document.documentElement, 'cssText', ''); + this.css(document.document.body, 'cssText', ''); + this.css(this.PD, 'cssText', ''); + } + this.judgeFullScreen(); + } + }, + /* + 下面列出只有flashplayer里支持的 + */ + videoRotation: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoRotation(n); + return; + } + if (this.isUndefined(n)) { + n = 0; + } + var tf = this.css(this.V, 'transform'); + if (this.isUndefined(tf) && !tf) { + tf = 'rotate(0deg)'; + } + var reg = tf.match(/rotate\([^)]+\)/); + reg = reg ? reg[0].replace('rotate(', '').replace('deg)', '') : ''; + if (reg == '') { + reg = 0; + } else { + reg = parseInt(reg); + } + if (n == -1) { + reg -= 90; + } else if (n == 1) { + reg += 90; + } else { + if (n != 90 && n != 180 && n != 270 && n != -90 && n != -180 && n != -270) { + reg = 0; + } else { + reg = n; + } + } + n = reg; + var y90 = n % 90, + y180 = n % 180, + y270 = n % 270; + var ys = false; + if (y90 == 0 && y180 == 90 && y270 == 90) { + ys = true; + } + if (y90 == 0 && y180 == 90 && y270 == 0) { + ys = true; + } + if (y90 == -0 && y180 == -90 && y270 == -90) { + ys = true; + } + if (y90 == -0 && y180 == -90 && y270 == -0) { + ys = true; + } + tf = tf.replace(/rotate\([^)]+\)/, '').replace(/scale\([^)]+\)/, '') + ' rotate(' + n + 'deg)'; + var cdW = this.CD.offsetWidth, + cdH = this.CD.offsetHeight, + vW = this.V.videoWidth, + vH = this.V.videoHeight; + if (vW > 0 && vH > 0) { + if (ys) { + if (cdW / cdH > vH / vW) { + nH = cdH; + nW = vH * nH / vW; + } else { + nW = cdW; + nH = vW * nW / vH; + } + this.css(this.V, 'transform', 'rotate(0deg)'); + this.css(this.V, 'transform', 'scale(' + nH / cdW + ',' + nW / cdH + ')' + tf); + } else { + this.css(this.V, 'transform', tf); + } + } else { + this.css(this.V, 'transform', tf); + } + return; + }, + videoBrightness: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoBrightness(n); + return; + } + }, + videoContrast: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoContrast(n); + return; + } + }, + videoSaturation: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoSaturation(n); + return; + } + }, + videoHue: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoHue(n); + return; + } + }, + videoZoom: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoZoom(n); + return; + } + if (this.isUndefined(n)) { + n = 1; + } + if (n < 0) { + n = 0; + } + if (n > 2) { + n = 2; + } + var tf = this.css(this.V, 'transform'); + tf = tf.replace(/scale\([^)]+\)/, '') + ' scale(' + n + ')'; + this.videoScale = n; + this.css(this.V, 'transform', tf); + return; + }, + videoProportion: function(w, h) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoProportion(w, h); + return; + } + }, + adPlay: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.adPlay(); + return; + } + if (this.adPlayerPlay) { + this.adIsPause = false; + if (this.adPlayerPlay) { + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (this.isStrImage(type)) { + this.adCountDown(); + } else { + this.V.play(); + } + } + } + }, + adPause: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.adPause(); + return; + } + if (this.adPlayerPlay) { + this.adIsPause = true; + var ad = this.getNowAdvertisements(); + var type = ad['type']; + if (type != 'jpg' && type != 'jpeg' && type != 'png' && type != 'svg' && type != 'gif') { + this.videoPause(); + } + } + }, + videoError: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoError(n); + return; + } + }, + changeConfig: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeConfig(arguments); + return; + } + var obj = this.ckplayerConfig; + var arg = arguments; + for (var i = 0; i < arg.length - 1; i++) { + if (obj.hasOwnProperty(arg[i])) { + obj = obj[arg[i]]; + } else { + return; + } + } + var val = arg[arg.length - 1]; + switch (arg.length) { + case 2: + this.ckplayerConfig[arg[0]] = val; + break; + case 3: + this.ckplayerConfig[arg[0]][arg[1]] = val; + break; + case 4: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]] = val; + break; + case 5: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]] = val; + break; + case 6: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]] = val; + break; + case 7: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]] = val; + break; + case 8: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]] = val; + break; + case 9: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]][arg[7]] = val; + break; + case 10: + this.ckplayerConfig[arg[0]][arg[1]][arg[2]][arg[3]][arg[4]][arg[5]][arg[6]][arg[7]][arg[8]] = val; + break; + default: + return; + break; + } + this.sendJS('configChange', this.ckplayerConfig); + }, + custom: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.custom(arguments); + return; + } + }, + getConfig: function() { + if (!this.loaded) { + return null; + } + if (this.playerType == 'flashplayer') { + return this.V.getConfig(arguments); + } + }, + openUrl: function(n) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.openUrl(n); + return; + } + }, + /* + 接口函数 + 清除视频 + */ + videoClear: function() { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.videoClear(); + return; + } + }, + /* + 接口函数 + 向播放器传递新的视频地址 + */ + newVideo: function(c) { + if (this.playerType == 'flashplayer') { + this.V.newVideo(c); + return; + } else { + this.embed(c); + } + }, + /* + 接口函数 + 截图 + */ + screenshot: function(obj, save, name) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + try { + this.V.screenshot(obj, save, name); + } catch(error) { + this.log(error); + } + return; + } + if (obj == 'video') { + var newCanvas = document.createElement('canvas'); + newCanvas.width = this.V.videoWidth; + newCanvas.height = this.V.videoHeight; + newCanvas.getContext('2d').drawImage(this.V, 0, 0, this.V.videoWidth, this.V.videoHeight); + try { + var base64 = newCanvas.toDataURL('image/jpeg'); + this.sendJS('screenshot', { + object: obj, + save: save, + name: name, + base64: base64 + }); + } catch(error) { + this.log(error); + } + } + }, + /* + 接口函数 + 改变播放器尺寸 + */ + changeSize: function(w, h) { + if (this.isUndefined(w)) { + w = 0; + } + if (this.isUndefined(h)) { + h = 0; + } + if (w > 0) { + this.css(this.CD, 'width', w + 'px'); + } + if (h > 0) { + this.css(this.CD, 'height', h + 'px'); + } + if (this.html5Video) { + this.elementCoordinate(); + } + }, + /* + 接口函数 + 改变视频播放速度 + */ + changePlaybackRate: function(n) { + if (this.html5Video) { + var arr = this.playbackRateArr; + n = parseInt(n); + if (n < arr.length) { + this.newPlaybackrate(arr[n][1]); + } + } + }, + /* + 内部函数 + 注册控制控制栏显示与隐藏函数 + */ + changeControlBarShow: function(show) { + if (!this.loaded) { + return; + } + if (this.playerType == 'flashplayer') { + this.V.changeControlBarShow(show); + return; + } + if (show) { + this.controlBarIsShow = true; + this.controlBarHide(false); + } else { + this.controlBarIsShow = false; + this.controlBarHide(true); + } + }, + /* + ----------------------------------------------------------------------- + 调用flashplayer + */ + embedSWF: function() { + var vid = this.randomString(); + var flashvars = this.getFlashVars(); + var param = this.getFlashplayerParam(); + var flashplayerUrl = 'http://www.macromedia.com/go/getflashplayer'; + var html = '', + src = javascriptPath + 'ckplayer.swf'; + id = 'id="' + vid + '" name="' + vid + '" '; + html += ''; + html += param['v']; + html += ''; + html += ''; + html += ' '; + html += ''; + html += ''; + this.PD.innerHTML = html; + this.V = this.getObjectById(vid); //V:定义播放器对象全局变量 + this.playerType = 'flashplayer'; + //this.loaded=true; + }, + /* + 内置函数 + 将vars对象转换成字符 + */ + getFlashVars: function() { + this.getVarsObject(); + var v = this.vars; + var z = ''; + for (k in v) { + if (k != 'flashplayer' && k != 'container' && v[k] != '') { + if (z != '') { + z += '&'; + } + var vk = v[k]; + if (vk == true) { + vk = 1; + } + if (vk == false) { + vk = 0; + } + z += k + '=' + vk; + } + + } + if (!v.hasOwnProperty('volume') || !v['volume']) { + if (z != '') { + z += '&'; + } + z += 'volume=0'; + } + return z; + }, + /*判断字符串是否是图片*/ + isStrImage: function(s) { + if (s == 'jpg' || s == 'jpeg' || s == 'png' || s == 'svg' || s == 'gif') { + return true; + } + return false; + }, + /* + 内置函数 + 将vars格式化成flash能接受的对象。再由getFlashVars函数转化成字符串或由newVideo直接使用 + */ + getVarsObject: function() { + var v = this.vars; + var f = '', + d = '', + w = ''; //f=视频地址,d=清晰度地址,w=权重,z=最终地址 + var arr = this.VA; + var prompt = v['promptSpot']; + var i = 0; + var video = this.vars['video']; + if (typeof(video) == 'object') { //对象或数组 + if (!this.isUndefined(typeof(video.length))) { //说明是数组 + var arr = video; + for (i = 0; i < arr.length; i++) { + var arr2 = arr[i]; + if (arr2) { + if (f != '') { + f += this.ckplayerConfig['config']['split']; + d += ','; + w += ','; + v['type'] += this.ckplayerConfig['config']['split']; + } + f += encodeURIComponent(decodeURIComponent(arr2[0])); + d += arr2[2]; + w += arr2[3]; + v['type'] += arr2[1].replace('video/', ''); + } + } + } else { + f = encodeURIComponent(decodeURIComponent(video['file'])); + if (!this.isUndefined(video['type'])) { + v['type'] = video['type']; + } + d = ''; + w = ''; + } + } else { + f = encodeURIComponent(decodeURIComponent(video)); + } + if (v['preview'] != null) { + v['previewscale'] = v['preview']['scale']; + v['preview'] = v['preview']['file'].join(','); + + } + if (prompt != null) { + v['promptspot'] = ''; + v['promptspottime'] = ''; + for (i = 0; i < prompt.length; i++) { + if (v['promptspot'] != '') { + v['promptspot'] += ','; + v['promptspottime'] += ','; + } + v['promptspot'] += prompt[i]['words']; + v['promptspottime'] += prompt[i]['time']; + } + + } + if (f != '') { + v['video'] = f; + v['definition'] = d; + v['weight'] = w; + } + if (!v['volume']) { + v['volume'] = 0; + } + var newV = {}; + + for (var k in v) { + if (v[k] != null) { + newV[k] = v[k]; + } + if (k == 'type') { + newV[k] = v[k].replace('video/m3u8', 'm3u8'); + } + } + + this.vars = newV; + }, + /* + 内置函数 + 将embedSWF里的param的对象进行转换 + */ + getFlashplayerParam: function() { + var w = '', + v = '', + o = { + allowScriptAccess: 'always', + allowFullScreen: true, + quality: 'high', + bgcolor: '#000' + }; + for (var e in o) { + w += e + '="' + o[e] + '" '; + v += ''; + } + w = w.replace('movie=', 'src='); + return { + w: w, + v: v + }; + }, + + /* + 操作动作结束 + ----------------------------------------------------------------------- + + 接口函数 + 获取元数据部分 + */ + getMetaDate: function() { + if (!this.loaded || this.V == null) { + return false; + } + if (this.playerType == 'html5video') { + var duration = 0; + try { + duration = !isNaN(this.V.duration) ? this.V.duration: 0; + } catch(event) { + this.log(event); + } + var data = { + duration: duration, + volume: this.V.volume, + playbackRate: this.V.playbackRate, + width: this.PD.offsetWidth || this.V.offsetWidth || this.V.width, + height: this.PD.offsetHeight || this.V.offsetHeight || this.V.height, + streamWidth: this.V.videoWidth, + streamHeight: this.V.videoHeight, + videoWidth: this.V.offsetWidth, + videoHeight: this.V.offsetHeight, + paused: this.V.paused + }; + return data; + } else { + try { + return this.V.getMetaDate(); + } catch(event) { + this.log(event); + } + } + return false; + }, + /* + 接口函数 + 取当前提供给播放器播放的视频列表 + */ + getVideoUrl: function() { + if (this.playerType == 'flashplayer') { + return this.V.getVideoUrl(); + } + var arr = []; + if (this.V.src) { + arr.push(this.V.src); + } else { + var uArr = this.V.childNodes; + for (var i = 0; i < uArr.length; i++) { + arr.push(uArr[i].src); + } + } + return arr; + }, + /* + 内置函数 + 格式化函数 + */ + clickEvent: function(call) { + if (call == 'none' || call == '' || call == null) { + return { + type: 'none' + }; + } + var callArr = call.split('->'); + var type = '', + fun = '', + link = '', + target = ''; + if (callArr.length == 2) { + var callM = callArr[0]; + var callE = callArr[1]; + if (!callE) { + return { + type: 'none' + }; + } + var val = ''; + var eArr = []; + type = callM; + switch (callM) { + case 'actionScript': + //trace(THIS.hasOwnProperty(callE)); + if (callE.indexOf('(') > -1) { + eArr = callE.split('('); + callE = eArr[0]; + val = eArr[1].replace(')', ''); + } + if (val == '') { + fun = 'thisTemp.' + callE + '()'; + } else { + fun = 'thisTemp.' + callE + '(' + val + ')'; + } + break; + case 'javaScript': + if (callE.substr(0, 11) == '[flashvars]') { + callE = callE.substr(11); + if (this.vars.hasOwnProperty(callE)) { + callE = this.vars[callE]; + } else { + break; + } + + } + if (callE.indexOf('(') > -1) { + eArr = callE.split('('); + callE = eArr[0]; + val = eArr[1].replace(')', ''); + } + if (val == '') { + fun = callE + '()'; + } else { + fun = callE + '(' + val + ')'; + } + break; + case "link": + var callLink = (callE + ',').split(','); + if (callLink[0].substr(0, 11) == '[flashvars]') { + var fl = callLink[0].replace('[flashvars]', ''); + if (this.vars.hasOwnProperty(fl)) { + callLink[0] = this.vars[fl]; + } else { + break; + } + } + if (!callLink[1]) { + callLink[1] = '_blank'; + } + link = callLink[0]; + target = callLink[1]; + break; + } + } + return { + type: type, + fun: fun, + link: link, + target: target + } + }, + /* + 内置函数 + 根据指定的align,valign,offsetX,offsetY计算坐标 + */ + getPosition: function(obj) { + /* + { + "align": "right", + "vAlign": "right", + "offsetX": -60, + "offsetY": -60 + } + */ + var pw = this.PD.offsetWidth, + ph = this.PD.offsetHeight; + var x = 0, + y = 0; + switch (obj['align']) { + case 'left': + x = obj['offsetX']; + break; + case 'center': + x = pw * 0.5 + obj['offsetX']; + break; + case 'right': + x = pw + obj['offsetX']; + break; + } + switch (obj['vAlign']) { + case 'top': + y = obj['offsetY']; + break; + case 'middle': + y = ph * 0.5 + obj['offsetY']; + break; + case 'bottom': + y = ph + obj['offsetY']; + break; + } + return { + x: x, + y: y + }; + }, + /* + 内置函数 + 向播放器界面添加一个文本 + */ + addElement: function(attribute) { + var thisTemp = this; + if (this.playerType == 'flashplayer') { + return this.V.addElement(attribute); + } + var i = 0; + var obj = { + list: null, + x: '100%', + y: "50%", + position: null, + alpha: 1, + backgroundColor: '', + backAlpha: 1, + backRadius: 0, + clickEvent: '' + }; + obj = this.standardization(obj, attribute); + var list = obj['list']; + if (list == null) { + return ''; + } + var id = 'element' + this.randomString(10); + var ele = document.createElement('div'); + ele.className = id; + if (obj['x']) { + ele.setAttribute('data-x', obj['x']); + } + if (obj['y']) { + ele.setAttribute('data-y', obj['y']); + } + if (obj['position'] != null) { + ele.setAttribute('data-position', obj['position'].join(',')); + } + + this.PD.appendChild(ele); + var eid = this.getByElement(id); + this.css(eid, { + position: 'absolute', + filter: 'alpha(opacity:' + obj['alpha'] + ')', + opacity: obj['alpha'].toString(), + width: '800px', + zIndex: '20' + }); + var bgid = 'elementbg' + this.randomString(10); + var bgAlpha = obj['alpha'].toString(); + var bgColor = obj['backgroundColor'].replace('0x', '#'); + var html = ''; + var idArr = []; + var clickArr = []; + if (!this.isUndefined(list) && list.length > 0) { + var textObj, returnObj, clickEvent; + for (i = 0; i < list.length; i++) { + var newEleid = 'elementnew' + this.randomString(10); + switch (list[i]['type']) { + case 'image': + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + textObj = { + type: 'image', + file: '', + radius: 0, + //圆角弧度 + width: 30, + //定义宽,必需要定义 + height: 30, + //定义高,必需要定义 + alpha: 1, + //透明度 + paddingLeft: 0, + //左边距离 + paddingRight: 0, + //右边距离 + paddingTop: 0, + paddingBottom: 0, + marginLeft: 0, + marginRight: 0, + marginTop: 0, + marginBottom: 0, + backgroundColor: '', + clickEvent: '' + }; + + list[i] = this.standardization(textObj, list[i]); + clickEvent = this.clickEvent(list[i]['clickEvent']); + clickArr.push(clickEvent); + if (clickEvent['type'] == 'link') { + html += '
'; + } else { + html += '
'; + } + break; + case 'text': + textObj = { + type: 'text', + //说明是文本 + text: '', + //文本内容 + color: '0xFFFFFF', + size: 14, + font: this.fontFamily, + leading: 0, + alpha: 1, + //透明度 + paddingLeft: 0, + //左边距离 + paddingRight: 0, + //右边距离 + paddingTop: 0, + paddingBottom: 0, + marginLeft: 0, + marginRight: 0, + marginTop: 0, + marginBottom: 0, + backgroundColor: '', + backAlpha: 1, + backRadius: 0, + //背景圆角弧度,支持数字统一设置,也支持分开设置[30,20,20,50],对应上左,上右,下右,下左 + clickEvent: '' + }; + list[i] = this.standardization(textObj, list[i]); + clickEvent = this.clickEvent(list[i]['clickEvent']); + clickArr.push(clickEvent); + if (clickEvent['type'] == 'link') { + html += '
' + list[i]['text'] + '
'; + } else { + html += '
' + list[i]['text'] + '
'; + } + break; + default: + break; + } + idArr.push(newEleid); + } + } + var objClickEvent = this.clickEvent(obj['clickEvent']); + /*if(objClickEvent['type']=='link'){ + html = '' + html + ''; + }*/ + eid.innerHTML = '
' + html + '
'; + if (objClickEvent['type'] == 'javaScript' || objClickEvent['type'] == 'actionScript') { + var objClickHandler = function() { + eval(objClickEvent['fun']); + thisTemp.sendJS('clickEvent', clk['type'] + '->' + clk['fun'].replace('thisTemp.', '').replace('()', '')); + }; + this.addListenerInside('click', objClickHandler, this.getByElement(bgid + '_c')) + } + this.css(bgid + '_c', { + position: 'absolute', + zIndex: '2' + }); + for (i = 0; i < idArr.length; i++) { + var clk = clickArr[i]; + + if (clk['type'] == 'javaScript' || clk['type'] == 'actionScript') { + var clickHandler = function() { + clk = clickArr[this.getAttribute('data-i')]; + eval(clk['fun']); + thisTemp.sendJS('clickEvent', clk['type'] + '->' + clk['fun'].replace('thisTemp.', '').replace('()', '')); + }; + this.addListenerInside('click', clickHandler, this.getByElement(idArr[i])) + } + switch (list[i]['type']) { + case 'image': + case 'png': + case 'jpg': + case 'jpeg': + case 'gif': + this.css(idArr[i], { + float: 'left', + width: list[i]['width'] + 'px', + height: list[i]['height'] + 'px', + filter: 'alpha(opacity:' + list[i]['alpha'] + ')', + opacity: list[i]['alpha'].toString(), + marginLeft: list[i]['marginLeft'] + 'px', + marginRight: list[i]['marginRight'] + 'px', + marginTop: list[i]['marginTop'] + 'px', + marginBottom: list[i]['marginBottom'] + 'px', + borderRadius: list[i]['radius'] + 'px', + cursor: 'pointer' + }); + this.css(idArr[i] + '_image', { + width: list[i]['width'] + 'px', + height: list[i]['height'] + 'px', + borderRadius: list[i]['radius'] + 'px' + }); + break; + case 'text': + this.css(idArr[i] + '_text', { + filter: 'alpha(opacity:' + list[i]['alpha'] + ')', + opacity: list[i]['alpha'].toString(), + borderRadius: list[i]['radius'] + 'px', + fontFamily: list[i]['font'], + fontSize: list[i]['size'] + 'px', + color: list[i]['color'].replace('0x', '#'), + lineHeight: list[i]['leading'] > 0 ? list[i]['leading'] + 'px': '', + paddingLeft: list[i]['paddingLeft'] + 'px', + paddingRight: list[i]['paddingRight'] + 'px', + paddingTop: list[i]['paddingTop'] + 'px', + paddingBottom: list[i]['paddingBottom'] + 'px', + whiteSpace: 'nowrap', + position: 'absolute', + zIndex: '3', + cursor: 'pointer' + }); + this.css(idArr[i], { + float: 'left', + width: this.getByElement(idArr[i] + '_text').offsetWidth + 'px', + height: this.getByElement(idArr[i] + '_text').offsetHeight + 'px', + marginLeft: list[i]['marginLeft'] + 'px', + marginRight: list[i]['marginRight'] + 'px', + marginTop: list[i]['marginTop'] + 'px', + marginBottom: list[i]['marginBottom'] + 'px' + }); + this.css(idArr[i] + '_bg', { + width: this.getByElement(idArr[i] + '_text').offsetWidth + 'px', + height: this.getByElement(idArr[i] + '_text').offsetHeight + 'px', + filter: 'alpha(opacity:' + list[i]['backAlpha'] + ')', + opacity: list[i]['backAlpha'].toString(), + borderRadius: list[i]['backRadius'] + 'px', + backgroundColor: list[i]['backgroundColor'].replace('0x', '#'), + position: 'absolute', + zIndex: '2' + }); + break; + default: + break; + } + } + this.css(bgid, { + width: this.getByElement(bgid + '_c').offsetWidth + 'px', + height: this.getByElement(bgid + '_c').offsetHeight + 'px', + position: 'absolute', + filter: 'alpha(opacity:' + bgAlpha + ')', + opacity: bgAlpha, + backgroundColor: bgColor.replace('0x', '#'), + borderRadius: obj['backRadius'] + 'px', + zIndex: '1' + }); + this.css(eid, { + width: this.getByElement(bgid).offsetWidth + 'px', + height: this.getByElement(bgid).offsetHeight + 'px' + }); + var eidCoor = this.calculationCoor(eid); + this.css(eid, { + left: eidCoor['x'] + 'px', + top: eidCoor['y'] + 'px' + }); + + this.elementArr.push(eid.className); + return eid; + }, + /* + 内置函数 + 获取元件的属性,包括x,y,width,height,alpha + */ + getElement: function(element) { + if (this.playerType == 'flashplayer') { + return this.V.getElement(element); + } + var ele = element; + if (typeof(element) == 'string') { + ele = this.getByElement(element); + } + var coor = this.getCoor(ele); + return { + x: coor['x'], + y: coor['y'], + width: ele.offsetWidth, + height: ele.offsetHeight, + alpha: !this.isUndefined(this.css(ele, 'opacity')) ? parseFloat(this.css(ele, 'opacity')) : 1, + show: this.css(ele, 'display') == 'none' ? false: true + }; + }, + /* + 内置函数 + 控制元件显示和隐藏 + */ + elementShow: function(element, show) { + if (this.playerType == 'flashplayer') { + this.V.elementShow(element, show); + return; + } + if (typeof(element) == 'string') { + if (element) { + this.css(ele, 'display', show == true ? 'block': 'none'); + } else { + var arr = this.elementTempArr; + for (var i = 0; i < arr.length; i++) { + this.css(arr[i], 'display', show == true ? 'block': 'none'); + } + } + } + + }, + /* + 内置函数 + 根据节点的x,y计算在播放器里的坐标 + */ + calculationCoor: function(ele) { + if (this.playerType == 'flashplayer') { + return this.V.calculationCoor(ele); + } + if (ele == []) { + return; + } + var x, y, position = []; + var w = this.PD.offsetWidth, + h = this.PD.offsetHeight; + var ew = ele.offsetWidth, + eh = ele.offsetHeight; + if (!this.isUndefined(this.getDataset(ele, 'x'))) { + x = this.getDataset(ele, 'x'); + } + if (!this.isUndefined(this.getDataset(ele, 'y'))) { + y = this.getDataset(ele, 'y'); + } + if (!this.isUndefined(this.getDataset(ele, 'position'))) { + try { + position = this.getDataset(ele, 'position').toString().split(','); + } catch(event) {} + } + if (position.length > 0) { + position.push(null, null, null, null); + var i = 0; + for (i = 0; i < position.length; i++) { + if (this.isUndefined(position[i]) || position[i] == null || position[i] == 'null' || position[i] == '') { + position[i] = null; + } else { + position[i] = parseFloat(position[i]); + } + } + + if (position[2] == null) { + switch (position[0]) { + case 0: + x = 0; + break; + case 1: + x = parseInt((w - ew) * 0.5); + break; + default: + x = w - ew; + break; + } + } else { + switch (position[0]) { + case 0: + x = position[2]; + break; + case 1: + x = parseInt(w * 0.5) + position[2]; + break; + default: + x = w + position[2]; + break; + } + } + if (position[3] == null) { + switch (position[1]) { + case 0: + y = 0; + break; + case 1: + y = parseInt((h - eh) * 0.5); + break; + default: + y = h - eh; + break; + } + } else { + switch (position[1]) { + case 0: + y = position[3]; + break; + case 1: + y = parseInt(h * 0.5) + position[3]; + break; + default: + y = h + position[3]; + break; + } + } + } else { + if (x.substring(x.length - 1, x.length) == '%') { + x = Math.floor(parseInt(x.substring(0, x.length - 1)) * w * 0.01); + } + if (y.substring(y.length - 1, y.length) == '%') { + y = Math.floor(parseInt(y.substring(0, y.length - 1)) * h * 0.01); + } + } + return { + x: x, + y: y + } + + }, + /* + 内置函数 + 修改新增元件的坐标 + */ + changeElementCoor: function() { + for (var i = 0; i < this.elementArr.length; i++) { + if (this.getByElement(this.elementArr[i]) != []) { + var c = this.calculationCoor(this.getByElement(this.elementArr[i])); + if (c['x'] && c['y']) { + this.css(this.elementArr[i], { + top: c['y'] + 'px', + left: c['x'] + 'px' + }); + } + } + } + }, + /* + 内置函数 + 缓动效果集 + */ + tween: function() { + var Tween = { + None: { //均速运动 + easeIn: function(t, b, c, d) { + return c * t / d + b; + }, + easeOut: function(t, b, c, d) { + return c * t / d + b; + }, + easeInOut: function(t, b, c, d) { + return c * t / d + b; + } + }, + Quadratic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t + b; + }, + easeOut: function(t, b, c, d) { + return - c * (t /= d) * (t - 2) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t + b; + return - c / 2 * ((--t) * (t - 2) - 1) + b; + } + }, + Cubic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t + b; + }, + easeOut: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t + b; + return c / 2 * ((t -= 2) * t * t + 2) + b; + } + }, + Quartic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t * t + b; + }, + easeOut: function(t, b, c, d) { + return - c * ((t = t / d - 1) * t * t * t - 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t + b; + return - c / 2 * ((t -= 2) * t * t * t - 2) + b; + } + }, + Quintic: { + easeIn: function(t, b, c, d) { + return c * (t /= d) * t * t * t * t + b; + }, + easeOut: function(t, b, c, d) { + return c * ((t = t / d - 1) * t * t * t * t + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return c / 2 * t * t * t * t * t + b; + return c / 2 * ((t -= 2) * t * t * t * t + 2) + b; + } + }, + Sine: { + easeIn: function(t, b, c, d) { + return - c * Math.cos(t / d * (Math.PI / 2)) + c + b; + }, + easeOut: function(t, b, c, d) { + return c * Math.sin(t / d * (Math.PI / 2)) + b; + }, + easeInOut: function(t, b, c, d) { + return - c / 2 * (Math.cos(Math.PI * t / d) - 1) + b; + } + }, + Exponential: { + easeIn: function(t, b, c, d) { + return (t == 0) ? b: c * Math.pow(2, 10 * (t / d - 1)) + b; + }, + easeOut: function(t, b, c, d) { + return (t == d) ? b + c: c * ( - Math.pow(2, -10 * t / d) + 1) + b; + }, + easeInOut: function(t, b, c, d) { + if (t == 0) return b; + if (t == d) return b + c; + if ((t /= d / 2) < 1) return c / 2 * Math.pow(2, 10 * (t - 1)) + b; + return c / 2 * ( - Math.pow(2, -10 * --t) + 2) + b; + } + }, + Circular: { + easeIn: function(t, b, c, d) { + return - c * (Math.sqrt(1 - (t /= d) * t) - 1) + b; + }, + easeOut: function(t, b, c, d) { + return c * Math.sqrt(1 - (t = t / d - 1) * t) + b; + }, + easeInOut: function(t, b, c, d) { + if ((t /= d / 2) < 1) return - c / 2 * (Math.sqrt(1 - t * t) - 1) + b; + return c / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1) + b; + } + }, + Elastic: { + easeIn: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + return - (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + }, + easeOut: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d) == 1) return b + c; + if (!p) p = d * .3; + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + return (a * Math.pow(2, -10 * t) * Math.sin((t * d - s) * (2 * Math.PI) / p) + c + b); + }, + easeInOut: function(t, b, c, d, a, p) { + if (t == 0) return b; + if ((t /= d / 2) == 2) return b + c; + if (!p) p = d * (.3 * 1.5); + if (!a || a < Math.abs(c)) { + a = c; + var s = p / 4; + } else var s = p / (2 * Math.PI) * Math.asin(c / a); + if (t < 1) return - .5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p)) + b; + return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t * d - s) * (2 * Math.PI) / p) * .5 + c + b; + } + }, + Back: { + easeIn: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * (t /= d) * t * ((s + 1) * t - s) + b; + }, + easeOut: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b; + }, + easeInOut: function(t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t /= d / 2) < 1) return c / 2 * (t * t * (((s *= (1.525)) + 1) * t - s)) + b; + return c / 2 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2) + b; + } + }, + Bounce: { + easeIn: function(t, b, c, d) { + return c - Tween.Bounce.easeOut(d - t, 0, c, d) + b; + }, + easeOut: function(t, b, c, d) { + if ((t /= d) < (1 / 2.75)) { + return c * (7.5625 * t * t) + b; + } else if (t < (2 / 2.75)) { + return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b; + } else if (t < (2.5 / 2.75)) { + return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b; + } else { + return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b; + } + }, + easeInOut: function(t, b, c, d) { + if (t < d / 2) return Tween.Bounce.easeIn(t * 2, 0, c, d) * .5 + b; + else return Tween.Bounce.easeOut(t * 2 - d, 0, c, d) * .5 + c * .5 + b; + } + } + }; + return Tween; + }, + /* + 接口函数 + 缓动效果 + ele:Object=需要缓动的对象, + parameter:String=需要改变的属性:x,y,width,height,alpha, + effect:String=效果名称, + start:Int=起始值, + end:Int=结束值, + speed:Number=运动的总秒数,支持小数 + */ + animate: function(attribute) { + if (this.playerType == 'flashplayer') { + return this.V.animate(attribute); + } + var thisTemp = this; + var animateId = 'animate_' + this.randomString(); + var obj = { + element: null, + parameter: 'x', + static: false, + effect: 'None.easeIn', + start: null, + end: null, + speed: 0, + overStop: false, + pauseStop: false, + //暂停播放时缓动是否暂停 + callBack: null + }; + obj = this.standardization(obj, attribute); + if (obj['element'] == null || obj['speed'] == 0) { + return false; + } + var w = this.PD.offsetWidth, + h = this.PD.offsetHeight; + var effArr = (obj['effect'] + '.').split('.'); + var tweenFun = this.tween()[effArr[0]][effArr[1]]; + var eleCoor = { + x: 0, + y: 0 + }; + if (this.isUndefined(tweenFun)) { + return false; + } + //先将该元件从元件数组里删除,让其不再跟随播放器的尺寸改变而改变位置 + var def = this.arrIndexOf(this.elementArr, obj['element'].className); + if (def > -1) { + this.elementTempArr.push(obj['element'].className); + this.elementArr.splice(def, 1); + } + //var run = true; + var css = {}; + //对传递的参数进行转化,x和y转化成left,top + var pm = this.getElement(obj['element']); //包含x,y,width,height,alpha属性 + var t = 0; //当前时间 + var b = 0; //初始值 + var c = 0; //变化量 + var d = obj['speed'] * 1000; //持续时间 + var timerTween = null; + var tweenObj = null; + var start = obj['start'] == null ? '': obj['start'].toString(); + var end = obj['end'] == null ? '': obj['end'].toString(); + switch (obj['parameter']) { + case 'x': + if (obj['start'] == null) { + b = pm['x']; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(start) * w * 0.01; + } else { + b = parseInt(start); + } + + } + if (obj['end'] == null) { + c = pm['x'] - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) * w * 0.01 - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) - b; + } else { + c = parseInt(end); + } + + } else { + c = parseInt(end) - b; + } + } + break; + case 'y': + if (obj['start'] == null) { + b = pm['y']; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(start) * h * 0.01; + } else { + b = parseInt(start); + } + + } + if (obj['end'] == null) { + c = pm['y'] - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) * h * 0.01 - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) - b; + } else { + c = parseInt(end); + } + } else { + c = parseInt(end) - b; + } + } + break; + case 'alpha': + if (obj['start'] == null) { + b = pm['alpha'] * 100; + } else { + if (start.substring(start.length - 1, start.length) == '%') { + b = parseInt(obj['start']); + } else { + b = parseInt(obj['start'] * 100); + } + + } + if (obj['end'] == null) { + c = pm['alpha'] * 100 - b; + } else { + if (end.substring(end.length - 1, end.length) == '%') { + c = parseInt(end) - b; + } else if (end.substring(0, 1) == '-' || end.substring(0, 1) == '+') { + if (typeof(obj['end']) == 'number') { + c = parseInt(obj['end']) * 100 - b; + } else { + c = parseInt(obj['end']) * 100; + } + } else { + c = parseInt(obj['end']) * 100 - b; + } + } + break; + } + var callBack = function() { + var index = thisTemp.arrIndexOf(thisTemp.animateElementArray, animateId); + if (index > -1) { + thisTemp.animateArray.splice(index, 1); + thisTemp.animateElementArray.splice(index, 1); + } + index = thisTemp.arrIndexOf(thisTemp.animatePauseArray, animateId); + if (index > -1) { + thisTemp.animatePauseArray.splice(index, 1); + } + if (obj['callBack'] != null && obj['element'] && obj['callBack'] != 'callBack' && obj['callBack'] != 'tweenX' && obj['tweenY'] != 'callBack' && obj['callBack'] != 'tweenAlpha') { + var cb = eval(obj['callBack']); + cb(obj['element']); + obj['callBack'] = null; + } + }; + var stopTween = function() { + if (timerTween != null) { + if (timerTween.runing) { + timerTween.stop(); + } + timerTween = null; + } + }; + var tweenX = function() { + if (t < d) { + t += 10; + css = { + left: Math.ceil(tweenFun(t, b, c, d)) + 'px' + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['top'] = eleCoor['y'] + 'px'; + } + thisTemp.css(obj['element'], css); + + } else { + stopTween(); + try { + var defX = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defX > -1) { + this.elementTempArr.splice(defX, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + var tweenY = function() { + if (t < d) { + t += 10; + css = { + top: Math.ceil(tweenFun(t, b, c, d)) + 'px' + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['left'] = eleCoor['x'] + 'px'; + } + thisTemp.css(obj['element'], css); + } else { + stopTween(); + try { + var defY = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defY > -1) { + this.elementTempArr.splice(defY, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + var tweenAlpha = function() { + if (t < d) { + t += 10; + eleCoor = thisTemp.calculationCoor(obj['element']); + var ap = Math.ceil(tweenFun(t, b, c, d)) * 0.01; + css = { + filter: 'alpha(opacity:' + ap + ')', + opacity: ap.toString() + }; + if (obj['static']) { + eleCoor = thisTemp.calculationCoor(obj['element']); + css['top'] = eleCoor['y'] + 'px'; + css['left'] = eleCoor['x'] + 'px'; + } + thisTemp.css(obj['element'], css); + } else { + stopTween(); + try { + var defA = this.arrIndexOf(this.elementTempArr, obj['element'].className); + if (defA > -1) { + this.elementTempArr.splice(defA, 1); + } + } catch(event) {} + thisTemp.elementArr.push(obj['element'].className); + callBack(); + } + }; + switch (obj['parameter']) { + case 'x': + tweenObj = tweenX; + break; + case 'y': + tweenObj = tweenY; + break; + case 'alpha': + tweenObj = tweenAlpha; + break; + default: + break; + } + timerTween = new thisTemp.timer(10, tweenObj); + timerTween.callBackFunction = callBack; + if (obj['overStop']) { + var mouseOver = function() { + if (timerTween != null && timerTween.runing) { + timerTween.stop(); + } + }; + this.addListenerInside('mouseover', mouseOver, obj['element']); + var mouseOut = function() { + var start = true; + if (obj['pauseStop'] && thisTemp.getMetaDate()['paused']) { + start = false; + } + if (timerTween != null && !timerTween.runing && start) { + timerTween.start(); + } + }; + this.addListenerInside('mouseout', mouseOut, obj['element']); + } + + this.animateArray.push(timerTween); + this.animateElementArray.push(animateId); + if (obj['pauseStop']) { + this.animatePauseArray.push(animateId); + } + return animateId; + }, + /* + 接口函数函数 + 继续运行animate + */ + animateResume: function(id) { + if (this.playerType == 'flashplayer') { + this.V.animateResume(this.isUndefined(id) ? '': id); + return; + } + var arr = []; + if (id != '' && !this.isUndefined(id) && id != 'pause') { + arr.push(id); + } else { + if (id === 'pause') { + arr = this.animatePauseArray; + } else { + arr = this.animateElementArray; + } + } + for (var i = 0; i < arr.length; i++) { + var index = this.arrIndexOf(this.animateElementArray, arr[i]); + if (index > -1) { + this.animateArray[index].start(); + } + } + + }, + /* + 接口函数 + 暂停运行animate + */ + animatePause: function(id) { + if (this.playerType == 'flashplayer') { + this.V.animatePause(this.isUndefined(id) ? '': id); + return; + } + var arr = []; + if (id != '' && !this.isUndefined(id) && id != 'pause') { + arr.push(id); + } else { + if (id === 'pause') { + arr = this.animatePauseArray; + } else { + arr = this.animateElementArray; + } + } + for (var i = 0; i < arr.length; i++) { + var index = this.arrIndexOf(this.animateElementArray, arr[i]); + if (index > -1) { + this.animateArray[index].stop(); + } + } + }, + /* + 内置函数 + 根据ID删除数组里对应的内容 + */ + deleteAnimate: function(id) { + if (this.playerType == 'flashplayer' && this.V) { + try { + this.V.deleteAnimate(id); + } catch(event) { + this.log(event); + } + return; + } + var index = this.arrIndexOf(this.animateElementArray, id); + if (index > -1) { + this.animateArray[index].callBackFunction(); + this.animateArray.splice(index, 1); + this.animateElementArray.splice(index, 1); + } + }, + /* + 内置函数 + 删除外部新建的元件 + */ + deleteElement: function(ele) { + if (this.playerType == 'flashplayer' && this.V) { + try { + this.V.deleteElement(ele); + } catch(event) {} + return; + } + //先将该元件从元件数组里删除,让其不再跟随播放器的尺寸改变而改变位置 + var def = this.arrIndexOf(this.elementArr, ele.className); + if (def > -1) { + this.elementArr.splice(def, 1); + } + try { + def = this.arrIndexOf(this.elementTempArr, ele.className); + if (def > -1) { + this.elementTempArr.splice(def, 1); + } + } catch(event) {} + this.deleteAnimate(ele); + this.deleteChild(ele); + }, + /* + -------------------------------------------------------------- + 共用函数部分 + 以下函数并非只能在本程序中使用,也可以在页面其它项目中使用 + 根据ID获取元素对象 + */ + getByElement: function(obj, parent) { + if (this.isUndefined(parent)) { + parent = document; + } + var num = obj.substr(0, 1); + var res = []; + if (num != '#') { + if (num == '.') { + obj = obj.substr(1, obj.length); + } + if (parent.getElementsByClassName) { + res = parent.getElementsByClassName(obj); + } else { + var reg = new RegExp(' ' + obj + ' ', 'i'); + var ele = parent.getElementsByTagName('*'); + + for (var i = 0; i < ele.length; i++) { + if (reg.test(' ' + ele[i].className + ' ')) { + res.push(ele[i]); + } + } + } + + if (res.length > 0) { + return res[0]; + } else { + return res; + } + } else { + if (num == '#') { + obj = obj.substr(1, obj.length); + } + return document.getElementById(obj); + } + }, + /* + 共用函数 + 功能:修改样式或获取指定样式的值, + elem:ID对象或ID对应的字符,如果多个对象一起设置,则可以使用数组 + attribute:样式名称或对象,如果是对象,则省略掉value值 + value:attribute为样式名称时,定义的样式值 + 示例一: + this.css(ID,'width','100px'); + 示例二: + this.css('id','width','100px'); + 示例三: + this.css([ID1,ID2,ID3],'width','100px'); + 示例四: + this.css(ID,{ + width:'100px', + height:'100px' + }); + 示例五(获取宽度): + var width=this.css(ID,'width'); + */ + css: function(elem, attribute, value) { + var i = 0; + var k = ''; + if (typeof(elem) == 'object') { //对象或数组 + if (!this.isUndefined(typeof(elem.length))) { //说明是数组 + for (i = 0; i < elem.length; i++) { + var el; + if (typeof(elem[i]) == 'string') { + el = this.getByElement(elem[i]) + } else { + el = elem[i]; + } + if (typeof(attribute) != 'object') { + if (!this.isUndefined(value)) { + el.style[attribute] = value; + } + } else { + for (k in attribute) { + if (!this.isUndefined(attribute[k])) { + try { + el.style[k] = attribute[k]; + } catch(event) { + this.log(event); + } + } + } + } + } + return; + } + + } + if (typeof(elem) == 'string') { + elem = this.getByElement(elem); + } + if (typeof(attribute) != 'object') { + if (!this.isUndefined(value)) { + elem.style[attribute] = value; + } else { + if (!this.isUndefined(this.getStyle(elem, attribute))) { + return this.getStyle(elem, attribute); + } else { + return false; + } + } + } else { + for (k in attribute) { + if (!this.isUndefined(attribute[k])) { + elem.style[k] = attribute[k]; + } + } + } + + }, + /* + 内置函数 + 兼容型获取style + */ + getStyle: function(obj, attr) { + if (!this.isUndefined(obj.style[attr])) { + return obj.style[attr]; + } else { + if (obj.currentStyle) { + return obj.currentStyle[attr]; + } else { + return getComputedStyle(obj, false)[attr]; + } + } + }, + /* + 共用函数 + 判断变量是否存在或值是否为undefined + */ + isUndefined: function(value) { + try { + if (value == 'undefined' || value == undefined || value == null) { + return true; + } + } catch(event) { + this.log(event); + } + return false; + }, + /* + 共用函数 + 外部监听函数 + */ + addListener: function(name, funName) { + if (name && funName) { + if (this.playerType == 'flashplayer') { + var ff = ''; //定义用来向flashplayer传递的函数字符 + if (typeof(funName) == 'function') { + ff = this.getParameterNames(funName); + } + this.V.addListener(name, ff); + return; + } + var have = false; + for (var i = 0; i < this.listenerJsArr.length; i++) { + var arr = this.listenerJsArr[i]; + if (arr[0] == name && arr[1] == funName) { + have = true; + break; + } + } + if (!have) { + this.listenerJsArr.push([name, funName]); + } + } + }, + /* + 共用函数 + 外部删除监听函数 + */ + removeListener: function(name, funName) { + if (name && funName) { + if (this.playerType == 'flashplayer') { + var ff = ''; //定义用来向flashplayer传递的函数字符 + if (typeof(funName) == 'function') { + ff = this.getParameterNames(funName); + } + this.V.removeListener(name, ff); + return; + } + for (var i = 0; i < this.listenerJsArr.length; i++) { + var arr = this.listenerJsArr[i]; + if (arr[0] == name && arr[1] == funName) { + this.listenerJsArr.splice(i, 1); + break; + } + } + } + }, + /* + 内部监听函数,调用方式: + this.addListenerInside('click',function(event){},[ID]); + d值为空时,则表示监听当前的视频播放器 + */ + addListenerInside: function(e, f, d, t) { + if (this.isUndefined(t)) { + t = false; + } + var o = this.V; + if (!this.isUndefined(d)) { + o = d; + } + if (o.addEventListener) { + try { + o.addEventListener(e, f, t); + } catch(event) {} + } else if (o.attachEvent) { + try { + o.attachEvent('on' + e, f); + } catch(event) {} + } else { + o['on' + e] = f; + } + }, + /* + 删除内部监听函数,调用方式: + this.removeListenerInside('click',function(event){}[,ID]); + d值为空时,则表示监听当前的视频播放器 + */ + removeListenerInside: function(e, f, d, t) { + /*if(this.playerType=='flashplayer' && this.getParameterNames(f) && this.isUndefined(d)) { + return; + }*/ + if (this.isUndefined(t)) { + t = false; + } + var o = this.V; + if (!this.isUndefined(d)) { + o = d; + } + if (o.removeEventListener) { + try { + this.addNum--; + o.removeEventListener(e, f, t); + } catch(e) {} + } else if (o.detachEvent) { + try { + o.detachEvent('on' + e, f); + } catch(e) {} + } else { + o['on' + e] = null; + } + }, + /* + 共用函数 + 统一分配监听,以达到跟as3同样效果 + */ + sendJS: function(name, val) { + if (this.adPlayerPlay && name.substr( - 2) != 'Ad') { + return; + } + var list = this.listenerJsArr; + var obj = { + variable: this.vars['variable'] + }; + if (this.vars['playerID']) { + obj['playerID'] = this.vars['playerID']; + } + for (var i = 0; i < list.length; i++) { + var arr = list[i]; + if (arr[0] == name) { + if (val) { + switch (arr[1].length) { + case 1: + arr[1](val); + break; + case 2: + arr[1](val, obj); + break; + default: + arr[1](); + break; + } + + } else { + switch (arr[1].length) { + case 1: + if (typeof(val) == 'boolean') { + arr[1](false); + } else { + arr[1](obj); + } + break; + default: + arr[1](); + break; + } + + } + } + } + }, + /* + 共用函数 + 获取函数名称,如 function ckplayer(){} var fun=ckplayer,则getParameterNames(fun)=ckplayer + */ + getParameterNames: function(fn) { + if (typeof(fn) !== 'function') { + return false; + } + var COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + var code = fn.toString().replace(COMMENTS, ''); + var result = code.slice(code.indexOf(' ') + 1, code.indexOf('(')); + return result === null ? false: result; + }, + /* + 共用函数 + 获取当前本地时间 + */ + getNowDate: function() { + var nowDate = new Date(); + var month = nowDate.getMonth() + 1; + var date = nowDate.getDate(); + var hours = nowDate.getHours(); + var minutes = nowDate.getMinutes(); + var seconds = nowDate.getSeconds(); + var tMonth = '', + tDate = '', + tHours = '', + tMinutes = '', + tSeconds = '', + tSeconds = (seconds < 10) ? '0' + seconds: seconds + '', + tMinutes = (minutes < 10) ? '0' + minutes: minutes + '', + tHours = (hours < 10) ? '0' + hours: hours + '', + tDate = (date < 10) ? '0' + date: date + '', + tMonth = (month < 10) ? '0' + month: month + ''; + return tMonth + '/' + tDate + ' ' + tHours + ':' + tMinutes + ':' + tSeconds; + }, + /* + 共用函数 + 格式化时分秒 + seconds:Int:秒数 + ishours:Boolean:是否显示小时,如果设置成false,则会显示如80:20,表示1小时20分钟20秒 + */ + formatTime: function(seconds, ishours) { + var tSeconds = '', + tMinutes = '', + tHours = ''; + if (isNaN(seconds)) { + seconds = 0; + } + var s = Math.floor(seconds % 60), + m = 0, + h = 0; + if (ishours) { + m = Math.floor(seconds / 60) % 60; + h = Math.floor(seconds / 3600); + } else { + m = Math.floor(seconds / 60); + } + tSeconds = (s < 10) ? '0' + s: s + ''; + tMinutes = (m > 0) ? ((m < 10) ? '0' + m + ':': m + ':') : '00:'; + tHours = (h > 0) ? ((h < 10) ? '0' + h + ':': h + ':') : ''; + if (ishours) { + return tHours + tMinutes + tSeconds; + } else { + return tMinutes + tSeconds; + } + }, + /* + 共用函数 + 获取一个随机字符 + len:随机字符长度 + */ + randomString: function(len) { + len = len || 16; + var chars = 'abcdefghijklmnopqrstuvwxyz'; + var maxPos = chars.length; + var val = ''; + for (i = 0; i < len; i++) { + val += chars.charAt(Math.floor(Math.random() * maxPos)); + } + return 'ch' + val; + }, + /* + 共用函数 + 获取字符串长度,中文算两,英文数字算1 + */ + getStringLen: function(str) { + var len = 0; + for (var i = 0; i < str.length; i++) { + if (str.charCodeAt(i) > 127 || str.charCodeAt(i) == 94) { + len += 2; + } else { + len++; + } + } + return len; + }, + /* + 内部函数 + 用来为ajax提供支持 + */ + createXHR: function() { + if (window.XMLHttpRequest) { + //IE7+、Firefox、Opera、Chrome 和Safari + return new XMLHttpRequest(); + } else if (window.ActiveXObject) { + //IE6 及以下 + try { + return new ActiveXObject('Microsoft.XMLHTTP'); + } catch(event) { + try { + return new ActiveXObject('Msxml2.XMLHTTP'); + } catch(event) { + this.eject(this.errorList[7]); + } + } + } else { + this.eject(this.errorList[8]); + } + }, + /* + 共用函数 + ajax调用 + */ + ajax: function(cObj) { + var thisTemp = this; + var callback = null; + var obj = { + method: 'get', + //请求类型 + dataType: 'json', + //请求的数据类型 + charset: 'utf-8', + async: false, + //true表示异步,false表示同步 + url: '', + data: null, + success: null + }; + if (typeof(cObj) != 'object') { + this.eject(this.errorList[9]); + return; + } + obj = this.standardization(obj, cObj); + if (obj.dataType === 'json' || obj.dataType === 'text' || obj.dataType === 'html') { + var xhr = this.createXHR(); + callback = function() { + //判断http的交互是否成功 + if (xhr.status == 200) { + if (thisTemp.isUndefined(obj.success)) { + return; + } + if (obj.dataType === 'json') { + try { + obj.success(eval('(' + xhr.responseText + ')')); //回调传递参数 + } catch(event) { + obj.success(null); + } + } else { + obj.success(xhr.responseText); //回调传递参数 + } + } else { + thisTemp.eject(thisTemp.errorList[10], 'Ajax.status:' + xhr.status); + } + }; + obj.url = obj.url.indexOf('?') == -1 ? obj.url + '?rand=' + this.randomString(6) : obj.url; + obj.data = this.formatParams(obj.data); //通过params()将名值对转换成字符串 + if (obj.method === 'get' && !this.isUndefined(obj.data)) { + if (obj.data != '') { + if (obj.url.indexOf('?') == -1) { + obj.url += '?' + obj.data + } else { + obj.url += '&' + obj.data; + } + } + } + if (obj.async === true) { //true表示异步,false表示同步 + xhr.onreadystatechange = function() { + if (xhr.readyState == 4 && callback != null) { //判断对象的状态是否交互完成 + callback(); //回调 + } + }; + } + xhr.open(obj.method, obj.url, obj.async); + if (obj.method === 'post') { + xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); + xhr.setRequestHeader('charset', obj['charset']); + xhr.send(obj.data); + } else { + xhr.send(null); //get方式则填null + } + if (obj.async === false) { //同步 + callback(); + } + + } else if (obj.dataType === 'jsonp') { + var oHead = document.getElementsByTagName('head')[0]; + var oScript = document.createElement('script'); + var callbackName = 'callback' + new Date().getTime(); + var params = this.formatParams(obj.data) + '&callback=' + callbackName; //按时间戳拼接字符串 + callback = obj.success; + //拼接好src + oScript.src = obj.url.split('?') + '?' + params; + //插入script标签 + oHead.insertBefore(oScript, oHead.firstChild); + //jsonp的回调函数 + window[callbackName] = function(json) { + callback(json); + oHead.removeChild(oScript); + }; + } + }, + /* + 内置函数 + 动态加载js + */ + loadJs: function(path, success) { + var oHead = document.getElementsByTagName('HEAD').item(0); + var oScript = document.createElement('script'); + oScript.type = 'text/javascript'; + oScript.src = this.getNewUrl(path); + oHead.appendChild(oScript); + oScript.onload = function() { + success(); + } + }, + /* + 共用函数 + 排除IE6-9 + */ + isMsie: function() { + var browser = navigator.appName; + var b_version = navigator.appVersion; + var version = b_version.split(';'); + var trim_Version = ''; + if (version.length > 1) { + trim_Version = version[1].replace(/[ ]/g, ''); + } + if (browser == 'Microsoft Internet Explorer' && (trim_Version == 'MSIE6.0' || trim_Version == 'MSIE7.0' || trim_Version == 'MSIE8.0' || trim_Version == 'MSIE9.0' || trim_Version == 'MSIE10.0')) { + return false; + } + return true; + }, + /* + 共用函数 + 判断是否安装了flashplayer + */ + uploadFlash: function() { + var swf; + if (navigator.userAgent.indexOf('MSIE') > 0) { + try { + var swf = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + return true; + } catch(e) { + return false; + } + } + if (navigator.userAgent.indexOf('Firefox') > 0) { + swf = navigator.plugins['Shockwave Flash']; + if (swf) { + return true + } else { + return false; + } + } + return true; + }, + /* + 共用函数 + 检测浏览器是否支持HTML5-Video + */ + supportVideo: function() { + if (!this.isMsie()) { + return false; + } + if ( !! document.createElement('video').canPlayType) { + var vidTest = document.createElement('video'); + var oggTest; + try { + oggTest = vidTest.canPlayType('video/ogg; codecs="theora, vorbis"'); + } catch(error) { + oggTest = false; + } + if (!oggTest) { + var h264Test; + try { + h264Test = vidTest.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"'); + } catch(error) { + h264Test = false; + } + if (!h264Test) { + return false; + } else { + if (h264Test == "probably") { + return true; + } else { + return false; + } + } + } else { + if (oggTest == "probably") { + return true; + } else { + return false; + } + } + } else { + return false; + } + }, + /* + 共用函数 + 获取属性值 + */ + getDataset: function(ele, z) { + try { + return ele.dataset[z]; + } catch(error) { + try { + return ele.getAttribute('data-' + z) + } catch(error) { + return false; + } + } + }, + /* + 共用函数 + 返回flashplayer的对象 + */ + getObjectById: function(id) { + var x = null; + var y = this.getByElement('#' + id); + var r = 'embed'; + if (y && y.nodeName == 'OBJECT') { + if (typeof(y.SetVariable) != 'undefined') { + x = y; + } else { + var z = y.getElementsByTagName(r)[0]; + if (z) { + x = z; + } + } + } + return x; + }, + /* + 共用函数 + 对象转地址字符串 + */ + formatParams: function(data) { + var arr = []; + for (var i in data) { + arr.push(encodeURIComponent(i) + '=' + encodeURIComponent(data[i])); + } + return arr.join('&'); + }, + /* + 内置函数 + 对地址进行冒泡排序 + */ + arrSort: function(arr) { + var temp = []; + for (var i = 0; i < arr.length; i++) { + for (var j = 0; j < arr.length - i; j++) { + if (!this.isUndefined(arr[j + 1]) && arr[j][3] < arr[j + 1][3]) { + temp = arr[j + 1]; + arr[j + 1] = arr[j]; + arr[j] = temp; + } + } + } + return arr; + }, + /* + 内置函数 + 判断文件后缀 + */ + getFileExt: function(filepath) { + if (filepath != '' && !this.isUndefined(filepath)) { + if (filepath.indexOf('?') > -1) { + filepath = filepath.split('?')[0]; + } + var pos = '.' + filepath.replace(/.+\./, ''); + return pos.toLowerCase(); + } + return ''; + }, + /* + 内置函数 + 判断是否是移动端 + */ + isMobile: function() { + if (navigator.userAgent.match(/(iPhone|iPad|iPod|Android|ios)/i)) { + return true; + } + return false; + }, + /* + 内置函数 + 搜索字符串str是否包含key + */ + isContains: function(str, key) { + return str.indexOf(key) > -1; + }, + /* + 内置函数 + 给地址添加随机数 + */ + getNewUrl: function(url) { + if (this.isContains(url, '?')) { + return url += '&' + this.randomString(8) + '=' + this.randomString(8); + } else { + return url += '?' + this.randomString(8) + '=' + this.randomString(8); + } + }, + /* + 共用函数 + 获取clientX和clientY + */ + client: function(event) { + var eve = event || window.event; + if (this.isUndefined(eve)) { + eve = { + clientX: 0, + clientY: 0 + }; + } + return { + x: eve.clientX + (document.documentElement.scrollLeft || this.body.scrollLeft) - this.pdCoor['x'], + y: eve.clientY + (document.documentElement.scrollTop || this.body.scrollTop) - this.pdCoor['y'] + } + }, + /* + 内置函数 + 获取节点的绝对坐标 + */ + getCoor: function(obj) { + var coor = this.getXY(obj); + return { + x: coor['x'] - this.pdCoor['x'], + y: coor['y'] - this.pdCoor['y'] + }; + }, + getXY: function(obj) { + var parObj = obj; + var left = obj.offsetLeft; + var top = obj.offsetTop; + while (parObj = parObj.offsetParent) { + left += parObj.offsetLeft; + top += parObj.offsetTop; + } + return { + x: left, + y: top + }; + }, + /* + 内置函数 + 删除本对象的所有属性 + */ + removeChild: function() { + if (this.playerType == 'html5video') { + //删除计时器 + var i = 0; + var timerArr = [this.timerError, this.timerFull, this.timerTime, this.timerBuffer, this.timerClick, this.timerLoading, this.timerCBar, this.timerVCanvas]; + for (i = 0; i < timerArr.length; i++) { + if (timerArr[i] != null) { + if (timerArr[i].runing) { + timerArr[i].stop(); + } + timerArr[i] = null; + } + } + //删除事件监听 + var ltArr = this.listenerJsArr; + for (i = 0; i < ltArr.length; i++) { + this.removeListener(ltArr[i][0], ltArr[i][1]); + } + } + this.playerType == ''; + this.V = null; + if (this.showFace) { + this.deleteChild(this.CB['menu']); + } + this.deleteChild(this.PD); + this.CD.innerHTML = ''; + }, + /* + 内置函数 + 画封闭的图形 + */ + canvasFill: function(name, path) { + name.beginPath(); + for (var i = 0; i < path.length; i++) { + var d = path[i]; + if (i > 0) { + name.lineTo(d[0], d[1]); + } else { + name.moveTo(d[0], d[1]); + } + } + name.closePath(); + name.fill(); + }, + /* + 内置函数 + 画矩形 + */ + canvasFillRect: function(name, path) { + for (var i = 0; i < path.length; i++) { + var d = path[i]; + name.fillRect(d[0], d[1], d[2], d[3]); + } + }, + /* + 共用函数 + 删除容器节点 + */ + deleteChild: function(f) { + var def = this.arrIndexOf(this.elementArr, f.className); + if (def > -1) { + this.elementArr.splice(def, 1); + } + var childs = f.childNodes; + for (var i = childs.length - 1; i >= 0; i--) { + f.removeChild(childs[i]); + } + + if (f && f != null && f.parentNode) { + try { + if (f.parentNode) { + f.parentNode.removeChild(f); + + } + + } catch(event) {} + } + }, + /* + 内置函数 + 根据容器的宽高,内部节点的宽高计算出内部节点的宽高及坐标 + */ + getProportionCoor: function(stageW, stageH, vw, vh) { + var w = 0, + h = 0, + x = 0, + y = 0; + if (stageW / stageH < vw / vh) { + w = stageW; + h = w * vh / vw; + } else { + h = stageH; + w = h * vw / vh; + } + x = (stageW - w) * 0.5; + y = (stageH - h) * 0.5; + return { + width: parseInt(w), + height: parseInt(h), + x: parseInt(x), + y: parseInt(y) + }; + }, + /* + 共用函数 + 将字幕文件内容转换成数组 + */ + parseSrtSubtitles: function(srt) { + var subtitles = []; + var textSubtitles = []; + var i = 0; + var arrs = srt.split('\n'); + var arr = []; + var delHtmlTag = function(str) { + return str.replace(/<[^>]+>/g, ''); //去掉所有的html标记 + }; + for (i = 0; i < arrs.length; i++) { + if (arrs[i].replace(/\s/g, '').length > 0) { + arr.push(arrs[i]); + } else { + if (arr.length > 0) { + textSubtitles.push(arr); + } + arr = []; + } + } + for (i = 0; i < textSubtitles.length; ++i) { + var textSubtitle = textSubtitles[i]; + if (textSubtitle.length >= 2) { + var sn = textSubtitle[0]; // 字幕的序号 + var startTime = this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[0])); // 字幕的开始时间 + var endTime = this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[1])); // 字幕的结束时间 + var content = [delHtmlTag(textSubtitle[2])]; // 字幕的内容 + // 字幕可能有多行 + if (textSubtitle.length > 2) { + for (var j = 3; j < textSubtitle.length; j++) { + content.push(delHtmlTag(textSubtitle[j])); + } + } + // 字幕对象 + var subtitle = { + sn: sn, + startTime: startTime, + endTime: endTime, + content: content + }; + subtitles.push(subtitle); + } + } + return subtitles; + }, + /* + 共用函数 + 计时器,该函数模拟as3中的timer原理 + time:计时时间,单位:毫秒 + fun:接受函数 + number:运行次数,不设置则无限运行 + */ + timer: function(time, fun, number) { + var thisTemp = this; + this.time = 10; //运行间隔 + this.fun = null; //监听函数 + this.timeObj = null; //setInterval对象 + this.number = 0; //已运行次数 + this.numberTotal = null; //总至需要次数 + this.runing = false; //当前状态 + this.startFun = function() { + thisTemp.number++; + thisTemp.fun(); + if (thisTemp.numberTotal != null && thisTemp.number >= thisTemp.numberTotal) { + thisTemp.stop(); + } + }; + this.start = function() { + if (!thisTemp.runing) { + thisTemp.runing = true; + thisTemp.timeObj = window.setInterval(thisTemp.startFun, time); + } + }; + this.stop = function() { + if (thisTemp.runing) { + thisTemp.runing = false; + window.clearInterval(thisTemp.timeObj); + thisTemp.timeObj = null; + } + }; + if (time) { + this.time = time; + } + if (fun) { + this.fun = fun; + } + if (number) { + this.numberTotal = number; + } + this.start(); + }, + /* + 共用函数 + 将时分秒转换成秒 + */ + toSeconds: function(t) { + var s = 0.0; + if (t) { + var p = t.split(':'); + for (i = 0; i < p.length; i++) { + s = s * 60 + parseFloat(p[i].replace(',', '.')); + } + } + return s; + }, + /*将字符变成数字形式的数组*/ + arrayInt: function(str) { + var a = str.split(','); + var b = []; + for (var i = 0; i < a.length; i++) { + if (this.isUndefined(a[i])) { + a[i] = 0; + } + if (a[i].substr( - 1) != '%') { + a[i] = parseInt(a[i]); + } + b.push(a[i]); + } + return b; + }, + /* + 共用函数 + 将对象Object标准化 + */ + standardization: function(o, n) { //n替换进o + var h = {}; + var k; + for (k in o) { + h[k] = o[k]; + } + for (k in n) { + var type = typeof(h[k]); + switch (type) { + case 'number': + h[k] = parseFloat(n[k]); + break; + default: + h[k] = n[k]; + break; + } + + } + return h; + }, + /* + 共用函数 + 搜索数组 + */ + arrIndexOf: function(arr, key) { + var re = new RegExp(key, ['']); + return (arr.toString().replace(re, '┢').replace(/[^,┢]/g, '')).indexOf('┢'); + }, + /* + 共用函数 + 去掉空格 + */ + trim: function(str) { + if (str != '') { + return str.replace(/(^\s*)|(\s*$)/g, ''); + } + return ''; + }, + /* + 共用函数 + 输出内容到控制台 + */ + log: function(val) { + try { + console.log(val); + } catch(e) {} + }, + /* + 共用函数 + 弹出提示 + */ + eject: function(er, val) { + if (!this.vars['debug']) { + return; + } + var errorVal = er[1]; + if (!this.isUndefined(val)) { + errorVal = errorVal.replace('[error]', val); + } + var value = 'error ' + er[0] + ':' + errorVal; + try { + this.log(value); + } catch(e) {} + } + }; + window.ckplayer = ckplayer; +})(); diff --git a/demo/mask_detection/web/js/ckplayer/ckplayer.min.js b/demo/mask_detection/web/js/ckplayer/ckplayer.min.js new file mode 100644 index 0000000000000000000000000000000000000000..c9a33a83a00e1f8907f91b32eb4d2dd383e17ebe --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/ckplayer.min.js @@ -0,0 +1,110 @@ +/* + 软件名称:ckplayer + 软件版本:X + 软件作者:http://www.ckplayer.com + --------------------------------------------------------------------------------------------- + 开发说明: + 使用的主要程序语言:javascript(js)及actionscript3.0(as3.0)(as3.0主要用于flashplayer部分的开发,不在该页面呈现) + 功能:播放视频 + 特点:兼容HTML5-VIDEO(优先)以及FlashPlayer + ===================================================================================================================== +*/ +function ckplayerConfig() { + return { + flashvars: {}, + languagePath: '', + stylePath: '', + config: { + fullInteractive: true, + delay: 30, + timeFrequency: 100, + autoLoad: true, + loadNext: 0, + definition: true, + smartRemove: true, + bufferTime: 200, + click: true, + doubleClick: true, + doubleClickInterval: 200, + keyDown: { + space: true, + left: true, + right: true, + up: true, + down: true + }, + timeJump: 10, + volumeJump: 0.1, + timeScheduleAdjust: 1, + previewDefaultLoad: true, + promptSpotTime: false, + buttonMode: { + player: false, + controlBar: false, + timeSchedule: true, + volumeSchedule: true + }, + liveAndVod: { + open: false, + vodTime: 2, + start: 'start' + }, + errorNum: 3, + playCorrect: false, + timeCorrect: true, + m3u8Definition: {}, + m3u8MaxBufferLength: 30, + split: '|', + timeStamp: '', + mobileVolumeBarShow: false, + addCallback: 'adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,elementShow,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc,changeDefinition' + }, + menu: { + ckkey: '', + name: '', + link: '', + version: '', + domain: '', + more: [] + }, + style: { + loading: { + file: 'data:image/swf;base64,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', + align: 'center', + vAlign: 'middle', + offsetX: -100, + offsetY: -40 + }, + logo: { + file: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFcAAAAUCAYAAAD4BKGuAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAVTSURBVHja1Fl/aJVVGP4cw/mH5tUWi3I53cA0WbeIzMgaq6lQoVawm0S6glHhIKM/TELICotqCxMSGWQRdFfRLEhc9mMxqA0rbdS2wsV0GkZXuaKUWlHvgeeNh7f3u1du3Ft74eGcnXu+c873vD/Pt0nZbDZyZL2gWZAQTBH8IjggeEjgPZASPIB+g/P7EsGT6J/BfHfjHFIv2Jpjj/+dlDskvCm42Jk7X3C7YJOgw/z2oOBGwdEYRW0RVAjOCZ4ugNggqwU3CTLRBJFyQ+xuwVRY14igB78tE9QKpgmeEHwkGKRnq9AeMesHRWwEsYGUxwSdBZ51ecweE4Lct0DsOVjaZvptA8jfC4JfghWpXIJ2jMY+EDShf1pwh6DvX5x1GtpDE43cNFlfhyFWpQ9xd5FgFo3fRi++C+2nCBNBRgU3O6RsEyyEQv4QLMb4CcE9RlFBLqS1WZ6BZ83A35ofVhuvfE5QJrjWebdgCJOx51qM1QgewbMzsO57MDQrB9DeC8ObHd5Xyb2eiNiQQxmtgkZBr+OuZwV7BIcF1RgbF1wTE2MbEccX48VY9sMzBilhTke/m+b1Q9lefpgruI7OsYhIGzPJuAnn3+6EM7vu1YKl5vkrYRSfCGZivCxoMklk7M5j6eFlXyRNRSAvAoFf0Fo/CC7LkbwuQjsZsf0qwbuI9wlYgIqGl6NEzDYibJ/gbmAfxpKoMDRcaSK8xZzjZbK+NMhSYoNSngV5e+ksKXp+JdqZwDDmdpSbsqa9gNAyi5JalSGv3iQ+dtNK9HvI+sNBh2AhvNYVaH+msRtAdsa4ehoKCuQsoP2PY8+kCSkJ5IRWjD2FZ4/BOFSWYv9KhI40eUKQ31CqdnLM1c1OOnHufKSS+iEZvgHNhji8g1yT5VZKdCnHO+ajvrYK/I7GkuSWjwvq8Mzl5M79NF89aCHaBNXmWv0sQVUUZEDwsDnbr2i9s31lKyGuFs7kITEBC+snJaToRYIFrRN0CeYgoSUxJ23WUm85eB41b4IUuIvGtyIMVMY8lzHGMoYworF7J/onKYk10/wVQL6zXYr+Zq9aOEhuXZPDel8Q3If+HMzTeHPKlForEK+mws3SMfH2UMxNLIJbasKsoIQZwVLbKFkN4T1C3HxUMM+EkCAfgjwNV40Y304KriOP+jIHqa+jvYsqnH/kqzKaGCFZxWnoTqooxky8+dHUsOGwr6Jfi9jmlVVTHGLnot9L3qGWqCToWYYRF5fDa96mtb93yI2g8B0IWxlTHWmi/hOG00D4mEJfJ5WhQX7ySCsDUaNkJeud6+sgXCgs3OLEG2/xdZSh10JBeiB1zQU0HuQdSib60rOdm9kFToIL8hmFiRHzm1YM0ylet5k579OFpcUk4I0oD0/QuJ7tcBy5ERY6ixdrh5uNwN3bUV7pd4E+J958HmPxbRRydqK/in6vxj5aH9din/udEPKtuU1GqBL24xJwBInQWiHLcbQVKBXTzkVpHP0tWHsIpZUqPeWcrScXuX2ImRkqlufBhdQl15ig3WLKH0/SeAmtD+uprBqGx1ThhlWN5LKG4lcNKbDblFDjVDU0wWK7yLLqnPNk6cKzKsfXt1GQmQQXSuwymhd3tr9lkvPJMUV152kc2PsmUEMxtzdPRk2SNX2DQ3Vhr02Is18LXjHVAz/bG0NEK8johus3UBiwyfkYlDkQUyLaWrwZBrbHMaB8Z3PJLaYk8IIVKKPSJdxbv3ecynNzLNr33GKLV1YVW4IyfycXfq0UxP4X5HJdXCqX4Wv0AKqYkkipw4LG6WxMNi+GhAtH+M/K8wVe7wuWvwQYAFT+UsGCXmX3AAAAAElFTkSuQmCC', + align: 'right', + vAlign: 'top', + offsetX: -100, + offsetY: 10 + }, + advertisement: { + time: 5, + method: 'get', + videoForce: false, + videoVolume: 0.8, + skipButtonShow: true, + linkButtonShow: true, + muteButtonShow: true, + closeButtonShow: true, + closeOtherButtonShow: true, + frontSkipButtonDelay: 1, + insertSkipButtonDelay: 0, + endSkipButtonDelay: 0, + frontStretched: 2, + insertStretched: 2, + pauseStretched: 2, + endStretched: 2 + }, + video: { + defaultWidth: 4, + defaultHeight: 3 + } + } + } +} +!(function(){var javascriptPath='';!function(){var scriptList=document.scripts,thisPath=scriptList[scriptList.length-1].src;javascriptPath=thisPath.substring(0,thisPath.lastIndexOf('/')+1)}();var ckplayer=function(obj){this.config={videoDbClick:true,errorTime:100,videoDrawImage:false,adSkipClick:'javaScript->adjump'};this.varsConfig={playerID:'',container:'',variable:'ckplayer',volume:0.8,poster:'',autoplay:false,loop:false,live:false,duration:0,seek:0,drag:'',front:'',next:'',loaded:'',flashplayer:false,html5m3u8:false,track:null,cktrack:null,preview:null,prompt:null,video:null,config:'',type:'',crossorigin:'',crossdomain:'',unescape:false,mobileCkControls:false,mobileAutoFull:false,playbackrate:1,h5container:'',debug:false,adfront:'',adfronttime:'',adfrontlink:'',adpause:'',adpausetime:'',adpauselink:'',adinsert:'',adinserttime:'',adinsertlink:'',inserttime:'',adend:'',adendtime:'',adendlink:'',advertisements:''};this.vars={};this.language={volume:'音量:',play:'点击播放',pause:'点击暂停',full:'点击全屏',escFull:'退出全屏',mute:'点击静音',escMute:'取消静音',front:'上一集',next:'下一集',definition:'点击选择清晰度',playbackRate:'点击选择速度',error:'加载出错',adTime:'广告{$second}秒',skipAd:'跳过广告',skipAdTime:'{$second}秒后可跳过广告',adLink:'查看详情'};this.contextMenu=[['ckplayer','link','http://www.ckplayer.com','_blank'],['version:X','default','line']];this.errorList=[['000','Object does not exist'],['001','Variables type is not a object'],['002','Video object does not exist'],['003','Video object format error'],['004','Video object format error'],['005','Video object format error'],['006','[error] does not exist '],['007','Ajax error'],['008','Ajax error'],['009','Ajax object format error'],['010','Ajax.status:[error]']];this.playbackRateArr=[[0.5,'0.5倍'],[1,'正常'],[1.25,'1.25倍'],[1.5,'1.5倍'],[2,'2倍速'],[4,'4倍速']];this.playbackRateDefault=1;this.logo='';this.loaded=false;this.timerError=null;this.error=false;this.errorUrl=[];this.timerFull=null;this.full=false;this.timerTime=null;this.timerBuffer=null;this.isTimeButtonMove=true;this.isTimeButtonDown=false;this.isClick=false;this.timerClick=null;this.timerLoading=null;this.timerCBar=null;this.needSeek=0;this.volume=0;this.volumeTemp=0;this.time=0;this.isFirst=true;this.html5Video=true;this.pdCoor={x:0,y:0};this.playerType='';this.loadTime=0;this.body=document.body||document.documentElement;this.V=null;this.listenerJsArr=[];this.buttonLen=0;this.buttonArr=[];this.buttonWidth={};this.elementArr=[];this.elementTempArr=[];this.track=[];this.trackIndex=0;this.nowTrackShow={sn:''};this.trackElement=[];this.timerVCanvas=null;this.animateArray=[];this.animateElementArray=[];this.animatePauseArray=[];this.previewStart=0;this.previewDiv=null;this.previewTop=null;this.previewWidth=120;this.previewTween=null;this.isM3u8=false;this.promptArr=[];this.promptElement=null;this.ckplayerConfig={};this.showFace=true;this.errorAdd=false;this.errorSend=false;this.controlBarIsShow=true;this.videoScale=1;this.fontFamily='"Microsoft YaHei"; YaHei; "\5FAE\8F6F\96C5\9ED1"; SimHei; "\9ED1\4F53";Arial';this.timeSliderLeftTemp=0;this.durationSendJS=false;this.adAnalysisEnd=false;this.advertisements={};this.isFirstTimePlay=true;this.adType='';this.adI=0;this.videoTemp={src:'',source:'',currentSrc:'',loop:false};this.adTimeAllTotal=0;this.adTimeTotal=0;this.adCountDownObj=null;this.adPlayStart=false;this.adPlayerPlay=false;this.adIsPause=false;this.adVideoMute=false;this.adIsVideoTime=false;this.endAdPlay=false;this.adPauseShow=false;this.adReset=false;this.adVideoPlay=false;if(obj){this.embed(obj)}};ckplayer.prototype={embed:function(c){if(window.location.href.substr(0,7)=='file://'){alert('Please use the HTTP protocol to open the page');return}if(c==undefined||!c){this.eject(this.errorList[0]);return}if(typeof(c)!='object'){this.eject(this.errorList[1])}this.vars=this.standardization(this.varsConfig,c);if(!this.vars['mobileCkControls']&&this.isMobile()){this.vars['flashplayer']=false;this.showFace=false}var videoString=this.vars['video'];if(!videoString){this.eject(this.errorList[2]);return}if(typeof(videoString)=='string'){if(videoString.substr(0,3)=='CK:'||videoString.substr(0,3)=='CE:'||videoString.substr(8,3)=='CK:'||videoString.substr(8,3)=='CE:'){this.vars['flashplayer']=true}}if(typeof(videoString)=='object'){if(videoString.length>1){if(videoString[0][0].substr(0,3)=='CK:'||videoString[0][0].substr(0,3)=='CE:'||videoString[0][0].substr(8,3)=='CK:'||videoString[0][0].substr(8,3)=='CE:'){this.vars['flashplayer']=true}}}if(this.vars['config']){this.ckplayerConfig=eval(this.vars['config']+'()')}else{this.ckplayerConfig=ckplayerConfig()}if((!this.supportVideo()&&this.vars['flashplayer']!='')||(this.vars['flashplayer']&&this.uploadFlash())||!this.isMsie()){this.html5Video=false;this.getVideo()}else if(videoString){this.analysedVideoUrl(videoString);return this}else{this.eject(this.errorList[2])}},analysedVideoUrl:function(video){var i=0,y=0;var thisTemp=this;this.VA=[];if(typeof(video)=='string'){if(video.substr(0,8)!='website:'){this.VA=[[video,'','',0]];var fileExt=this.getFileExt(video);switch(fileExt){case'.mp4':this.VA[0][1]='video/mp4';break;case'.ogg':this.VA[0][1]='video/ogg';break;case'.webm':this.VA[0][1]='video/webm';break;default:break}this.getVideo()}else{if(this.html5Video){var ajaxObj={url:video.substr(8),success:function(data){if(data){thisTemp.analysedUrl(data)}else{thisTemp.eject(thisTemp.errorList[5]);this.VA=video;thisTemp.getVideo()}}};this.ajax(ajaxObj)}else{this.VA=video;this.getVideo()}}}else if(typeof(video)=='object'){if(!this.isUndefined(typeof(video.length))){if(!this.isUndefined(typeof(video[0].length))){this.VA=video}this.getVideo()}else{if(!this.isUndefined(video['type'])){this.VA.push([video['file'],video['type'],'',0]);this.getVideo()}else{this.eject(this.errorList[5])}}}else{this.eject(this.errorList[4])}},analysedUrl:function(data){this.vars=this.standardization(this.vars,data);if(!this.isUndefined(data['video'])){this.vars['video']=data['video']}this.analysedVideoUrl(this.vars['video'])},getHtml5Video:function(){var va=this.VA;var nva=[];var mobile=false;var video=document.createElement('video');var codecs=function(type){var cod='';switch(type){case'video/mp4':cod='avc1.4D401E, mp4a.40.2';break;case'video/ogg':cod='theora, vorbis';break;case'video/webm':cod='vp8.0, vorbis';break;default:break}return cod};var supportType=function(vidType,codType){if(!video.canPlayType){this.html5Video=false;return}var isSupp=video.canPlayType(vidType+';codecs="'+codType+'"');if(isSupp==''){return false}return true};if(this.vars['flashplayer']||!this.isMsie()){this.html5Video=false;return}if(this.isMobile()){mobile=true}for(var i=0;i0){this.VA=nva}else{if(!mobile){this.html5Video=false}}},getVideo:function(){var thisTemp=this;var v=this.vars;if(!this.adAnalysisEnd&&(v['adfront']!=''||v['adpause']!=''||v['adinsert']!=''||v['adend']!=''||v['advertisements']!='')){this.adAnalysisEnd=true;this.adAnalysis();return}if(this.V){this.changeVideo();return}if(this.vars['cktrack']){this.loadTrack()}if(this.supportVideo()&&!this.vars['flashplayer']){this.getHtml5Video()}var src='',source='',poster='',loop='',autoplay='',track='';var video=v['video'];var i=0;this.CD=this.getByElement(v['container']);volume=v['volume'];if(!this.CD){this.eject(this.errorList[6],v['container']);return false}this.V=undefined;var thisPd=null;if(v['h5container']!=''){thisPd=this.getByElement(v['h5container']);if(this.isUndefined(thisPd)){thisPd=null}}var isVideoH5=null;if(v['playerID']!=''){isVideoH5=this.getByElement('#'+v['playerID']);if(this.isUndefined(isVideoH5)){isVideoH5=null}}if(thisPd!=null&&isVideoH5!=null){this.PD=thisPd}else{var playerID='ckplayer'+this.randomString();var playerDiv=document.createElement('div');playerDiv.className=playerID;this.CD.innerHTML='';this.CD.appendChild(playerDiv);this.PD=this.getByElement(playerID)}this.css(this.CD,{backgroundColor:'#000000',overflow:'hidden',position:'relative'});this.css(this.PD,{backgroundColor:'#000000',width:'100%',height:'100%',fontFamily:this.fontFamily});if(this.html5Video){this.PD.onselectstart=this.PD.ondrag=function(){return false};if(this.VA.length==1){this.videoTemp['src']=decodeURIComponent(this.VA[0][0]);src=' src="'+this.videoTemp['src']+'"'}else{var videoArr=this.VA.slice(0);videoArr=this.arrSort(videoArr);for(i=0;i'}this.videoTemp['source']=source}if(v['autoplay']){autoplay=' autoplay="autoplay"'}if(v['poster']){poster=' poster="'+v['poster']+'"'}if(v['loop']){loop=' loop="loop"'}if(v['seek']>0){this.needSeek=v['seek']}if(v['track']!=null&&v['cktrack']==null){var trackArr=v['track'];var trackDefault='';var defaultHave=false;for(i=0;i'}}var autoLoad=this.ckplayerConfig['config']['autoLoad'];var preload='';if(!autoLoad){preload=' preload="meta"'}var vid=this.randomString();var controls='';if(!this.showFace){controls=' controls="controls"'}var mobileAutoFull=v['mobileAutoFull'];var mobileautofull='';if(!mobileAutoFull){mobileautofull=' x-webkit-airplay="true" playsinline webkit-playsinline="true" x5-video-player-type="h5"'}if(isVideoH5!=null&&thisPd!=null){this.V=isVideoH5;if(v['poster']){this.V.poster=v['poster']}}else{var html='';if(!this.isM3u8){html=''}else{html=''}this.PD.innerHTML=html;this.V=this.getByElement('#'+vid)}if(this.vars['crossorigin']){this.V.crossOrigin=this.vars['crossorigin']}try{this.V.volume=volume;if(this.playbackRateArr&&this.vars['playbackrate']>-1){if(this.vars['playbackrate']-1){this.playbackRate()}if(v['autoplay']){this.loadingStart(true)}}this.playerLoad()}else{this.embedSWF()}},arrayDel:function(arr){if(arr.length==0){return null}var newArr=[];for(var i=0;i0){return newArr}return null},adAnalysis:function(){var thisTemp=this;var v=this.vars;var isAdvShow=[];var i=0;if(v['advertisements']!=''&&v['advertisements'].substr(0,8)=='website:'){var ajaxObj={url:v['advertisements'].substr(8),success:function(data){if(data){var newData={};var val=null;try{if(!thisTemp.isUndefined(data['front'])){val=thisTemp.arrayDel(data['front']);if(!thisTemp.isUndefined(val)){newData['front']=val}val=thisTemp.arrayDel(data['pause']);if(!thisTemp.isUndefined(val)){newData['pause']=val}val=thisTemp.arrayDel(data['insert']);if(!thisTemp.isUndefined(val)){newData['insert']=val;if(!thisTemp.isUndefined(data['inserttime'])){newData['inserttime']=thisTemp.arrayInt(data['inserttime']);isAdvShow=[];for(i=0;i0){var adLinkLen=adlink.length,adTimeLen=adtime.length;if(v[adLink]==''){adLinkLen=0;adlink=[]}if(v[adTime]==''){adTimeLen=0;adtime=[]}if(adLinkLen0?parseInt(adtime[i]):this.ckplayerConfig['style']['advertisement']['time'],link:adlink[i]};adList.push(obj)}}if(this.isUndefined(this.advertisements)){this.advertisements={}}if(adList.length>0){this.advertisements[adType]=adList}}}},playerLoad:function(){var thisTemp=this;if(this.isFirst){this.isFirst=false;setTimeout(function(){thisTemp.loadedHandler()},1)}},addVEvent:function(){var thisTemp=this;var eventVideoClick=function(event){thisTemp.videoClick()};this.addListenerInside('click',eventVideoClick);this.addListenerInside('click',eventVideoClick,this.MDC);this.timerErrorFun();var eventJudgeIsLive=function(event){thisTemp.sendJS('loadedmetadata');if(typeof(thisTemp.V.duration)=='number'&&thisTemp.V.duration>1){thisTemp.sendJS('duration',thisTemp.V.duration);thisTemp.formatInserttime(thisTemp.V.duration);if(thisTemp.adPlayerPlay){thisTemp.advertisementsTime(thisTemp.V.duration+1)}thisTemp.durationSendJS=true}thisTemp.judgeIsLive()};this.addListenerInside('loadedmetadata',eventJudgeIsLive);var eventPlaying=function(event){thisTemp.playingHandler();thisTemp.sendJS('play');thisTemp.sendJS('paused',false);if(!thisTemp.durationSendJS&&typeof(thisTemp.V.duration)=='number'&&thisTemp.V.duration>0){thisTemp.durationSendJS=true;thisTemp.sendJS('duration',thisTemp.V.duration);thisTemp.formatInserttime(thisTemp.V.duration)}};this.addListenerInside('playing',eventPlaying);var eventPause=function(event){thisTemp.pauseHandler();thisTemp.sendJS('pause');thisTemp.sendJS('paused',true)};this.addListenerInside('pause',eventPause);var eventEnded=function(event){thisTemp.endedHandler()};this.addListenerInside('ended',eventEnded);var eventTimeupdate=function(event){if(thisTemp.timerLoading!=null){thisTemp.loadingStart(false)}if(thisTemp.time){if(!thisTemp.adPlayerPlay){thisTemp.sendJS('time',thisTemp.time);if(!thisTemp.isUndefined(thisTemp.advertisements['insert'])){thisTemp.checkAdInsert(thisTemp.time)}if(!thisTemp.isUndefined(thisTemp.advertisements['other'])){thisTemp.checkAdOther(thisTemp.time)}if(thisTemp.time<3&&thisTemp.adReset){thisTemp.adReset=false;thisTemp.endedAdReset()}}else{thisTemp.adPlayerTimeHandler(thisTemp.time)}}};this.addListenerInside('timeupdate',eventTimeupdate);var eventWaiting=function(event){thisTemp.loadingStart(true)};this.addListenerInside('waiting',eventWaiting);var eventSeeking=function(event){thisTemp.sendJS('seek','start')};this.addListenerInside('seeking',eventSeeking);var eventSeeked=function(event){thisTemp.seekedHandler();thisTemp.sendJS('seek','ended')};this.addListenerInside('seeked',eventSeeked);var eventVolumeChange=function(event){try{thisTemp.volumechangeHandler();thisTemp.sendJS('volume',thisTemp.volume||thisTemp.V.volume)}catch(event){}};this.addListenerInside('volumechange',eventVolumeChange);var eventFullChange=function(event){var fullState=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen;thisTemp.sendJS('full',fullState)};this.addListenerInside('fullscreenchange',eventFullChange);this.addListenerInside('webkitfullscreenchange',eventFullChange);this.addListenerInside('mozfullscreenchange',eventFullChange);if(this.showFace){this.interFace()}},resetPlayer:function(){this.timeTextHandler();if(this.showFace){this.timeProgress(0,1);this.changeLoad(0);this.initPlayPause();this.definition();this.showFrontNext();this.deletePrompt();this.deletePreview();this.trackHide();this.resetTrack();this.trackElement=[];this.track=[]}},interFace:function(){this.showFace=true;var thisTemp=this;var html='';var i=0;var bWidth=38,bHeight=38;var bBgColor='#FFFFFF',bOverColor='#0782F5';var timeInto=this.formatTime(0)+' / '+this.formatTime(this.vars['duration']);var randomS=this.randomString(10);var controlBarBgID='controlbgbar'+randomS,controlBarID='controlbar'+randomS,timeProgressBgID='timeprogressbg'+randomS,loadProgressID='loadprogress'+randomS,timeProgressID='timeprogress'+randomS,timeBOBGID='timebobg'+randomS,timeBOID='timebo'+randomS,timeBWID='timebw'+randomS,timeTextID='timetext'+randomS,playID='play'+randomS,pauseID='pause'+randomS,frontID='front'+randomS,nextID='next'+randomS,fullID='full'+randomS,escFullID='escfull'+randomS,muteID='mute'+randomS,escMuteID='escmute'+randomS,volumeID='volume'+randomS,volumeDbgID='volumedbg'+randomS,volumeBgID='volumebg'+randomS,volumeUpID='volumeup'+randomS,volumeBOID='volumebo'+randomS,volumeBWID='volumebw'+randomS,definitionID='definition'+randomS,definitionPID='definitionp'+randomS,playbackRateID='playbackrate'+randomS,playbackRatePID='playbackratep'+randomS,promptBgID='promptbg'+randomS,promptID='prompt'+randomS,dlineID='dline'+randomS,menuID='menu'+randomS,pauseCenterID='pausecenter'+randomS,loadingID='loading'+randomS,errorTextID='errortext'+randomS,logoID='logo'+randomS,adBackgroundID='background'+randomS,adElementID='adelement'+randomS,adBarID='adBar'+randomS,adSkipID='adskip'+randomS,adTimeID='adtime'+randomS,adLinkID='adlink'+randomS,adMuteID='admute'+randomS,adEscMuteID='adescmute'+randomS,adPauseCloseID='adpauseclose'+randomS;var controlBarBg=document.createElement('div'),controlBar=document.createElement('div'),timeProgressBg=document.createElement('div'),timeBoBg=document.createElement('div'),pauseCenter=document.createElement('div'),errorText=document.createElement('div'),promptBg=document.createElement('div'),prompt=document.createElement('div'),menuDiv=document.createElement('div'),definitionP=document.createElement('div'),playbackrateP=document.createElement('div'),loading=document.createElement('div'),logo=document.createElement('div'),adBackground=document.createElement('div'),adElement=document.createElement('div'),adBar=document.createElement('div'),adLink=document.createElement('div'),adPauseClose=document.createElement('div');controlBarBg.className=controlBarBgID;controlBar.className=controlBarID;timeProgressBg.className=timeProgressBgID;timeBoBg.className=timeBOBGID;promptBg.className=promptBgID;prompt.className=promptID;menuDiv.className=menuID;definitionP.className=definitionPID;playbackrateP.className=playbackRatePID;pauseCenter.className=pauseCenterID;loading.className=loadingID;logo.className=logoID;errorText.className=errorTextID;adBackground.className=adBackgroundID;adElement.className=adElementID;adBar.className=adBarID;adLink.className=adLinkID;adPauseClose.className=adPauseCloseID;this.PD.appendChild(controlBarBg);this.PD.appendChild(controlBar);this.PD.appendChild(timeProgressBg);this.PD.appendChild(timeBoBg);this.PD.appendChild(promptBg);this.PD.appendChild(prompt);this.PD.appendChild(definitionP);this.PD.appendChild(playbackrateP);this.PD.appendChild(pauseCenter);this.PD.appendChild(loading);this.PD.appendChild(errorText);this.PD.appendChild(logo);this.PD.appendChild(adBackground);this.PD.appendChild(adElement);this.PD.appendChild(adBar);this.PD.appendChild(adLink);this.PD.appendChild(adPauseClose);this.body.appendChild(menuDiv);if(this.vars['live']){timeInto=this.getNowDate()}html+='
'+this.newCanvas(playID,bWidth,bHeight)+'
';html+='
'+this.newCanvas(pauseID,bWidth,bHeight)+'
';html+='
';html+='
'+this.newCanvas(frontID,bWidth,bHeight)+'
';html+='
';html+='
'+this.newCanvas(nextID,bWidth,bHeight)+'
';html+='
';html+='
'+timeInto+'
';html+='
'+this.newCanvas(fullID,bWidth,bHeight)+'
';html+='
'+this.newCanvas(escFullID,bWidth,bHeight)+'
';html+='
';html+='
';html+='
';html+='
';html+='
';html+='
';html+='
'+this.newCanvas(muteID,bWidth,bHeight)+'
';html+='
'+this.newCanvas(escMuteID,bWidth,bHeight)+'
';html+='
';this.getByElement(controlBarID).innerHTML=html;this.getByElement(timeProgressBgID).innerHTML='
';this.getByElement(timeBOBGID).innerHTML='
';this.getByElement(pauseCenterID).innerHTML=this.newCanvas(pauseCenterID,80,80);this.getByElement(loadingID).innerHTML=this.newCanvas(loadingID,60,60);this.getByElement(errorTextID).innerHTML=this.language['error'];html='
'+this.language['adTime'].replace('{$second}',0)+'
';html+='
'+this.newCanvas(adMuteID,30,30)+'
';html+='
'+this.newCanvas(adEscMuteID,30,30)+'
';html+='
';this.getByElement(adBarID).innerHTML=html;this.getByElement(adLinkID).innerHTML=this.language['adLink'];this.getByElement(adPauseCloseID).innerHTML=this.newCanvas(adPauseCloseID,20,20);if(this.ckplayerConfig['style']['logo']){if(this.ckplayerConfig['style']['logo']['file']){var logoFile=this.ckplayerConfig['style']['logo']['file'];if(logoFile.substr(0,15)=='data:image/png;'||logoFile.substr(0,15)=='data:image/jpg;'||logoFile.substr(0,16)=='data:image/jpeg;'){this.getByElement(logoID).innerHTML=''}}}else{this.getByElement(logoID).innerHTML=this.vars['logo']||this.logo||''}var pd=this.PD;this.CB={controlBarBg:this.getByElement(controlBarBgID,pd),controlBar:this.getByElement(controlBarID,pd),promptBg:this.getByElement(promptBgID,pd),prompt:this.getByElement(promptID,pd),timeProgressBg:this.getByElement(timeProgressBgID,pd),loadProgress:this.getByElement(loadProgressID,pd),timeProgress:this.getByElement(timeProgressID,pd),timeBoBg:this.getByElement(timeBOBGID,pd),timeButton:this.getByElement(timeBOID,pd),timeText:this.getByElement(timeTextID,pd),play:this.getByElement(playID,pd),front:this.getByElement(frontID,pd),next:this.getByElement(nextID,pd),pause:this.getByElement(pauseID,pd),definition:this.getByElement(definitionID,pd),definitionP:this.getByElement(definitionPID,pd),definitionLine:this.getByElement(dlineID+'-rb',pd),playbackrate:this.getByElement(playbackRateID,pd),playbackrateP:this.getByElement(playbackRatePID,pd),playbackrateLine:this.getByElement(dlineID+'-rc',pd),full:this.getByElement(fullID,pd),escFull:this.getByElement(escFullID,pd),mute:this.getByElement(muteID,pd),escMute:this.getByElement(escMuteID,pd),volume:this.getByElement(volumeID,pd),volumeBg:this.getByElement(volumeBgID,pd),volumeUp:this.getByElement(volumeUpID,pd),volumeBO:this.getByElement(volumeBOID,pd),pauseCenter:this.getByElement(pauseCenterID,pd),menu:this.getByElement(menuID),loading:this.getByElement(loadingID,pd),loadingCanvas:this.getByElement(loadingID+'-canvas',pd),errorText:this.getByElement(errorTextID,pd),logo:this.getByElement(logoID,pd),playLine:this.getByElement(dlineID+'-la',pd),frontLine:this.getByElement(dlineID+'-lb',pd),nextLine:this.getByElement(dlineID+'-lc',pd),fullLine:this.getByElement(dlineID+'-ra'),definitionLine:this.getByElement(dlineID+'-rb',pd),muteLine:this.getByElement(dlineID+'-rd',pd),adBackground:this.getByElement(adBackgroundID,pd),adElement:this.getByElement(adElementID,pd),adBar:this.getByElement(adBarID,pd),adSkip:this.getByElement(adSkipID,pd),adTime:this.getByElement(adTimeID,pd),adLink:this.getByElement(adLinkID,pd),adMute:this.getByElement(adMuteID,pd),adEscMute:this.getByElement(adEscMuteID,pd),adPauseClose:this.getByElement(adPauseCloseID,pd)};this.buttonWidth={play:bWidth,full:bWidth,front:bWidth,next:bWidth,mute:bWidth};this.css(controlBarBgID,{width:'100%',height:bHeight+'px',backgroundColor:'#000000',position:'absolute',bottom:'0px',filter:'alpha(opacity:0.8)',opacity:'0.8',zIndex:'990'});this.css(controlBarID,{width:'100%',height:bHeight+'px',position:'absolute',bottom:'0px',zIndex:'990'});this.css(pauseCenterID,{width:'80px',height:'80px',borderRadius:'50%',position:'absolute',display:'none',cursor:'pointer',zIndex:'996'});this.css(loadingID,{width:'60px',height:'60px',position:'absolute',display:'none',zIndex:'996'});this.css(errorTextID,{width:'120px',height:'30px',lineHeight:'30px',color:'#FFFFFF',fontSize:'14px',textAlign:'center',position:'absolute',display:'none',zIndex:'101',cursor:'default',zIndex:'996'});this.css(logoID,{height:'30px',lineHeight:'30px',color:'#FFFFFF',fontFamily:'Arial',fontSize:'28px',textAlign:'center',position:'absolute',float:'left',left:'-1000px',top:'20px',zIndex:'996',filter:'alpha(opacity:0.8)',opacity:'0.8',cursor:'default'});this.css(this.CB['loadingCanvas'],{transform:'rotate(0deg)',msTransform:'rotate(0deg)',mozTransform:'rotate(0deg)',webkitTransform:'rotate(0deg)',oTransform:'rotate(0deg)'});this.css([promptBgID,promptID],{height:'30px',lineHeight:'30px',color:'#FFFFFF',fontSize:'14px',textAlign:'center',position:'absolute',borderRadius:'5px',paddingLeft:'5px',paddingRight:'5px',bottom:'0px',display:'none',zIndex:'995'});this.css(promptBgID,{backgroundColor:'#000000',filter:'alpha(opacity:0.5)',opacity:'0.5'});this.css(timeProgressBgID,{width:'100%',height:'6px',backgroundColor:'#3F3F3F',overflow:'hidden',position:'absolute',bottom:'38px',zIndex:'888'});this.css([loadProgressID,timeProgressID],{width:'1px',height:'6px',position:'absolute',bottom:'38px',top:'0px',zIndex:'991'});this.css(loadProgressID,'backgroundColor','#6F6F6F');this.css(timeProgressID,'backgroundColor',bOverColor);this.css(timeBOBGID,{width:'100%',height:'14px',overflow:'hidden',position:'absolute',bottom:'34px',cursor:'pointer',zIndex:'992'});this.css(timeBOID,{width:'14px',height:'14px',overflow:'hidden',borderRadius:'50%',backgroundColor:bBgColor,cursor:'pointer',position:'absolute',top:'0px',zIndex:'200'});this.css(timeBWID,{width:'8px',height:'8px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bOverColor,left:'3px',top:'3px'});this.css(timeTextID,{lineHeight:bHeight+'px',color:'#FFFFFF',fontFamily:'arial',fontSize:'16px',paddingLeft:'10px',float:'left',overflow:'hidden',cursor:'default'});this.css([dlineID+'-la',dlineID+'-lb',dlineID+'-lc',dlineID+'-ra',dlineID+'-rb',dlineID+'-rc',dlineID+'-rd'],{width:'0px',height:bHeight+'px',overflow:'hidden',borderLeft:'1px solid #303030',borderRight:'1px solid #151515',filter:'alpha(opacity:0.9)',opacity:'0.9'});this.css([dlineID+'-la',dlineID+'-lb',dlineID+'-lc'],'float','left');this.css([dlineID+'-ra',dlineID+'-rb',dlineID+'-rc',dlineID+'-rd'],'float','right');this.css([dlineID+'-lb',dlineID+'-lc',dlineID+'-rb',dlineID+'-rc'],'display','none');this.css([playID,pauseID,frontID,nextID],{width:bWidth+'px',height:bHeight+'px',float:'left',overflow:'hidden',cursor:'pointer'});this.css([frontID,nextID],'display','none');this.initPlayPause();this.css([muteID,escMuteID],{width:bWidth+'px',height:bHeight+'px',float:'right',overflow:'hidden',cursor:'pointer'});if(this.vars['volume']>0){this.css(escMuteID,'display','none')}else{this.css(muteID,'display','none')}if(!this.ckplayerConfig['config']['mobileVolumeBarShow']&&this.isMobile()){this.css([muteID,escMuteID,volumeID,volumeDbgID,dlineID+'-rd'],{display:'none'})}this.css([volumeID,volumeDbgID],{width:'110px',height:bHeight+'px',overflow:'hidden',float:'right'});this.css(volumeDbgID,{position:'absolute'});this.css([volumeBgID,volumeUpID],{width:'100px',height:'6px',overflow:'hidden',borderRadius:'5px',cursor:'pointer'});this.css(volumeBgID,{position:'absolute',top:'16px'});this.css(volumeBgID,'backgroundColor','#666666');this.css(volumeUpID,'backgroundColor',bOverColor);this.buttonWidth['volume']=100;this.css(volumeBOID,{width:'12px',height:'12px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bBgColor,top:'13px',left:'0px',cursor:'pointer'});this.css(volumeBWID,{width:'6px',height:'6px',overflow:'hidden',borderRadius:'50%',position:'absolute',backgroundColor:bOverColor,left:'3px',top:'3px'});this.css(definitionID,{lineHeight:bHeight+'px',color:'#FFFFFF',float:'right',fontSize:'14px',textAlign:'center',overflow:'hidden',display:'none',cursor:'pointer'});this.css(definitionPID,{lineHeight:(bHeight-8)+'px',color:'#FFFFFF',overflow:'hidden',position:'absolute',bottom:'4px',backgroundColor:'#000000',textAlign:'center',zIndex:'995',cursor:'pointer',display:'none'});this.css(playbackRateID,{lineHeight:bHeight+'px',color:'#FFFFFF',float:'right',fontSize:'14px',textAlign:'center',overflow:'hidden',display:'none',cursor:'pointer'});this.css(playbackRatePID,{lineHeight:(bHeight-8)+'px',color:'#FFFFFF',overflow:'hidden',position:'absolute',bottom:'4px',backgroundColor:'#000000',textAlign:'center',zIndex:'995',cursor:'pointer',display:'none'});this.css([fullID,escFullID],{width:bWidth+'px',height:bHeight+'px',float:'right',overflow:'hidden',cursor:'pointer'});this.css(escFullID,'display','none');this.css(adBackgroundID,{width:'100%',height:'100%',backgroundColor:'#000000',position:'absolute',top:'0px',zIndex:'997',display:'none'});this.css(adElementID,{position:'absolute',overflow:'hidden',top:'0px',zIndex:'998',float:'center',display:'none'});this.css(adBarID,{position:'absolute',overflow:'hidden',top:'10px',right:'10px',zIndex:'999',textAlign:'right',display:'none'});this.css(adTimeID,{backgroundColor:'#000000',color:'#FF0000',paddingLeft:'10px',paddingRight:'10px',lineHeight:(bHeight-8)+'px',marginLeft:'5px',float:'right',cursor:'pointer'});this.css([adMuteID,adEscMuteID],{backgroundColor:'#000000',width:'30px',height:'30px',marginLeft:'5px',float:'right',display:'none',cursor:'pointer'});this.css(adSkipID,{backgroundColor:'#000000',lineHeight:(bHeight-8)+'px',color:'#FFFFFF',paddingLeft:'10px',paddingRight:'10px',float:'right',display:'none',cursor:'pointer'});this.css(adLinkID,{backgroundColor:'#ea5503',lineHeight:(bHeight-8)+'px',color:'#FFFFFF',paddingLeft:'10px',paddingRight:'10px',position:'absolute',overflow:'hidden',bottom:'10px',right:'10px',zIndex:'999',display:'none'});this.css(adPauseCloseID,{backgroundColor:'#f7f7f7',widht:'20px',height:'20px',position:'absolute',overflow:'hidden',zIndex:'999',top:'60px',left:'30px',borderRadius:'20px',display:'none',cursor:'pointer'});var cPlay=this.getByElement(playID+'-canvas').getContext('2d');var cPlayFillRect=function(){thisTemp.canvasFill(cPlay,[[12,10],[29,19],[12,28]])};cPlay.fillStyle=bBgColor;cPlayFillRect();var cPlayOver=function(event){cPlay.clearRect(0,0,bWidth,bHeight);cPlay.fillStyle=bOverColor;cPlayFillRect()};var cPlayOut=function(event){cPlay.clearRect(0,0,bWidth,bHeight);cPlay.fillStyle=bBgColor;cPlayFillRect()};this.addListenerInside('mouseover',cPlayOver,this.getByElement(playID+'-canvas'));this.addListenerInside('mouseout',cPlayOut,this.getByElement(playID+'-canvas'));var cPause=this.getByElement(pauseID+'-canvas').getContext('2d');var cPauseFillRect=function(){thisTemp.canvasFillRect(cPause,[[10,10,5,18],[22,10,5,18]])};cPause.fillStyle=bBgColor;cPauseFillRect();var cPauseOver=function(event){cPause.clearRect(0,0,bWidth,bHeight);cPause.fillStyle=bOverColor;cPauseFillRect()};var cPauseOut=function(event){cPause.clearRect(0,0,bWidth,bHeight);cPause.fillStyle=bBgColor;cPauseFillRect()};this.addListenerInside('mouseover',cPauseOver,this.getByElement(pauseID+'-canvas'));this.addListenerInside('mouseout',cPauseOut,this.getByElement(pauseID+'-canvas'));var cFront=this.getByElement(frontID+'-canvas').getContext('2d');var cFrontFillRect=function(){thisTemp.canvasFill(cFront,[[16,19],[30,10],[30,28]]);thisTemp.canvasFillRect(cFront,[[8,10,5,18]])};cFront.fillStyle=bBgColor;cFrontFillRect();var cFrontOver=function(event){cFront.clearRect(0,0,bWidth,bHeight);cFront.fillStyle=bOverColor;cFrontFillRect()};var cFrontOut=function(event){cFront.clearRect(0,0,bWidth,bHeight);cFront.fillStyle=bBgColor;cFrontFillRect()};this.addListenerInside('mouseover',cFrontOver,this.getByElement(frontID+'-canvas'));this.addListenerInside('mouseout',cFrontOut,this.getByElement(frontID+'-canvas'));var cNext=this.getByElement(nextID+'-canvas').getContext('2d');var cNextFillRect=function(){thisTemp.canvasFill(cNext,[[8,10],[22,19],[8,28]]);thisTemp.canvasFillRect(cNext,[[25,10,5,18]])};cNext.fillStyle=bBgColor;cNextFillRect();var cNextOver=function(event){cNext.clearRect(0,0,bWidth,bHeight);cNext.fillStyle=bOverColor;cNextFillRect()};var cNextOut=function(event){cNext.clearRect(0,0,bWidth,bHeight);cNext.fillStyle=bBgColor;cNextFillRect()};this.addListenerInside('mouseover',cNextOver,this.getByElement(nextID+'-canvas'));this.addListenerInside('mouseout',cNextOut,this.getByElement(nextID+'-canvas'));var cFull=this.getByElement(fullID+'-canvas').getContext('2d');var cFullFillRect=function(){thisTemp.canvasFillRect(cFull,[[19,10,9,3],[25,13,3,6],[10,19,3,9],[13,25,6,3]])};cFull.fillStyle=bBgColor;cFullFillRect();var cFullOver=function(){cFull.clearRect(0,0,bWidth,bHeight);cFull.fillStyle=bOverColor;cFullFillRect()};var cFullOut=function(){cFull.clearRect(0,0,bWidth,bHeight);cFull.fillStyle=bBgColor;cFullFillRect()};this.addListenerInside('mouseover',cFullOver,this.getByElement(fullID+'-canvas'));this.addListenerInside('mouseout',cFullOut,this.getByElement(fullID+'-canvas'));var cEscFull=this.getByElement(escFullID+'-canvas').getContext('2d');var cEscFullFillRect=function(){thisTemp.canvasFillRect(cEscFull,[[20,9,3,9],[23,15,6,3],[9,20,9,3],[15,23,3,6]])};cEscFull.fillStyle=bBgColor;cEscFullFillRect();var cEscFullOver=function(){cEscFull.clearRect(0,0,bWidth,bHeight);cEscFull.fillStyle=bOverColor;cEscFullFillRect()};var cEscFullOut=function(){cEscFull.clearRect(0,0,bWidth,bHeight);cEscFull.fillStyle=bBgColor;cEscFullFillRect()};this.addListenerInside('mouseover',cEscFullOver,this.getByElement(escFullID+'-canvas'));this.addListenerInside('mouseout',cEscFullOut,this.getByElement(escFullID+'-canvas'));var cMute=this.getByElement(muteID+'-canvas').getContext('2d');var cMuteFillRect=function(){thisTemp.canvasFill(cMute,[[10,15],[15,15],[21,10],[21,28],[15,23],[10,23]]);thisTemp.canvasFillRect(cMute,[[23,15,2,8],[27,10,2,18]])};cMute.fillStyle=bBgColor;cMuteFillRect();var cMuteOver=function(){cMute.clearRect(0,0,bWidth,bHeight);cMute.fillStyle=bOverColor;cMuteFillRect()};var cMuteOut=function(){cMute.clearRect(0,0,bWidth,bHeight);cMute.fillStyle=bBgColor;cMuteFillRect()};this.addListenerInside('mouseover',cMuteOver,this.getByElement(muteID+'-canvas'));this.addListenerInside('mouseout',cMuteOut,this.getByElement(muteID+'-canvas'));var cEscMute=this.getByElement(escMuteID+'-canvas').getContext('2d');var cEscMuteFillRect=function(){thisTemp.canvasFill(cEscMute,[[10,15],[15,15],[21,10],[21,28],[15,23],[10,23]]);thisTemp.canvasFill(cEscMute,[[23,13],[24,13],[33,25],[32,25]]);thisTemp.canvasFill(cEscMute,[[32,13],[33,13],[24,25],[23,25]])};cEscMute.fillStyle=bBgColor;cEscMuteFillRect();var cEscMuteOver=function(){cEscMute.clearRect(0,0,bWidth,bHeight);cEscMute.fillStyle=bOverColor;cEscMuteFillRect()};var cEscMuteOut=function(){cEscMute.clearRect(0,0,bWidth,bHeight);cEscMute.fillStyle=bBgColor;cEscMuteFillRect()};this.addListenerInside('mouseover',cEscMuteOver,this.getByElement(escMuteID+'-canvas'));this.addListenerInside('mouseout',cEscMuteOut,this.getByElement(escMuteID+'-canvas'));var cAdMute=this.getByElement(adMuteID+'-canvas').getContext('2d');var cAdMuteFillRect=function(){thisTemp.canvasFill(cAdMute,[[8,12],[12,12],[16,8],[16,21],[12,18],[8,18]]);thisTemp.canvasFillRect(cAdMute,[[18,12,2,6],[21,8,2,14]])};cAdMute.fillStyle=bBgColor;cAdMuteFillRect();var cAdMuteOver=function(){cAdMute.clearRect(0,0,bWidth,bHeight);cAdMute.fillStyle=bOverColor;cAdMuteFillRect()};var cAdMuteOut=function(){cAdMute.clearRect(0,0,bWidth,bHeight);cAdMute.fillStyle=bBgColor;cAdMuteFillRect()};this.addListenerInside('mouseover',cAdMuteOver,this.getByElement(adMuteID+'-canvas'));this.addListenerInside('mouseout',cAdMuteOut,this.getByElement(adMuteID+'-canvas'));var cAdEscMute=this.getByElement(adEscMuteID+'-canvas').getContext('2d');var cAdEscMuteFillRect=function(){thisTemp.canvasFill(cAdEscMute,[[8,12],[12,12],[16,8],[16,21],[12,18],[8,18]]);thisTemp.canvasFill(cAdEscMute,[[18,10],[20,10],[26,20],[24,20]]);thisTemp.canvasFill(cAdEscMute,[[25,10],[27,10],[20,20],[18,20]])};cAdEscMute.fillStyle=bBgColor;cAdEscMuteFillRect();var cAdEscMuteOver=function(){cAdEscMute.clearRect(0,0,bWidth,bHeight);cAdEscMute.fillStyle=bOverColor;cAdEscMuteFillRect()};var cAdEscMuteOut=function(){cAdEscMute.clearRect(0,0,bWidth,bHeight);cAdEscMute.fillStyle=bBgColor;cAdEscMuteFillRect()};this.addListenerInside('mouseover',cAdEscMuteOver,this.getByElement(adEscMuteID+'-canvas'));this.addListenerInside('mouseout',cAdEscMuteOut,this.getByElement(adEscMuteID+'-canvas'));var adPauseClose=this.getByElement(adPauseCloseID+'-canvas').getContext('2d');var adPauseCloseFillRect=function(){thisTemp.canvasFill(adPauseClose,[[4,6],[6,6],[16,15],[14,15]]);thisTemp.canvasFill(adPauseClose,[[14,6],[16,6],[6,15],[4,15]])};adPauseClose.fillStyle='#404856';adPauseCloseFillRect();var adPauseCloseOver=function(){adPauseClose.clearRect(0,0,bWidth,bHeight);adPauseClose.fillStyle=bOverColor;adPauseCloseFillRect()};var adPauseCloseOut=function(){adPauseClose.clearRect(0,0,bWidth,bHeight);adPauseClose.fillStyle='#404856';adPauseCloseFillRect()};this.addListenerInside('mouseover',adPauseCloseOver,this.getByElement(adPauseCloseID+'-canvas'));this.addListenerInside('mouseout',adPauseCloseOut,this.getByElement(adPauseCloseID+'-canvas'));var cLoading=this.getByElement(loadingID+'-canvas').getContext('2d');var cLoadingFillRect=function(){cLoading.save();var grad=cLoading.createLinearGradient(0,0,60,60);grad.addColorStop(0,bBgColor);var grad2=cLoading.createLinearGradient(0,0,80,60);grad2.addColorStop(1,bOverColor);var grad3=cLoading.createLinearGradient(0,0,80,60);grad3.addColorStop(1,'#FF9900');var grad4=cLoading.createLinearGradient(0,0,80,60);grad4.addColorStop(1,'#CC3300');cLoading.strokeStyle=grad;cLoading.lineWidth=8;cLoading.beginPath();cLoading.arc(30,30,25,0,0.4*Math.PI,false);cLoading.stroke();cLoading.closePath();cLoading.beginPath();cLoading.strokeStyle=grad2;cLoading.arc(30,30,25,0.5*Math.PI,0.9*Math.PI,false);cLoading.stroke();cLoading.beginPath();cLoading.strokeStyle=grad3;cLoading.arc(30,30,25,Math.PI,1.4*Math.PI,false);cLoading.stroke();cLoading.beginPath();cLoading.strokeStyle=grad4;cLoading.arc(30,30,25,1.5*Math.PI,1.9*Math.PI,false);cLoading.stroke();cLoading.closePath();cLoading.restore()};cLoading.fillStyle=bBgColor;cLoadingFillRect();var cPauseCenter=this.getByElement(pauseCenterID+'-canvas').getContext('2d');var cPauseCenterFillRect=function(){thisTemp.canvasFill(cPauseCenter,[[28,22],[59,38],[28,58]]);cPauseCenter.save();cPauseCenter.lineWidth=5;cPauseCenter.beginPath();cPauseCenter.arc(40,40,35,0,2*Math.PI,false);cPauseCenter.stroke();cPauseCenter.closePath();cPauseCenter.restore()};cPauseCenter.fillStyle=bBgColor;cPauseCenter.strokeStyle=bBgColor;cPauseCenterFillRect();var cPauseCenterOver=function(){cPauseCenter.clearRect(0,0,80,80);cPauseCenter.fillStyle=bOverColor;cPauseCenter.strokeStyle=bOverColor;cPauseCenterFillRect()};var cPauseCenterOut=function(){cPauseCenter.clearRect(0,0,80,80);cPauseCenter.fillStyle=bBgColor;cPauseCenter.strokeStyle=bBgColor;cPauseCenterFillRect()};this.addListenerInside('mouseover',cPauseCenterOver,this.getByElement(pauseCenterID+'-canvas'));this.addListenerInside('mouseout',cPauseCenterOut,this.getByElement(pauseCenterID+'-canvas'));var volumeBOOver=function(){thisTemp.css(volumeBOID,'backgroundColor',bOverColor);thisTemp.css(volumeBWID,'backgroundColor',bBgColor)};var volumeBOOut=function(){thisTemp.css(volumeBOID,'backgroundColor',bBgColor);thisTemp.css(volumeBWID,'backgroundColor',bOverColor)};this.addListenerInside('mouseover',volumeBOOver,this.getByElement(volumeBOID));this.addListenerInside('mouseout',volumeBOOut,this.getByElement(volumeBOID));var timeBOOver=function(){thisTemp.css(timeBOID,'backgroundColor',bOverColor);thisTemp.css(timeBWID,'backgroundColor',bBgColor)};var timeBOOut=function(){thisTemp.css(timeBOID,'backgroundColor',bBgColor);thisTemp.css(timeBWID,'backgroundColor',bOverColor)};this.addListenerInside('mouseover',timeBOOver,this.getByElement(timeBOID));this.addListenerInside('mouseout',timeBOOut,this.getByElement(timeBOID));this.addButtonEvent();this.newMenu();this.controlBarHide();this.keypress();this.changeVolume(this.vars['volume']);this.showFrontNext();setTimeout(function(){thisTemp.elementCoordinate()},100);this.checkBarWidth();var resize=function(){thisTemp.elementCoordinate();thisTemp.timeUpdateHandler();thisTemp.changeLoad();thisTemp.checkBarWidth();thisTemp.changeElementCoor();thisTemp.changePrompt();thisTemp.adPauseCoor();thisTemp.adOtherCoor()};this.addListenerInside('resize',resize,window)},newCanvas:function(id,width,height){return''},addButtonEvent:function(){var thisTemp=this;var playClick=function(event){thisTemp.videoPlay();thisTemp.sendJS('clickEvent','actionScript->videoPlay')};this.addListenerInside('click',playClick,this.CB['play']);this.addListenerInside('click',playClick,this.CB['pauseCenter']);var pauseClick=function(event){thisTemp.videoPause();thisTemp.sendJS('clickEvent','actionScript->videoPause')};this.addListenerInside('click',pauseClick,this.CB['pause']);var frontClick=function(event){if(thisTemp.vars['front']){eval(thisTemp.vars['front']+'()');thisTemp.sendJS('clickEvent','actionScript->'+thisTemp.vars['front'])}};this.addListenerInside('click',frontClick,this.CB['front']);var nextClick=function(event){if(thisTemp.vars['next']){eval(thisTemp.vars['next']+'()');thisTemp.sendJS('clickEvent','actionScript->'+thisTemp.vars['next'])}};this.addListenerInside('click',nextClick,this.CB['next']);var muteClick=function(event){thisTemp.videoMute();thisTemp.sendJS('clickEvent','actionScript->videoMute')};this.addListenerInside('click',muteClick,this.CB['mute']);var escMuteClick=function(event){thisTemp.videoEscMute();thisTemp.sendJS('clickEvent','actionScript->videoEscMute')};this.addListenerInside('click',escMuteClick,this.CB['escMute']);var fullClick=function(event){thisTemp.fullScreen();thisTemp.sendJS('clickEvent','actionScript->fullScreen')};this.addListenerInside('click',fullClick,this.CB['full']);var escFullClick=function(event){thisTemp.quitFullScreen();thisTemp.sendJS('clickEvent','actionScript->quitFullScreen')};this.addListenerInside('click',escFullClick,this.CB['escFull']);var adSkipClick=function(event){if(thisTemp.CB['adSkip'].innerHTML==thisTemp.language['skipAd']){thisTemp.runFunction(thisTemp.config['adSkipClick'])}};this.addListenerInside('click',adSkipClick,this.CB['adSkip']);var adMuteClick=function(event){thisTemp.adMuteFunction()};this.addListenerInside('click',adMuteClick,this.CB['adMute']);var adEscMuteClick=function(event){thisTemp.adEscMuteFunction()};this.addListenerInside('click',adEscMuteClick,this.CB['adEscMute']);var adPauseCloseClick=function(event){thisTemp.adPauseCloseFunction()};this.addListenerInside('click',adPauseCloseClick,this.CB['adPauseClose']);var promptHide=function(event){thisTemp.promptShow(false)};var playOver=function(event){thisTemp.promptShow(thisTemp.CB['play'])};this.addListenerInside('mouseover',playOver,this.CB['play']);this.addListenerInside('mouseout',promptHide,this.CB['play']);var pauseOver=function(event){thisTemp.promptShow(thisTemp.CB['pause'])};this.addListenerInside('mouseover',pauseOver,this.CB['pause']);this.addListenerInside('mouseout',promptHide,this.CB['pause']);var frontOver=function(event){thisTemp.promptShow(thisTemp.CB['front'])};this.addListenerInside('mouseover',frontOver,this.CB['front']);this.addListenerInside('mouseout',promptHide,this.CB['front']);var nextOver=function(event){thisTemp.promptShow(thisTemp.CB['next'])};this.addListenerInside('mouseover',nextOver,this.CB['next']);this.addListenerInside('mouseout',promptHide,this.CB['next']);var muteOver=function(event){thisTemp.promptShow(thisTemp.CB['mute'])};this.addListenerInside('mouseover',muteOver,this.CB['mute']);this.addListenerInside('mouseout',promptHide,this.CB['mute']);var escMuteOver=function(event){thisTemp.promptShow(thisTemp.CB['escMute'])};this.addListenerInside('mouseover',escMuteOver,this.CB['escMute']);this.addListenerInside('mouseout',promptHide,this.CB['escMute']);var fullOver=function(event){thisTemp.promptShow(thisTemp.CB['full'])};this.addListenerInside('mouseover',fullOver,this.CB['full']);this.addListenerInside('mouseout',promptHide,this.CB['full']);var escFullOver=function(event){thisTemp.promptShow(thisTemp.CB['escFull'])};this.addListenerInside('mouseover',escFullOver,this.CB['escFull']);this.addListenerInside('mouseout',promptHide,this.CB['escFull']);var definitionOver=function(event){thisTemp.promptShow(thisTemp.CB['definition'])};this.addListenerInside('mouseover',definitionOver,this.CB['definition']);this.addListenerInside('mouseout',promptHide,this.CB['definition']);var playbackrateOver=function(event){thisTemp.promptShow(thisTemp.CB['playbackrate'])};this.addListenerInside('mouseover',playbackrateOver,this.CB['playbackrate']);this.addListenerInside('mouseout',promptHide,this.CB['playbackrate']);var volumePrompt=function(vol){var volumeBOXY=thisTemp.getCoor(thisTemp.CB['volumeBO']);var promptObj={title:thisTemp.language['volume']+vol+'%',x:volumeBOXY['x']+thisTemp.CB['volumeBO'].offsetWidth*0.5,y:volumeBOXY['y']};thisTemp.promptShow(false,promptObj)};var volumeObj={slider:this.CB['volumeBO'],follow:this.CB['volumeUp'],refer:this.CB['volumeBg'],grossValue:'volume',pd:true,startFun:function(vol){},monitorFun:function(vol){thisTemp.changeVolume(vol*0.01,false,false);volumePrompt(vol)},endFun:function(vol){},overFun:function(vol){volumePrompt(vol)}};this.slider(volumeObj);var volumeClickObj={refer:this.CB['volumeBg'],grossValue:'volume',fun:function(vol){thisTemp.changeVolume(vol*0.01,true,true)}};this.progressClick(volumeClickObj);this.timeButtonMouseDown();var volumeBgMove=function(event){var volumeBgXY=thisTemp.getCoor(thisTemp.CB['volumeBg']);var eventX=thisTemp.client(event)['x'];var eventVolume=parseInt((eventX-volumeBgXY['x'])*100/thisTemp.CB['volumeBg'].offsetWidth);var buttonPromptObj={title:thisTemp.language['volume']+eventVolume+'%',x:eventX,y:volumeBgXY['y']};thisTemp.promptShow(false,buttonPromptObj)};this.addListenerInside('mousemove',volumeBgMove,this.CB['volumeBg']);this.addListenerInside('mouseout',promptHide,this.CB['volumeBg']);this.addListenerInside('mouseout',promptHide,this.CB['volumeBO']);this.addDefListener();this.addPlaybackrate()},videoClick:function(){var thisTemp=this;var clearTimerClick=function(){if(thisTemp.timerClick!=null){if(thisTemp.timerClick.runing){thisTemp.timerClick.stop()}thisTemp.timerClick=null}};var timerClickFun=function(){clearTimerClick();thisTemp.isClick=false;if(thisTemp.adPlayerPlay){var ad=thisTemp.getNowAdvertisements();try{if(ad['link']!=''){window.open(ad['link'])}thisTemp.ajaxSuccessNull(ad['clickMonitor'])}catch(event){}}else{if(thisTemp.ckplayerConfig['config']['click']){thisTemp.playOrPause()}}};clearTimerClick();if(this.isClick){this.isClick=false;if(thisTemp.ckplayerConfig['config']['doubleClick']){if(!this.full){thisTemp.fullScreen()}else{thisTemp.quitFullScreen()}}}else{this.isClick=true;this.timerClick=new this.timer(300,timerClickFun,1)}},timeButtonMouseDown:function(){var thisTemp=this;var timePrompt=function(time){if(isNaN(time)){time=0}var timeButtonXY=thisTemp.getCoor(thisTemp.CB['timeButton']);var promptObj={title:thisTemp.formatTime(time),x:timeButtonXY['x']-thisTemp.pdCoor['x']+thisTemp.CB['timeButton'].offsetWidth*0.5,y:timeButtonXY['y']-thisTemp.pdCoor['y']};thisTemp.promptShow(false,promptObj)};var timeObj={slider:this.CB['timeButton'],follow:this.CB['timeProgress'],refer:this.CB['timeBoBg'],grossValue:'time',pd:false,startFun:function(time){thisTemp.isTimeButtonMove=false},monitorFun:function(time){},endFun:function(time){if(thisTemp.V){if(thisTemp.V.duration>0){thisTemp.needSeek=0;thisTemp.videoSeek(parseInt(time))}}},overFun:function(time){timePrompt(time)}};var timeClickObj={refer:this.CB['timeBoBg'],grossValue:'time',fun:function(time){if(thisTemp.V){if(thisTemp.V.duration>0){thisTemp.needSeek=0;thisTemp.videoSeek(parseInt(time))}}}};var timeBoBgmousemove=function(event){var timeBoBgXY=thisTemp.getCoor(thisTemp.CB['timeBoBg']);var eventX=thisTemp.client(event)['x'];var eventTime=parseInt((eventX-timeBoBgXY['x'])*thisTemp.V.duration/thisTemp.CB['timeBoBg'].offsetWidth);var buttonPromptObj={title:thisTemp.formatTime(eventTime),x:eventX,y:timeBoBgXY['y']};thisTemp.promptShow(false,buttonPromptObj);var def=false;if(!thisTemp.isUndefined(thisTemp.CB['definitionP'])){if(thisTemp.css(thisTemp.CB['definitionP'],'display')!='block'){def=true}}if(thisTemp.vars['preview']!=null&&def){buttonPromptObj['time']=eventTime;thisTemp.preview(buttonPromptObj)}};var promptHide=function(event){thisTemp.promptShow(false);if(thisTemp.previewDiv!=null){thisTemp.css([thisTemp.previewDiv,thisTemp.previewTop],'display','none')}};if(!this.vars['live']){this.isTimeButtonDown=true;this.addListenerInside('mousemove',timeBoBgmousemove,this.CB['timeBoBg']);this.addListenerInside('mouseout',promptHide,this.CB['timeBoBg'])}else{this.isTimeButtonDown=false;timeObj['removeListenerInside']=true;timeClickObj['removeListenerInside']=true}this.slider(timeObj);this.progressClick(timeClickObj)},progressClick:function(obj){var thisTemp=this;var referMouseClick=function(event){var referX=thisTemp.client(event)['x']-thisTemp.getCoor(obj['refer'])['x'];var rWidth=obj['refer'].offsetWidth;var grossValue=0;if(obj['grossValue']=='volume'){grossValue=100}else{if(thisTemp.V){grossValue=thisTemp.V.duration}}var nowZ=parseInt(referX*grossValue/rWidth);if(obj['fun']){if(obj['grossValue']==='time'){var sliderXY=thisTemp.getCoor(thisTemp.CB['timeButton']);sliderLeft=sliderXY['x'];if(!thisTemp.checkSlideLeft(referX,sliderLeft,rWidth)){return}var bimeButtonWB=thisTemp.CB['timeButton'].offsetWidth*0.5;thisTemp.css(thisTemp.CB['timeButton'],'left',(referX-bimeButtonWB)+'px');thisTemp.css(thisTemp.CB['timeProgress'],'width',(referX)+'px')}obj['fun'](nowZ)}};if(this.isUndefined(obj['removeListenerInside'])){this.addListenerInside('click',referMouseClick,obj['refer'])}else{this.removeListenerInside('click',referMouseClick,obj['refer'])}},slider:function(obj){var thisTemp=this;var clientX=0,criterionWidth=0,sliderLeft=0,referLeft=0;var value=0;var calculation=function(){var sLeft=parseInt(thisTemp.css(obj['slider'],'left'));var rWidth=obj['refer'].offsetWidth-obj['slider'].offsetWidth;var grossValue=0;if(thisTemp.isUndefined(sLeft)||isNaN(sLeft)){sLeft=0}if(obj['grossValue']=='volume'){grossValue=100}else{if(thisTemp.V){grossValue=thisTemp.V.duration}}return parseInt(sLeft*grossValue/rWidth)};var mDown=function(event){thisTemp.addListenerInside('mousemove',mMove,document);thisTemp.addListenerInside('mouseup',mUp,document);var referXY=thisTemp.getCoor(obj['refer']);var sliderXY=thisTemp.getCoor(obj['slider']);clientX=thisTemp.client(event)['x'];referLeft=referXY['x'];sliderLeft=sliderXY['x'];criterionWidth=clientX-sliderLeft;if(obj['startFun']){obj['startFun'](calculation())}};var mMove=function(event){clientX=thisTemp.client(event)['x'];var newX=clientX-criterionWidth-referLeft;if(newX<0){newX=0}if(newX>obj['refer'].offsetWidth-obj['slider'].offsetWidth){newX=obj['refer'].offsetWidth-obj['slider'].offsetWidth}if(obj['slider']===thisTemp.CB['timeButton']){if(!thisTemp.checkSlideLeft(newX,sliderLeft,obj['refer'].offsetWidth)){return}}thisTemp.css(obj['slider'],'left',newX+'px');thisTemp.css(obj['follow'],'width',(newX+obj['slider'].offsetWidth*0.5)+'px');var nowZ=calculation();if(obj['monitorFun']){obj['monitorFun'](nowZ)}};var mUp=function(event){thisTemp.removeListenerInside('mousemove',mMove,document);thisTemp.removeListenerInside('mouseup',mUp,document);if(obj['endFun']){obj['endFun'](calculation())}};var mOver=function(event){if(obj['overFun']){obj['overFun'](calculation())}};if(this.isUndefined(obj['removeListenerInside'])){this.addListenerInside('mousedown',mDown,obj['slider']);this.addListenerInside('mouseover',mOver,obj['slider'])}else{this.removeListenerInside('mousedown',mDown,obj['slider']);this.removeListenerInside('mouseover',mOver,obj['slider'])}},checkSlideLeft:function(newX,sliderLeft,refer){var timeSA=this.ckplayerConfig['config']['timeScheduleAdjust'];switch(timeSA){case 0:return false;break;case 2:if(newXsliderLeft){return false}break;case 4:if(!this.timeSliderLeftTemp){this.timeSliderLeftTemp=sliderLeft/refer}if(newXthis.timeSliderLeftTemp){this.timeSliderLeftTemp=timeSliderMax}}if(newX>this.timeSliderLeftTemp*refer){return false}break;default:return true;break}return true},loadingStart:function(rot){var thisTemp=this;if(this.isUndefined(rot)){rot=true}if(this.showFace){this.css(thisTemp.CB['loading'],'display','none')}if(this.timerLoading!=null){if(this.timerLoading.runing){this.timerLoading.stop()}this.timerLoading=null}var buffer=0;var loadingFun=function(){var nowRotate='0';try{nowRotate=thisTemp.css(thisTemp.CB['loadingCanvas'],'transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-ms-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-moz-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-webkit-transform')||thisTemp.css(thisTemp.CB['loadingCanvas'],'-o-transform')||'0'}catch(event){}nowRotate=parseInt(nowRotate.replace('rotate(','').replace('deg);',''));nowRotate+=4;if(nowRotate>360){nowRotate=0}if(thisTemp.showFace){thisTemp.css(thisTemp.CB['loadingCanvas'],{transform:'rotate('+nowRotate+'deg)',msTransform:'rotate('+nowRotate+'deg)',mozTransform:'rotate('+nowRotate+'deg)',webkitTransform:'rotate('+nowRotate+'deg)',oTransform:'rotate('+nowRotate+'deg)'})}buffer++;if(buffer>=99){buffer=99}thisTemp.sendJS('buffer',buffer)};if(rot){this.timerLoading=new this.timer(10,loadingFun);if(this.showFace){this.css(thisTemp.CB['loading'],'display','block')}}else{thisTemp.sendJS('buffer',100)}},showFrontNext:function(){if(!this.showFace){return}if(this.vars['front']){this.css([this.CB['front'],this.CB['frontLine']],'display','block')}else{this.css([this.CB['front'],this.CB['frontLine']],'display','none')}if(this.vars['next']){this.css([this.CB['next'],this.CB['nextLine']],'display','block')}else{this.css([this.CB['next'],this.CB['nextLine']],'display','none')}},promptShow:function(ele,data){if(!this.showFace){return}var obj={};if(ele||data){if(!this.isUndefined(data)){obj=data}else{var offsetCoor=this.getCoor(ele);obj={title:this.getDataset(ele,'title'),x:offsetCoor['x']+ele.offsetWidth*0.5,y:offsetCoor['y']}}this.CB['prompt'].innerHTML=obj['title'];this.css(this.CB['prompt'],'display','block');var promoptWidth=this.getStringLen(obj['title'])*10;this.css(this.CB['promptBg'],'width',promoptWidth+'px');this.css(this.CB['prompt'],'width',promoptWidth+'px');promoptWidth+=10;var x=obj['x']-(promoptWidth*0.5);var y=this.PD.offsetHeight-obj['y']+8;if(x<0){x=0}if(x>this.PD.offsetWidth-promoptWidth){x=this.PD.offsetWidth-promoptWidth}this.css([this.CB['promptBg'],this.CB['prompt']],{display:'block',left:x+'px',bottom:y+'px'})}else{this.css([this.CB['promptBg'],this.CB['prompt']],{display:'none'})}},timerErrorFun:function(){var thisTemp=this;this.errorSend=false;var clearIntervalError=function(event){if(thisTemp.timerError!=null){if(thisTemp.timerError.runing){thisTemp.timerError.stop()}thisTemp.timerError=null}};var errorFun=function(event){clearIntervalError();thisTemp.error=true;thisTemp.errorUrl=thisTemp.getVideoUrl();if(!thisTemp.errorSend){thisTemp.errorSend=true;thisTemp.sendJS('error')}if(thisTemp.showFace){thisTemp.css(thisTemp.CB['errorText'],'display','block');thisTemp.css(thisTemp.CB['pauseCenter'],'display','none');thisTemp.css(thisTemp.CB['loading'],'display','none')}thisTemp.V.removeAttribute('poster');thisTemp.resetPlayer()};var errorListenerFun=function(event){setTimeout(function(){if(isNaN(thisTemp.V.duration)){errorFun(event)}},500)};if(!this.errorAdd){this.errorAdd=true;this.addListenerInside('error',errorListenerFun,this.V)}clearIntervalError();var timerErrorFun=function(){if(thisTemp.V&&parseInt(thisTemp.V.networkState)==3){errorFun()}};this.timerError=new this.timer(this.config['errorTime'],timerErrorFun)},judgeFullScreen:function(){var thisTemp=this;if(this.timerFull!=null){if(this.timerFull.runing){this.timerFull.stop()}this.timerFull=null}var fullFun=function(){thisTemp.isFullScreen()};this.timerFull=new this.timer(20,fullFun)},isFullScreen:function(){if(!this.showFace){return}var fullState=document.fullScreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement;if(fullState&&!this.full){this.full=true;this.sendJS('full',true);this.elementCoordinate();this.css(this.CB['full'],'display','none');this.css(this.CB['escFull'],'display','block');if(this.vars['live']==0){this.timeUpdateHandler()}this.PD.appendChild(this.CB['menu'])}if(!fullState&&this.full){this.full=false;this.sendJS('full',false);this.elementCoordinate();this.css(this.CB['full'],'display','block');this.css(this.CB['escFull'],'display','none');if(this.timerFull!=null){if(this.timerFull.runing){this.timerFull.stop()}this.timerFull=null}if(this.vars['live']==0){this.timeUpdateHandler()}this.body.appendChild(this.CB['menu'])}},newMenu:function(){var thisTemp=this;var i=0;this.css(this.CB['menu'],{backgroundColor:'#FFFFFF',padding:'5px',position:'absolute',left:'10px',top:'20px',display:'none',zIndex:'999',color:'#A1A9BE',boxShadow:'2px 2px 3px #AAAAAA'});var mArr=this.contextMenu;var cMenu=this.ckplayerConfig['menu'];if(cMenu['name']){if(cMenu['link']){mArr[0]=[cMenu['name'],'link',cMenu['link']]}else{mArr[0]=[cMenu['name'],'default']}}if(cMenu['version']){mArr[1]=[cMenu['version'],'default','line']}if(cMenu['more']){if(typeof(cMenu['more'])=='object'){if(cMenu['more'].length>0){var moreArr=cMenu['more'];for(i=0;i'+me[0]+'

';break;case'link':if(me[3]){me[3]='target="'+me[3]+'"'}html+='

'+me[0]+'

';break;case'javaScript':html+='

'+me[0]+'

';break;case'actionScript':html+='

'+me[0]+'

';break;default:break}}this.CB['menu'].innerHTML=html;var pArr=this.CB['menu'].childNodes;for(i=0;icdH-2)&&cShow&&!thisTemp.getMetaDate()['paused']){controlBarShow(false)}}else{if(!cShow){controlBarShow(true)}}oldClient={x:client['x'],y:client['y']}};this.timerCBar=new this.timer(2000,cbarFun);var cdMove=function(event){var getClient=thisTemp.client(event);client['x']=getClient['x'];client['y']=getClient['y'];if(!cShow){controlBarShow(true)}};this.addListenerInside('mousemove',cdMove,thisTemp.CD);this.addListenerInside('ended',cdMove);this.addListenerInside('resize',cdMove,window);if(hide===true){cShow=true;force=true;controlBarShow(false)}if(hide===false){cShow=false;force=true;controlBarShow(true)}},keypress:function(){var thisTemp=this;var keyDown=function(eve){var keycode=eve.keyCode||eve.which;if(this.adPlayerPlay){return}switch(keycode){case 32:thisTemp.playOrPause();break;case 37:thisTemp.fastBack();break;case 39:thisTemp.fastNext();break;case 38:now=thisTemp.volume+thisTemp.ckplayerConfig['config']['volumeJump'];thisTemp.changeVolume(now>1?1:now);break;case 40:now=thisTemp.volume-thisTemp.ckplayerConfig['config']['volumeJump'];thisTemp.changeVolume(now<0?0:now);break;default:break}};this.addListenerInside('keydown',keyDown,window||document)},playbackRate:function(){if(!this.showFace){return}var thisTemp=this;var vArr=this.playbackRateArr;var html='';var nowD='';var i=0;if(!nowD){nowD=vArr[this.playbackRateDefault][1]}if(vArr.length>1){var zlen=0;for(i=0;i'+vArr[i][1]+'

'+html;var dlen=this.getStringLen(vArr[i][1]);if(dlen>zlen){zlen=dlen}}if(html){html+='

'+nowD+'

'}this.CB['playbackrate'].innerHTML=nowD;this.CB['playbackrateP'].innerHTML=html;this.css([this.CB['playbackrate'],this.CB['playbackrateLine']],'display','block');var pArr=this.CB['playbackrateP'].childNodes;for(var i=0;inewPlaybackrate')}};this.addListenerInside('click',defClick,pArr[i])}var pW=(zlen*10)+20;this.css(this.CB['playbackrateP'],{width:pW+'px'});this.css(this.CB['playbackrate'],{width:pW+'px'});this.buttonWidth['playbackrate']=this.CB['playbackrate'].offsetWidth}else{this.CB['playbackrate'].innerHTML='';this.CB['playbackrateP'].innerHTML='';this.css([this.CB['playbackrate'],this.CB['playbackrateLine']],'display','none')}},addPlaybackrate:function(){var thisTemp=this;var setTimeOutP=null;var defClick=function(event){thisTemp.css(thisTemp.CB['playbackrateP'],{left:thisTemp.getCoor(thisTemp.CB['playbackrate'])['x']+'px',display:'block'})};this.addListenerInside('click',defClick,this.CB['playbackrate']);var defMouseOut=function(event){if(setTimeOutP){window.clearTimeout(setTimeOutP);setTimeOutP=null}setTimeOutP=setTimeout(function(event){thisTemp.css(thisTemp.CB['playbackrateP'],'display','none')},500)};this.addListenerInside('mouseout',defMouseOut,thisTemp.CB['playbackrateP']);var defMouseOver=function(event){if(setTimeOutP){window.clearTimeout(setTimeOutP);setTimeOutP=null}};this.addListenerInside('mouseover',defMouseOver,thisTemp.CB['playbackrateP'])},newPlaybackrate:function(title){var vArr=this.playbackRateArr;var nVArr=[];var i=0;for(i=0;i1){var zlen=0;for(i=dArr.length-1;i>-1;i--){html='

'+dArr[i]+'

'+html;var dlen=this.getStringLen(dArr[i]);if(dlen>zlen){zlen=dlen}}if(html){html+='

'+nowD+'

'}this.CB['definition'].innerHTML=nowD;this.CB['definitionP'].innerHTML=html;this.css([this.CB['definition'],this.CB['definitionLine']],'display','block');var pArr=this.CB['definitionP'].childNodes;for(var i=0;in){var arr=this.VA[n];if(arr.length>3){var title=arr[2];if(title){this.newDefinition(title)}}}},newDefinition:function(title){var vArr=this.VA;var nVArr=[];var i=0;for(i=0;i'}this.V.removeAttribute('src');this.V.innerHTML=source;this.V.currentSrc=nVArr[0][0]}}else{this.embedHls(vArr[0][0],this.vars['autoplay'])}this.V.autoplay='autoplay';this.V.load();this.timerErrorFun()},embedHls:function(url,autoplay){var thisTemp=this;if(Hls.isSupported()){var hls=new Hls();hls.loadSource(url);hls.attachMedia(this.V);hls.on(Hls.Events.MANIFEST_PARSED,function(){thisTemp.playerLoad();if(autoplay){thisTemp.videoPlay()}})}},prompt:function(){if(!this.showFace){return}var thisTemp=this;var prompt=this.vars['promptSpot'];if(prompt==null||this.promptArr.length>0){return}var showPrompt=function(event){if(thisTemp.promptElement==null){var random2='prompte'+thisTemp.randomString(5);var ele2=document.createElement('div');ele2.className=random2;thisTemp.PD.appendChild(ele2);thisTemp.promptElement=thisTemp.getByElement(random2);thisTemp.css(thisTemp.promptElement,{overflowX:'hidden',lineHeight:'22px',fontSize:'14px',color:'#FFFFFF',position:'absolute',display:'block',zIndex:'90'})}var pcon=thisTemp.getPromptTest();var pW=pcon['pW'],pT=pcon['pT'],pL=parseInt(thisTemp.css(this,'left'))-parseInt(pW*0.5);if(pcon['pL']>10){pL=pcon['pL']}if(pL<0){pL=0}thisTemp.css(thisTemp.promptElement,{width:pW+'px',left:(-pW-10)+'px',display:'block'});thisTemp.promptElement.innerHTML=thisTemp.getDataset(this,'words');thisTemp.css(thisTemp.promptElement,{left:pL+'px',top:(pT-thisTemp.promptElement.offsetHeight-10)+'px'})};var hidePrompt=function(event){if(thisTemp.promptElement!=null){thisTemp.css(thisTemp.promptElement,{display:'none'})}};var i=0;for(i=0;ithis.PD.offsetWidth-pW){pL=this.PD.offsetWidth-pW}return{pW:pW,pT:pT,pL:pL}},deletePrompt:function(){var arr=this.promptArr;if(arr.length>0){for(var i=0;ibw-parseInt(arr[i].offsetWidth*0.5)){left=bw-parseInt(arr[i].offsetWidth*0.5)}this.css(arr[i],{left:left+'px',display:'block'})}},preview:function(obj){var thisTemp=this;var preview={file:null,scale:0};preview=this.standardization(preview,this.vars['preview']);if(preview['file']==null||preview['scale']<=0){return}var srcArr=preview['file'];if(this.previewStart==0){this.previewStart=1;if(srcArr.length>0){var i=0;var imgW=0,imgH=0;var random=thisTemp.randomString(10);var loadNum=0;var loadImg=function(i){srcArr[i]=thisTemp.getNewUrl(srcArr[i]);var n=0;var img=new Image();img.src=srcArr[i];img.className=random+i;img.onload=function(event){loadNum++;if(thisTemp.previewDiv==null){imgW=img.width;imgH=img.height;thisTemp.previewWidth=parseInt(imgW*0.1);var ele=document.createElement('div');ele.className=random;thisTemp.PD.appendChild(ele);thisTemp.previewDiv=thisTemp.getByElement(random);var eleTop=(obj['y']-parseInt(imgH*0.1)+2);thisTemp.css(thisTemp.previewDiv,{width:srcArr.length*imgW*10+'px',height:parseInt(imgH*0.1)+'px',backgroundColor:'#000000',position:'absolute',left:'0px',top:eleTop+'px',display:'none',zIndex:'80'});ele.setAttribute('data-x','0');ele.setAttribute('data-y',eleTop);var ele2=document.createElement('div');ele2.className=random+'d2';thisTemp.PD.appendChild(ele2);thisTemp.previewTop=thisTemp.getByElement(ele2.className);thisTemp.css(thisTemp.previewTop,{width:parseInt(imgW*0.1)+'px',height:parseInt(imgH*0.1)+'px',position:'absolute',border:'5px solid '+thisTemp.css(thisTemp.CB['timeProgress'],'backgroundColor'),left:'0px',top:(obj['y']-parseInt(imgH*0.1)+2)+'px',display:'none',zIndex:'81'});var html='';for(n=0;n=imgW){sx=0;sy+=h}thisTemp.css(cimg,'display','none')}if(loadNum==srcArr.length){thisTemp.previewStart=2}else{i++;loadImg(i)}}}}loadImg(i);return}if(this.previewStart==2){var isTween=true;var nowNum=parseInt(obj['time']/this.vars['preview']['scale']);var numTotal=parseInt(thisTemp.getMetaDate()['duration']/this.vars['preview']['scale']);if(thisTemp.css(thisTemp.previewDiv,'display')=='none'){isTween=false}thisTemp.css(thisTemp.previewDiv,'display','block');var imgWidth=thisTemp.previewDiv.offsetWidth*0.01/srcArr.length;var left=(imgWidth*nowNum)-obj['x']+parseInt(imgWidth*0.5),top=obj['y']-thisTemp.previewDiv.offsetHeight;thisTemp.css(thisTemp.previewDiv,'top',top+2+'px');var topLeft=obj['x']-parseInt(imgWidth*0.5);var timepieces=0;if(topLeft<0){topLeft=0;timepieces=obj['x']-topLeft-imgWidth*0.5}if(topLeft>thisTemp.PD.offsetWidth-imgWidth){topLeft=thisTemp.PD.offsetWidth-imgWidth;timepieces=obj['x']-topLeft-imgWidth*0.5}if(left<0){left=0}if(left>numTotal*imgWidth-thisTemp.PD.offsetWidth){left=numTotal*imgWidth-thisTemp.PD.offsetWidth}thisTemp.css(thisTemp.previewTop,{left:topLeft+'px',top:top+2+'px',display:'block'});if(thisTemp.previewTop.offsetHeight>thisTemp.previewDiv.offsetHeight){thisTemp.css(thisTemp.previewTop,{height:thisTemp.previewDiv.offsetHeight-(thisTemp.previewTop.offsetHeight-thisTemp.previewDiv.offsetHeight)+'px'})}if(this.previewTween!=null){this.animatePause(this.previewTween);this.previewTween=null}var nowLeft=parseInt(thisTemp.css(thisTemp.previewDiv,'left'));var leftC=nowLeft+left;if(nowLeft==-(left+timepieces)){return}if(isTween){var obj={element:thisTemp.previewDiv,start:null,end:-(left+timepieces),speed:0.3};this.previewTween=this.animate(obj)}else{thisTemp.css(thisTemp.previewDiv,'left',-(left+timepieces)+'px')}}},deletePreview:function(){if(this.previewDiv!=null){this.deleteChild(this.previewDiv);this.previewDiv=null;this.previewStart=0}},changeVideo:function(){if(!this.html5Video){this.getVarsObject();this.V.newVideo(this.vars);return}var vArr=this.VA;var v=this.vars;var i=0;if(vArr.length<1){return}if(this.V!=null&&this.needSeek==0){this.needSeek=this.V.currentTime}if(v['poster']){this.V.poster=v['poster']}else{this.V.removeAttribute('poster')}if(v['loop']){this.V.loop='loop'}else{this.V.removeAttribute('loop')}if(v['seek']>0){this.needSeek=v['seek']}else{this.needSeek=0}if(this.getFileExt(vArr[0][0])!='.m3u8'){this.isM3u8=false}if(!this.isM3u8){if(vArr.length==1){this.V.innerHTML='';this.V.src=vArr[0][0]}else{var source='';vArr=this.arrSort(vArr);for(i=0;i'}this.V.removeAttribute('src');this.V.innerHTML=source}if(v['autoplay']){this.V.autoplay='autoplay'}else{this.V.removeAttribute('autoplay')}this.V.load()}else{this.embedHls(vArr[0][0],v['autoplay'])}if(!this.isUndefined(v['volume'])){this.changeVolume(v['volume'])}this.resetPlayer();this.timerErrorFun();if(this.vars['cktrack']){this.loadTrack()}},elementCoordinate:function(){this.pdCoor=this.getXY(this.PD);try{this.css(this.CB['pauseCenter'],{left:parseInt((this.PD.offsetWidth-80)*0.5)+'px',top:parseInt((this.PD.offsetHeight-80)*0.5)+'px'})}catch(event){}try{this.css(this.CB['loading'],{left:parseInt((this.PD.offsetWidth-60)*0.5)+'px',top:parseInt((this.PD.offsetHeight-60)*0.5)+'px'})}catch(event){}try{this.css(this.CB['errorText'],{left:parseInt((this.PD.offsetWidth-120)*0.5)+'px',top:parseInt((this.PD.offsetHeight-30)*0.5)+'px'})}catch(event){}try{this.css(this.CB['logo'],{left:parseInt(this.PD.offsetWidth-this.CB['logo'].offsetWidth-20)+'px',top:'20px'})}catch(event){}this.checkBarWidth()},checkBarWidth:function(){if(!this.showFace){return}var controlBarW=this.CB['controlBar'].offsetWidth;var ele=[];ele.push([[this.CB['full'],this.CB['escFull'],this.CB['fullLine']],this.buttonWidth['full']+2,'full']);if(this.vars['front']!=''){ele.push([[this.CB['front'],this.CB['frontLine']],this.buttonWidth['front']+2])}if(this.vars['next']!=''){ele.push([[this.CB['next'],this.CB['nextLine']],this.buttonWidth['next']+2])}if(this.CB['definition'].innerHTML!=''){ele.push([[this.CB['definition'],this.CB['definitionLine']],this.buttonWidth['definition']+2])}if((this.ckplayerConfig['config']['mobileVolumeBarShow']||!this.isMobile())&&this.css(this.CB['volume'],'display')=='block'){ele.push([[this.CB['volume']],this.buttonWidth['volume']]);ele.push([[this.CB['mute'],this.CB['escMute'],this.CB['muteLine']],this.buttonWidth['mute']+2,'mute'])}ele.push([[this.CB['timeText']],this.buttonWidth['timeText']]);ele.push([[this.CB['play'],this.CB['pause'],this.CB['playLine']],this.buttonWidth['play']+2,'play']);var i=0;var len=0;var isc=true;for(var i=0;i2){len+=nlen}else{isc=false}}if(isc){this.buttonLen=len;this.buttonArr=ele}len=this.buttonLen;ele=this.buttonArr;for(var i=0;icontrolBarW){len-=ele[i][1];this.css(ele[i][0],'display','none')}else{this.css(ele[i][0],'display','block');if(ele[i].length==3){var name=ele[i][2];switch(name){case'mute':if(this.volume==0){this.css(this.CB['mute'],'display','none')}else{this.css(this.CB['escMute'],'display','none')}break;case'play':this.playShow(this.V.paused?false:true);break;case'full':if(this.full){this.css(this.CB['full'],'display','none')}else{this.css(this.CB['escFull'],'display','none')}break}}}}},initPlayPause:function(){if(!this.showFace){return}if(this.vars['autoplay']){this.css([this.CB['play'],this.CB['pauseCenter']],'display','none');this.css(this.CB['pause'],'display','block')}else{this.css(this.CB['play'],'display','block');if(this.css(this.CB['errorText'],'display')=='none'){this.css(this.CB['pauseCenter'],'display','block')}this.css(this.CB['pause'],'display','none')}},loadedHandler:function(){this.loaded=true;if(this.vars['loaded']!=''){try{eval(this.vars['loaded']+'()')}catch(event){this.log(event)}}},playingHandler:function(){this.playShow(true);if(this.isFirstTimePlay&&!this.isUndefined(this.advertisements['front'])){this.isFirstTimePlay=false;this.adI=0;this.adType='front';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();return}if(this.adPlayerPlay){return}if(this.needSeek>0){this.videoSeek(this.needSeek);this.needSeek=0}if(this.animatePauseArray.length>0){this.animateResume('pause')}if(this.playerType=='html5video'&&this.V!=null&&this.config['videoDrawImage']){this.sendVCanvas()}if(!this.isUndefined(this.advertisements['pause'])&&!this.adPlayStart){this.adPauseCloseFunction()}},adPausePlayer:function(){this.adI=0;this.adType='pause';this.adPauseShow=true;this.loadAdPause()},loadAdPause:function(){var ad=this.getNowAdvertisements();var type=ad['type'];var thisTemp=this;var width=this.PD.offsetWidth,height=this.PD.offsetHeight;if(this.isStrImage(type)&&this.adPauseShow){this.css(this.CB['adElement'],'display','block');var imgClass='adimg'+this.randomString(10);var imgHtml='';if(ad['link']){imgHtml=''+imgHtml+''}this.CB['adElement'].innerHTML=imgHtml;this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css([thisTemp.getByElement(imgClass),thisTemp.CB['adElement']],{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});if(thisTemp.ckplayerConfig['style']['advertisement']['closeButtonShow']&&thisTemp.adPauseShow){thisTemp.css(thisTemp.CB['adPauseClose'],{display:'block'})}thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']);thisTemp.adPauseCoor()},this.getByElement(imgClass));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adElement']);var newI=this.adI;if(this.adI0){setTimeout(function(){if(thisTemp.adPauseShow){thisTemp.adI=newI;thisTemp.loadAdPause()}},ad['time']*1000)}}},adPauseCoor:function(){if(this.css(this.CB['adElement'],'display')=='block'){var w=this.CB['adElement'].offsetWidth,h=this.CB['adElement'].offsetHeight;var pw=this.PD.offsetWidth,ph=this.PD.offsetHeight;this.css(this.CB['adElement'],{top:(ph-h)*0.5+'px',left:(pw-w)*0.5+'px'});if(this.css(this.CB['adPauseClose'],'display')=='block'){this.css(this.CB['adPauseClose'],{top:(ph-h)*0.5-10+'px',left:(pw-w)*0.5+w-10+'px',})}}},adPauseCloseFunction:function(){this.CB['adElement'].innerHTML='';this.css([this.CB['adElement'],this.CB['adPauseClose']],'display','none');this.adPauseShow=false},advertisementsTime:function(nt){if(this.isUndefined(nt)){nt=0}var ad=this.advertisements[this.adType];if(nt>0){ad[this.adI]['time']=Math.ceil(nt)}this.adTimeAllTotal=0;for(var i=this.adI;i0){this.CB['adTime'].innerHTML=this.language['adTime'].replace('{$second}',this.adTimeAllTotal>9?this.adTimeAllTotal:'0'+this.adTimeAllTotal)}if(this.adPauseShow){this.adPauseCloseFunction()}this.adOtherCloseAll();this.adTimeTotal=-1},adSkipButtonShow:function(){var thisTemp=this;var skipConfig=this.ckplayerConfig['style']['advertisement'];var delayTimeTemp=skipConfig[this.adType+'SkipButtonDelay'];var timeFun=function(){if(delayTimeTemp>=0){thisTemp.CB['adSkip'].innerHTML=thisTemp.language['skipAdTime'].replace('{$second}',delayTimeTemp>9?delayTimeTemp:'0'+delayTimeTemp);setTimeout(timeFun,1000)}else{thisTemp.CB['adSkip'].innerHTML=thisTemp.language['skipAd']}delayTimeTemp--};if(skipConfig['skipButtonShow']){this.css(thisTemp.CB['adSkip'],'display','block');if(skipConfig[this.adType+'SkipButtonDelay']>0&&this.isUndefined(this.adSkipButtonTime)){timeFun()}else{thisTemp.css(thisTemp.CB['adSkip'],'display','block');thisTemp.CB['adSkip'].innerHTML=this.language['skipAd']}}},advertisementsPlay:function(){this.css([this.CB['adBackground'],this.CB['adElement'],this.CB['adBar'],this.CB['adLink']],'display','none');this.adPlayerPlay=false;var ad=this.advertisements[this.adType];if(this.adI==0&&(this.adType=='front'||this.adType=='insert'||this.adType=='end')){this.sendJS('process',this.adType+' ad play')}this.trackHide();if(this.adI';if(ad['link']){imgHtml=''+imgHtml+''}this.CB['adElement'].innerHTML=imgHtml;this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css(thisTemp.getByElement(imgClass),{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});thisTemp.css(thisTemp.CB['adElement'],{width:imgWH['width']+'px',height:imgWH['height']+'px',top:(height-imgWH['height'])*0.5+'px',left:(width-imgWH['width'])*0.5+'px',});thisTemp.ajaxSuccessNull(ad['exhibitionMonitor'])},this.getByElement(imgClass));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adElement']);if(!this.isUndefined(ad['time'])){this.adCountDown()}}else{this.css(this.CB['adBar'],'display','block');if(this.adVideoMute){this.css(this.CB['adEscMute'],'display','block');this.css(this.CB['adMute'],'display','none')}else{this.css(this.CB['adEscMute'],'display','none');this.css(this.CB['adMute'],'display','block')}this.CB['adElement'].innerHTML='';if(this.videoTemp['currentSrc']==''){this.videoTemp['currentSrc']=this.getCurrentSrc()}if(this.V.loop){this.videoTemp['loop']=true;this.V.loop=false}if(this.V!=null&&this.V.currentTime>0&&this.adIsVideoTime){this.adIsVideoTime=false;this.needSeek=this.V.currentTime}this.V.src=ad['file'];this.V.currentSrc=ad['file'];this.V.innerHTML='';this.V.play();this.adVideoPlay=true;this.ajaxSuccessNull(ad['exhibitionMonitor']);if(!this.adVideoMute){this.adEscMuteFunction()}}if(ad['link']){this.css(this.CB['adLink'],'display','block');var link=''+this.language['adLink']+'';this.CB['adLink'].innerHTML=link;this.css(this.getByElement('ckadmorelink'),{color:'#FFFFFF',textDecoration:'none'});this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.CB['adLink'])}else{this.css(this.CB['adLink'],'display','none')}},adCountDown:function(){var thisTemp=this;if(this.adTimeTotal>0){if(!this.adIsPause){this.adTimeTotal--;this.showAdTime();this.adCountDownObj=null;this.adCountDownObj=setTimeout(function(){thisTemp.adCountDown()},1000)}}else{this.adI++;this.advertisementsPlay()}},adPlayerTimeHandler:function(time){var ad=this.getNowAdvertisements();var type=ad['type'];if(this.isStrImage(type)){return}if(this.adTimeTotal!=parseInt(time)){this.adTimeTotal=parseInt(time);this.showAdTime()}},showAdTime:function(){this.adTimeAllTotal--;var n=this.adTimeAllTotal;if(n<0){n=0}this.CB['adTime'].innerHTML=this.language['adTime'].replace('{$second}',n<10?'0'+n:n)},checkAdOther:function(t){if(this.adPlayerPlay){return}var adTime=this.advertisements['othertime'];var adPlay=this.advertisements['otherPlay'];for(var i=0;i=adTime[i]&&!adPlay[i]){adPlay[i]=true;this.newAdOther(i)}}},newAdOther:function(i){var thisTemp=this;var ad=this.advertisements['other'][i];var randomS=this.randomString(10);var adDivID='adother'+randomS;imgClassName='adimgother'+randomS;var adDiv=document.createElement('div');adDiv.className=adDivID;this.PD.appendChild(adDiv);ad['div']=adDivID;ad['element']=imgClassName;this.getByElement(adDivID).innerHTML='';this.css(adDivID,{position:'absolute',overflow:'hidden',zIndex:'996',top:'60px',left:'30px',cursor:'pointer'});if(this.ckplayerConfig['style']['advertisement']['closeOtherButtonShow']){var closeAdDivID='adotherclose'+randomS;var closeAdDiv=document.createElement('div');closeAdDiv.className=closeAdDivID;this.PD.appendChild(closeAdDiv);this.getByElement(closeAdDivID).innerHTML=this.newCanvas(closeAdDivID,20,20);ad['closeDiv']=closeAdDivID;ad['close']=false;this.css(closeAdDivID,{backgroundColor:'#f7f7f7',widht:'20px',height:'20px',position:'absolute',overflow:'hidden',zIndex:'997',top:'60px',left:'30px',borderRadius:'20px',cursor:'pointer'});var adOtherClose=this.getByElement(closeAdDivID+'-canvas').getContext('2d');var adOtherCloseFillRect=function(){thisTemp.canvasFill(adOtherClose,[[4,6],[6,6],[16,15],[14,15]]);thisTemp.canvasFill(adOtherClose,[[14,6],[16,6],[6,15],[4,15]])};adOtherClose.fillStyle='#404856';adOtherCloseFillRect();var adOtherCloseOver=function(){adOtherClose.clearRect(0,0,20,20);adOtherClose.fillStyle='#0782F5';adOtherCloseFillRect()};var adOtherCloseOut=function(){adOtherClose.clearRect(0,0,20,20);adOtherClose.fillStyle='#404856';adOtherCloseFillRect()};this.addListenerInside('mouseover',adOtherCloseOver,this.getByElement(closeAdDivID+'-canvas'));this.addListenerInside('mouseout',adOtherCloseOut,this.getByElement(closeAdDivID+'-canvas'))}this.addListenerInside('load',function(){var imgObj=new Image();imgObj.src=this.src;var imgWH=thisTemp.adjustmentWH(imgObj.width,imgObj.height);thisTemp.css([thisTemp.getByElement(imgClassName),thisTemp.getByElement(adDivID)],{width:imgWH['width']+'px',height:imgWH['height']+'px',border:'0px'});thisTemp.advertisements['other'][i]=ad;thisTemp.ajaxSuccessNull(ad['exhibitionMonitor']);thisTemp.adOtherCoor()},this.getByElement(imgClassName));this.addListenerInside('click',function(){thisTemp.adOtherClose(i)},this.getByElement(closeAdDivID));this.addListenerInside('click',function(){thisTemp.ajaxSuccessNull(ad['clickMonitor'])},this.getByElement(imgClassName));if(ad['time']>0){setTimeout(function(){thisTemp.adOtherClose(i)},ad['time']*1000)}},adOtherClose:function(i){var ad=this.advertisements['other'][i];if(!this.isUndefined(ad['close'])){if(!ad['close']){ad['close']=true;this.PD.removeChild(this.getByElement(ad['div']));this.PD.removeChild(this.getByElement(ad['closeDiv']))}}},adOtherCloseAll:function(){if(!this.isUndefined(this.advertisements['other'])){var ad=this.advertisements['other'];for(var i=0;i-1;i--){if(t>=adTime[i]&&t1&&!adPlay[i]){this.adI=0;this.adType='insert';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();adPlay[i]=true;for(var n=0;n=width||h>=height){if(width/w>height/h){nh=height-20;nw=w*nh/h}else{nw=width-20;nh=h*nw/w}}else{nw=w;nh=h}return{width:nw,height:nh}},ajaxSuccessNull:function(url){if(!this.isUndefined(url)){var ajaxObj={url:url,success:function(data){}};this.ajax(ajaxObj)}},runFunction:function(s){try{var arr=s.split('->');switch(arr[0]){case'javaScript':eval(arr[1]+'()');break;case'actionScript':eval('this.'+arr[1]+'()');break}}catch(event){}},sendVCanvas:function(){if(this.timerVCanvas==null){this.css(this.V,'display','none');this.css(this.MD,'display','block');var thisTemp=this;var videoCanvas=function(){if(thisTemp.MDCX.width!=thisTemp.PD.offsetWidth){thisTemp.MDC.width=thisTemp.PD.offsetWidth}if(thisTemp.MDCX.height!=thisTemp.PD.offsetHeight){thisTemp.MDC.height=thisTemp.PD.offsetHeight}thisTemp.MDCX.clearRect(0,0,thisTemp.MDCX.width,thisTemp.MDCX.height);var coor=thisTemp.getProportionCoor(thisTemp.PD.offsetWidth,thisTemp.PD.offsetHeight,thisTemp.V.videoWidth,thisTemp.V.videoHeight);thisTemp.MDCX.drawImage(thisTemp.V,0,0,thisTemp.V.videoWidth,thisTemp.V.videoHeight,coor['x'],coor['y'],coor['width'],coor['height'])};this.timerVCanvas=new this.timer(0,videoCanvas)}},pauseHandler:function(){var thisTemp=this;this.playShow(false);if(this.animatePauseArray.length>0){this.animatePause('pause')}if(this.playerType=='html5video'&&this.V!=null&&this.config['videoDrawImage']){this.stopVCanvas()}if(!this.isUndefined(this.advertisements['pause'])&&!this.adPlayStart&&!this.adPauseShow){setTimeout(function(){if(!thisTemp.isUndefined(thisTemp.advertisements['pause'])&&!thisTemp.adPlayStart&&!thisTemp.adPauseShow&&thisTemp.time>1){thisTemp.adPausePlayer()}},300)}},stopVCanvas:function(){if(this.timerVCanvas!=null){this.css(this.V,'display','block');this.css(this.MD,'display','none');if(this.timerVCanvas.runing){this.timerVCanvas.stop()}this.timerVCanvas=null}},playShow:function(b){if(!this.showFace){return}if(b){this.css(this.CB['play'],'display','none');this.css(this.CB['pauseCenter'],'display','none');this.css(this.CB['pause'],'display','block')}else{this.css(this.CB['play'],'display','block');if(this.css(this.CB['errorText'],'display')=='none'){if(!this.adPlayerPlay){this.css(this.CB['pauseCenter'],'display','block')}}else{this.css(this.CB['pauseCenter'],'display','none')}this.css(this.CB['pause'],'display','none')}},seekedHandler:function(){this.resetTrack();this.isTimeButtonMove=true;if(this.V.paused){this.videoPlay()}},endedHandler:function(){if(this.adPlayerPlay){this.adI++;this.advertisementsPlay();return}if(!this.endAdPlay&&!this.isUndefined(this.advertisements['end'])){this.endAdPlay=true;this.adI=0;this.adType='end';this.adMuteInto();this.adIsVideoTime=true;this.adPlayStart=true;this.adVideoPlay=false;this.videoPause();this.advertisementsTime();this.advertisementsPlay();this.adSkipButtonShow();this.adReset=true;return}this.sendJS('ended');this.endedAdReset();if(!this.vars['loop']){this.videoSeek(0)}},endedAdReset:function(){var arr=[];var i=0;if(!this.isUndefined(this.advertisements['insertPlay'])){arr=this.advertisements['insertPlay'];for(i=0;i0){this.css(this.CB['mute'],'display','block');this.css(this.CB['escMute'],'display','none')}else{this.css(this.CB['mute'],'display','none');this.css(this.CB['escMute'],'display','block')}}catch(event){}}},timeUpdateHandler:function(){var duration=0;if(this.playerType=='html5video'){try{duration=this.V.duration}catch(event){}}if(duration>0){this.time=this.V.currentTime;this.timeTextHandler();this.trackShowHandler();if(this.isTimeButtonMove){this.timeProgress(this.time,duration)}}},timeProgress:function(time,duration){if(!this.showFace){return}var timeProgressBgW=this.CB['timeProgressBg'].offsetWidth;var timeBOW=parseInt((time*timeProgressBgW/duration)-(this.CB['timeButton'].offsetWidth*0.5));if(timeBOW>timeProgressBgW-this.CB['timeButton'].offsetWidth){timeBOW=timeProgressBgW-this.CB['timeButton'].offsetWidth}if(timeBOW<0){timeBOW=0}this.css(this.CB['timeProgress'],'width',timeBOW+'px');this.css(this.CB['timeButton'],'left',parseInt(timeBOW)+'px')},timeTextHandler:function(){if(!this.showFace){return}var duration=this.V.duration;var time=this.V.currentTime;if(isNaN(duration)||parseInt(duration)<0.2){duration=this.vars['duration']}this.CB['timeText'].innerHTML=this.formatTime(time)+' / '+this.formatTime(duration);if(this.CB['timeText'].offsetWidth>0){this.buttonWidth['timeText']=this.CB['timeText'].offsetWidth}},bufferEdHandler:function(){if(!this.showFace||this.playerType=='flashplayer'){return}var thisTemp=this;var clearTimerBuffer=function(){if(thisTemp.timerBuffer!=null){if(thisTemp.timerBuffer.runing){thisTemp.sendJS('buffer',100);thisTemp.timerBuffer.stop()}thisTemp.timerBuffer=null}};clearTimerBuffer();var bufferFun=function(){if(thisTemp.V.buffered.length>0){var duration=thisTemp.V.duration;var len=thisTemp.V.buffered.length;var bufferStart=thisTemp.V.buffered.start(len-1);var bufferEnd=thisTemp.V.buffered.end(len-1);var loadTime=bufferStart+bufferEnd;var loadProgressBgW=thisTemp.CB['timeProgressBg'].offsetWidth;var timeButtonW=thisTemp.CB['timeButton'].offsetWidth;var loadW=parseInt((loadTime*loadProgressBgW/duration)+timeButtonW);if(loadW>=loadProgressBgW){loadW=loadProgressBgW;clearTimerBuffer()}thisTemp.changeLoad(loadTime)}};this.timerBuffer=new this.timer(200,bufferFun)},changeLoad:function(loadTime){if(this.V==null){return}if(!this.showFace){return}var loadProgressBgW=this.CB['timeProgressBg'].offsetWidth;var timeButtonW=this.CB['timeButton'].offsetWidth;var duration=this.V.duration;if(this.isUndefined(loadTime)){loadTime=this.loadTime}else{this.loadTime=loadTime}var loadW=parseInt((loadTime*loadProgressBgW/duration)+timeButtonW);this.css(this.CB['loadProgress'],'width',loadW+'px')},judgeIsLive:function(){var thisTemp=this;if(this.timerError!=null){if(this.timerError.runing){this.timerError.stop()}this.timerError=null}this.error=false;if(this.showFace){this.css(this.CB['errorText'],'display','none')}var timeupdate=function(event){thisTemp.timeUpdateHandler()};if(!this.vars['live']){if(this.V!=null&&this.playerType=='html5video'){this.addListenerInside('timeupdate',timeupdate);thisTemp.timeTextHandler();thisTemp.prompt();setTimeout(function(){thisTemp.bufferEdHandler()},200)}}else{this.removeListenerInside('timeupdate',timeupdate);if(this.timerTime!=null){window.clearInterval(this.timerTime);timerTime=null}if(this.timerTime!=null){if(this.timerTime.runing){this.timerTime.stop()}this.timerTime=null}var timeFun=function(){if(thisTemp.V!=null&&!thisTemp.V.paused&&thisTemp.showFace){thisTemp.CB['timeText'].innerHTML=thisTemp.getNowDate()}};this.timerTime=new this.timer(1000,timeFun)}this.definition()},loadTrack:function(){if(this.playerType=='flashplayer'||this.vars['flashplayer']==true){return}var thisTemp=this;var track=this.vars['cktrack'];var obj={method:'get',dataType:'text',url:track,charset:'utf-8',success:function(data){thisTemp.track=thisTemp.parseSrtSubtitles(data);thisTemp.trackIndex=0;thisTemp.nowTrackShow={sn:''}}};this.ajax(obj)},resetTrack:function(){this.trackIndex=0;this.nowTrackShow={sn:''}},trackShowHandler:function(){if(!this.showFace||this.adPlayerPlay){return}if(this.track.length<1){return}if(this.trackIndex>=this.track.length){this.trackIndex=0}var nowTrack=this.track[this.trackIndex];if(this.time>=nowTrack['startTime']&&this.time<=nowTrack['endTime']){var nowShow=this.nowTrackShow;if(nowShow['sn']!=nowTrack['sn']){this.trackHide();this.trackShow(nowTrack)}}else{this.trackHide();this.checkTrack()}},trackShow:function(track){this.nowTrackShow=track;var arr=track['content'];for(var i=0;i=arr[i]['startTime']&&this.time<=arr[i]['endTime']){this.trackIndex=i;break}}},playOrPause:function(){if(!this.loaded){return}if(this.V==null){return}if(this.playerType=='flashplayer'){this.V.playOrPause();return}if(this.V.paused){this.videoPlay()}else{this.videoPause()}},videoPlay:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoPlay();return}if(this.adPlayerPlay){this.eliminateAd();return}try{if(this.V.currentSrc){this.V.play()}}catch(event){}},videoPause:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoPause();return}try{this.V.pause()}catch(event){}},videoSeek:function(time){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoSeek(time);return}var duration=this.getMetaDate()['duration'];if(duration>0&&time>duration){time=duration}if(time>=0){this.V.currentTime=time;this.sendJS('seekTime',time)}},changeVolume:function(vol,bg,button){if(this.loaded){if(this.playerType=='flashplayer'){this.V.changeVolume(time);return}}if(isNaN(vol)||this.isUndefined(vol)){vol=0}if(!this.loaded){this.vars['volume']=vol}if(!this.html5Video){this.V.changeVolume(vol);return}try{if(this.isUndefined(bg)){bg=true}}catch(e){}try{if(this.isUndefined(button)){button=true}}catch(e){}if(!vol){vol=0}if(vol<0){vol=0}if(vol>1){vol=1}try{this.V.volume=vol}catch(error){}this.volume=vol;if(bg&&this.showFace){var bgW=vol*this.CB['volumeBg'].offsetWidth;if(bgW<0){bgW=0}if(bgW>this.CB['volumeBg'].offsetWidth){bgW=this.CB['volumeBg'].offsetWidth}this.css(this.CB['volumeUp'],'width',bgW+'px')}if(button&&this.showFace){var buLeft=parseInt(this.CB['volumeUp'].offsetWidth-(this.CB['volumeBO'].offsetWidth*0.5));if(buLeft>this.CB['volumeBg'].offsetWidth-this.CB['volumeBO'].offsetWidth){buLeft=this.CB['volumeBg'].offsetWidth-this.CB['volumeBO'].offsetWidth}if(buLeft<0){buLeft=0}this.css(this.CB['volumeBO'],'left',buLeft+'px')}},videoMute:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoMute();return}this.volumeTemp=this.V?(this.V.volume>0?this.V.volume:this.vars['volume']):this.vars['volume'];this.changeVolume(0)},videoEscMute:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoEscMute();return}this.changeVolume(this.volumeTemp>0?this.volumeTemp:this.vars['volume'])},adMuteFunction:function(){if(!this.loaded){return}this.changeVolume(0);this.adVideoMute=true;this.css(this.CB['adEscMute'],'display','block');this.css(this.CB['adMute'],'display','none')},adEscMuteFunction:function(){if(!this.loaded){return}var v=this.ckplayerConfig['style']['advertisement']['videoVolume'];this.changeVolume(v);this.adMuteInto()},adMuteInto:function(){this.adVideoMute=false;this.css(this.CB['adEscMute'],'display','none');this.css(this.CB['adMute'],'display','block')},fastBack:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.fastBack();return}var time=this.time-this.ckplayerConfig['config']['timeJump'];if(time<0){time=0}this.videoSeek(time)},fastNext:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.fastNext();return}var time=this.time+this.ckplayerConfig['config']['timeJump'];if(time>this.V.duration){time=this.V.duration}this.videoSeek(time)},getCurrentSrc:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){return this.V.getCurrentSrc()}return this.V.currentSrc},switchFull:function(){if(this.full){this.quitFullScreen()}else{this.fullScreen()}},fullScreen:function(){if(this.html5Video&&this.playerType=='html5video'){var element=this.PD;if(element.requestFullscreen){element.requestFullscreen()}else if(element.mozRequestFullScreen){element.mozRequestFullScreen()}else if(element.webkitRequestFullscreen){element.webkitRequestFullscreen()}else if(element.msRequestFullscreen){element.msRequestFullscreen()}else if(element.oRequestFullscreen){element.oRequestFullscreen()}this.judgeFullScreen()}else{}},quitFullScreen:function(){if(this.html5Video&&this.playerType=='html5video'){if(document.exitFullscreen){document.exitFullscreen()}else if(document.msExitFullscreen){document.msExitFullscreen()}else if(document.mozCancelFullScreen){document.mozCancelFullScreen()}else if(document.oRequestFullscreen){document.oCancelFullScreen()}else if(document.requestFullscreen){document.requestFullscreen()}else if(document.webkitExitFullscreen){document.webkitExitFullscreen()}else{this.css(document.documentElement,'cssText','');this.css(document.document.body,'cssText','');this.css(this.PD,'cssText','')}this.judgeFullScreen()}},videoRotation:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoRotation(n);return}if(this.isUndefined(n)){n=0}var tf=this.css(this.V,'transform');if(this.isUndefined(tf)&&!tf){tf='rotate(0deg)'}var reg=tf.match(/rotate\([^)]+\)/);reg=reg?reg[0].replace('rotate(','').replace('deg)',''):'';if(reg==''){reg=0}else{reg=parseInt(reg)}if(n==-1){reg-=90}else if(n==1){reg+=90}else{if(n!=90&&n!=180&&n!=270&&n!=-90&&n!=-180&&n!=-270){reg=0}else{reg=n}}n=reg;var y90=n%90,y180=n%180,y270=n%270;var ys=false;if(y90==0&&y180==90&&y270==90){ys=true}if(y90==0&&y180==90&&y270==0){ys=true}if(y90==-0&&y180==-90&&y270==-90){ys=true}if(y90==-0&&y180==-90&&y270==-0){ys=true}tf=tf.replace(/rotate\([^)]+\)/,'').replace(/scale\([^)]+\)/,'')+' rotate('+n+'deg)';var cdW=this.CD.offsetWidth,cdH=this.CD.offsetHeight,vW=this.V.videoWidth,vH=this.V.videoHeight;if(vW>0&&vH>0){if(ys){if(cdW/cdH>vH/vW){nH=cdH;nW=vH*nH/vW}else{nW=cdW;nH=vW*nW/vH}this.css(this.V,'transform','rotate(0deg)');this.css(this.V,'transform','scale('+nH/cdW+','+nW/cdH+')'+tf)}else{this.css(this.V,'transform',tf)}}else{this.css(this.V,'transform',tf)}return},videoBrightness:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoBrightness(n);return}},videoContrast:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoContrast(n);return}},videoSaturation:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoSaturation(n);return}},videoHue:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoHue(n);return}},videoZoom:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoZoom(n);return}if(this.isUndefined(n)){n=1}if(n<0){n=0}if(n>2){n=2}var tf=this.css(this.V,'transform');tf=tf.replace(/scale\([^)]+\)/,'')+' scale('+n+')';this.videoScale=n;this.css(this.V,'transform',tf);return},videoProportion:function(w,h){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoProportion(w,h);return}},adPlay:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.adPlay();return}if(this.adPlayerPlay){this.adIsPause=false;if(this.adPlayerPlay){var ad=this.getNowAdvertisements();var type=ad['type'];if(this.isStrImage(type)){this.adCountDown()}else{this.V.play()}}}},adPause:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.adPause();return}if(this.adPlayerPlay){this.adIsPause=true;var ad=this.getNowAdvertisements();var type=ad['type'];if(type!='jpg'&&type!='jpeg'&&type!='png'&&type!='svg'&&type!='gif'){this.videoPause()}}},videoError:function(n){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.videoError(n);return}},changeConfig:function(){if(!this.loaded){return}if(this.playerType=='flashplayer'){this.V.changeConfig(arguments);return}var obj=this.ckplayerConfig;var arg=arguments;for(var i=0;i0){this.css(this.CD,'width',w+'px')}if(h>0){this.css(this.CD,'height',h+'px')}if(this.html5Video){this.elementCoordinate()}},changePlaybackRate:function(n){if(this.html5Video){var arr=this.playbackRateArr;n=parseInt(n);if(n';html+=param['v'];html+='';html+='';html+=' ';html+='';html+='';this.PD.innerHTML=html;this.V=this.getObjectById(vid);this.playerType='flashplayer'},getFlashVars:function(){this.getVarsObject();var v=this.vars;var z='';for(k in v){if(k!='flashplayer'&&k!='container'&&v[k]!=''){if(z!=''){z+='&'}var vk=v[k];if(vk==true){vk=1}if(vk==false){vk=0}z+=k+'='+vk}}if(!v.hasOwnProperty('volume')||!v['volume']){if(z!=''){z+='&'}z+='volume=0'}return z},isStrImage:function(s){if(s=='jpg'||s=='jpeg'||s=='png'||s=='svg'||s=='gif'){return true}return false},getVarsObject:function(){var v=this.vars;var f='',d='',w='';var arr=this.VA;var prompt=v['promptSpot'];var i=0;var video=this.vars['video'];if(typeof(video)=='object'){if(!this.isUndefined(typeof(video.length))){var arr=video;for(i=0;i'}w=w.replace('movie=','src=');return{w:w,v:v}},getMetaDate:function(){if(!this.loaded||this.V==null){return false}if(this.playerType=='html5video'){var duration=0;try{duration=!isNaN(this.V.duration)?this.V.duration:0}catch(event){this.log(event)}var data={duration:duration,volume:this.V.volume,playbackRate:this.V.playbackRate,width:this.PD.offsetWidth||this.V.offsetWidth||this.V.width,height:this.PD.offsetHeight||this.V.offsetHeight||this.V.height,streamWidth:this.V.videoWidth,streamHeight:this.V.videoHeight,videoWidth:this.V.offsetWidth,videoHeight:this.V.offsetHeight,paused:this.V.paused};return data}else{try{return this.V.getMetaDate()}catch(event){this.log(event)}}return false},getVideoUrl:function(){if(this.playerType=='flashplayer'){return this.V.getVideoUrl()}var arr=[];if(this.V.src){arr.push(this.V.src)}else{var uArr=this.V.childNodes;for(var i=0;i');var type='',fun='',link='',target='';if(callArr.length==2){var callM=callArr[0];var callE=callArr[1];if(!callE){return{type:'none'}}var val='';var eArr=[];type=callM;switch(callM){case'actionScript':if(callE.indexOf('(')>-1){eArr=callE.split('(');callE=eArr[0];val=eArr[1].replace(')','')}if(val==''){fun='thisTemp.'+callE+'()'}else{fun='thisTemp.'+callE+'('+val+')'}break;case'javaScript':if(callE.substr(0,11)=='[flashvars]'){callE=callE.substr(11);if(this.vars.hasOwnProperty(callE)){callE=this.vars[callE]}else{break}}if(callE.indexOf('(')>-1){eArr=callE.split('(');callE=eArr[0];val=eArr[1].replace(')','')}if(val==''){fun=callE+'()'}else{fun=callE+'('+val+')'}break;case"link":var callLink=(callE+',').split(',');if(callLink[0].substr(0,11)=='[flashvars]'){var fl=callLink[0].replace('[flashvars]','');if(this.vars.hasOwnProperty(fl)){callLink[0]=this.vars[fl]}else{break}}if(!callLink[1]){callLink[1]='_blank'}link=callLink[0];target=callLink[1];break}}return{type:type,fun:fun,link:link,target:target}},getPosition:function(obj){var pw=this.PD.offsetWidth,ph=this.PD.offsetHeight;var x=0,y=0;switch(obj['align']){case'left':x=obj['offsetX'];break;case'center':x=pw*0.5+obj['offsetX'];break;case'right':x=pw+obj['offsetX'];break}switch(obj['vAlign']){case'top':y=obj['offsetY'];break;case'middle':y=ph*0.5+obj['offsetY'];break;case'bottom':y=ph+obj['offsetY'];break}return{x:x,y:y}},addElement:function(attribute){var thisTemp=this;if(this.playerType=='flashplayer'){return this.V.addElement(attribute)}var i=0;var obj={list:null,x:'100%',y:"50%",position:null,alpha:1,backgroundColor:'',backAlpha:1,backRadius:0,clickEvent:''};obj=this.standardization(obj,attribute);var list=obj['list'];if(list==null){return''}var id='element'+this.randomString(10);var ele=document.createElement('div');ele.className=id;if(obj['x']){ele.setAttribute('data-x',obj['x'])}if(obj['y']){ele.setAttribute('data-y',obj['y'])}if(obj['position']!=null){ele.setAttribute('data-position',obj['position'].join(','))}this.PD.appendChild(ele);var eid=this.getByElement(id);this.css(eid,{position:'absolute',filter:'alpha(opacity:'+obj['alpha']+')',opacity:obj['alpha'].toString(),width:'800px',zIndex:'20'});var bgid='elementbg'+this.randomString(10);var bgAlpha=obj['alpha'].toString();var bgColor=obj['backgroundColor'].replace('0x','#');var html='';var idArr=[];var clickArr=[];if(!this.isUndefined(list)&&list.length>0){var textObj,returnObj,clickEvent;for(i=0;i'}else{html+='
'}break;case'text':textObj={type:'text',text:'',color:'0xFFFFFF',size:14,font:this.fontFamily,leading:0,alpha:1,paddingLeft:0,paddingRight:0,paddingTop:0,paddingBottom:0,marginLeft:0,marginRight:0,marginTop:0,marginBottom:0,backgroundColor:'',backAlpha:1,backRadius:0,clickEvent:''};list[i]=this.standardization(textObj,list[i]);clickEvent=this.clickEvent(list[i]['clickEvent']);clickArr.push(clickEvent);if(clickEvent['type']=='link'){html+=''}else{html+='
'+list[i]['text']+'
'}break;default:break}idArr.push(newEleid)}}var objClickEvent=this.clickEvent(obj['clickEvent']);eid.innerHTML='
'+html+'
';if(objClickEvent['type']=='javaScript'||objClickEvent['type']=='actionScript'){var objClickHandler=function(){eval(objClickEvent['fun']);thisTemp.sendJS('clickEvent',clk['type']+'->'+clk['fun'].replace('thisTemp.','').replace('()',''))};this.addListenerInside('click',objClickHandler,this.getByElement(bgid+'_c'))}this.css(bgid+'_c',{position:'absolute',zIndex:'2'});for(i=0;i'+clk['fun'].replace('thisTemp.','').replace('()',''))};this.addListenerInside('click',clickHandler,this.getByElement(idArr[i]))}switch(list[i]['type']){case'image':case'png':case'jpg':case'jpeg':case'gif':this.css(idArr[i],{float:'left',width:list[i]['width']+'px',height:list[i]['height']+'px',filter:'alpha(opacity:'+list[i]['alpha']+')',opacity:list[i]['alpha'].toString(),marginLeft:list[i]['marginLeft']+'px',marginRight:list[i]['marginRight']+'px',marginTop:list[i]['marginTop']+'px',marginBottom:list[i]['marginBottom']+'px',borderRadius:list[i]['radius']+'px',cursor:'pointer'});this.css(idArr[i]+'_image',{width:list[i]['width']+'px',height:list[i]['height']+'px',borderRadius:list[i]['radius']+'px'});break;case'text':this.css(idArr[i]+'_text',{filter:'alpha(opacity:'+list[i]['alpha']+')',opacity:list[i]['alpha'].toString(),borderRadius:list[i]['radius']+'px',fontFamily:list[i]['font'],fontSize:list[i]['size']+'px',color:list[i]['color'].replace('0x','#'),lineHeight:list[i]['leading']>0?list[i]['leading']+'px':'',paddingLeft:list[i]['paddingLeft']+'px',paddingRight:list[i]['paddingRight']+'px',paddingTop:list[i]['paddingTop']+'px',paddingBottom:list[i]['paddingBottom']+'px',whiteSpace:'nowrap',position:'absolute',zIndex:'3',cursor:'pointer'});this.css(idArr[i],{float:'left',width:this.getByElement(idArr[i]+'_text').offsetWidth+'px',height:this.getByElement(idArr[i]+'_text').offsetHeight+'px',marginLeft:list[i]['marginLeft']+'px',marginRight:list[i]['marginRight']+'px',marginTop:list[i]['marginTop']+'px',marginBottom:list[i]['marginBottom']+'px'});this.css(idArr[i]+'_bg',{width:this.getByElement(idArr[i]+'_text').offsetWidth+'px',height:this.getByElement(idArr[i]+'_text').offsetHeight+'px',filter:'alpha(opacity:'+list[i]['backAlpha']+')',opacity:list[i]['backAlpha'].toString(),borderRadius:list[i]['backRadius']+'px',backgroundColor:list[i]['backgroundColor'].replace('0x','#'),position:'absolute',zIndex:'2'});break;default:break}}this.css(bgid,{width:this.getByElement(bgid+'_c').offsetWidth+'px',height:this.getByElement(bgid+'_c').offsetHeight+'px',position:'absolute',filter:'alpha(opacity:'+bgAlpha+')',opacity:bgAlpha,backgroundColor:bgColor.replace('0x','#'),borderRadius:obj['backRadius']+'px',zIndex:'1'});this.css(eid,{width:this.getByElement(bgid).offsetWidth+'px',height:this.getByElement(bgid).offsetHeight+'px'});var eidCoor=this.calculationCoor(eid);this.css(eid,{left:eidCoor['x']+'px',top:eidCoor['y']+'px'});this.elementArr.push(eid.className);return eid},getElement:function(element){if(this.playerType=='flashplayer'){return this.V.getElement(element)}var ele=element;if(typeof(element)=='string'){ele=this.getByElement(element)}var coor=this.getCoor(ele);return{x:coor['x'],y:coor['y'],width:ele.offsetWidth,height:ele.offsetHeight,alpha:!this.isUndefined(this.css(ele,'opacity'))?parseFloat(this.css(ele,'opacity')):1,show:this.css(ele,'display')=='none'?false:true}},elementShow:function(element,show){if(this.playerType=='flashplayer'){this.V.elementShow(element,show);return}if(typeof(element)=='string'){if(element){this.css(ele,'display',show==true?'block':'none')}else{var arr=this.elementTempArr;for(var i=0;i0){position.push(null,null,null,null);var i=0;for(i=0;i-1){this.elementTempArr.push(obj['element'].className);this.elementArr.splice(def,1)}var css={};var pm=this.getElement(obj['element']);var t=0;var b=0;var c=0;var d=obj['speed']*1000;var timerTween=null;var tweenObj=null;var start=obj['start']==null?'':obj['start'].toString();var end=obj['end']==null?'':obj['end'].toString();switch(obj['parameter']){case'x':if(obj['start']==null){b=pm['x']}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(start)*w*0.01}else{b=parseInt(start)}}if(obj['end']==null){c=pm['x']-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)*w*0.01-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])-b}else{c=parseInt(end)}}else{c=parseInt(end)-b}}break;case'y':if(obj['start']==null){b=pm['y']}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(start)*h*0.01}else{b=parseInt(start)}}if(obj['end']==null){c=pm['y']-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)*h*0.01-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])-b}else{c=parseInt(end)}}else{c=parseInt(end)-b}}break;case'alpha':if(obj['start']==null){b=pm['alpha']*100}else{if(start.substring(start.length-1,start.length)=='%'){b=parseInt(obj['start'])}else{b=parseInt(obj['start']*100)}}if(obj['end']==null){c=pm['alpha']*100-b}else{if(end.substring(end.length-1,end.length)=='%'){c=parseInt(end)-b}else if(end.substring(0,1)=='-'||end.substring(0,1)=='+'){if(typeof(obj['end'])=='number'){c=parseInt(obj['end'])*100-b}else{c=parseInt(obj['end'])*100}}else{c=parseInt(obj['end'])*100-b}}break}var callBack=function(){var index=thisTemp.arrIndexOf(thisTemp.animateElementArray,animateId);if(index>-1){thisTemp.animateArray.splice(index,1);thisTemp.animateElementArray.splice(index,1)}index=thisTemp.arrIndexOf(thisTemp.animatePauseArray,animateId);if(index>-1){thisTemp.animatePauseArray.splice(index,1)}if(obj['callBack']!=null&&obj['element']&&obj['callBack']!='callBack'&&obj['callBack']!='tweenX'&&obj['tweenY']!='callBack'&&obj['callBack']!='tweenAlpha'){var cb=eval(obj['callBack']);cb(obj['element']);obj['callBack']=null}};var stopTween=function(){if(timerTween!=null){if(timerTween.runing){timerTween.stop()}timerTween=null}};var tweenX=function(){if(t-1){this.elementTempArr.splice(defX,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};var tweenY=function(){if(t-1){this.elementTempArr.splice(defY,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};var tweenAlpha=function(){if(t-1){this.elementTempArr.splice(defA,1)}}catch(event){}thisTemp.elementArr.push(obj['element'].className);callBack()}};switch(obj['parameter']){case'x':tweenObj=tweenX;break;case'y':tweenObj=tweenY;break;case'alpha':tweenObj=tweenAlpha;break;default:break}timerTween=new thisTemp.timer(10,tweenObj);timerTween.callBackFunction=callBack;if(obj['overStop']){var mouseOver=function(){if(timerTween!=null&&timerTween.runing){timerTween.stop()}};this.addListenerInside('mouseover',mouseOver,obj['element']);var mouseOut=function(){var start=true;if(obj['pauseStop']&&thisTemp.getMetaDate()['paused']){start=false}if(timerTween!=null&&!timerTween.runing&&start){timerTween.start()}};this.addListenerInside('mouseout',mouseOut,obj['element'])}this.animateArray.push(timerTween);this.animateElementArray.push(animateId);if(obj['pauseStop']){this.animatePauseArray.push(animateId)}return animateId},animateResume:function(id){if(this.playerType=='flashplayer'){this.V.animateResume(this.isUndefined(id)?'':id);return}var arr=[];if(id!=''&&!this.isUndefined(id)&&id!='pause'){arr.push(id)}else{if(id==='pause'){arr=this.animatePauseArray}else{arr=this.animateElementArray}}for(var i=0;i-1){this.animateArray[index].start()}}},animatePause:function(id){if(this.playerType=='flashplayer'){this.V.animatePause(this.isUndefined(id)?'':id);return}var arr=[];if(id!=''&&!this.isUndefined(id)&&id!='pause'){arr.push(id)}else{if(id==='pause'){arr=this.animatePauseArray}else{arr=this.animateElementArray}}for(var i=0;i-1){this.animateArray[index].stop()}}},deleteAnimate:function(id){if(this.playerType=='flashplayer'&&this.V){try{this.V.deleteAnimate(id)}catch(event){this.log(event)}return}var index=this.arrIndexOf(this.animateElementArray,id);if(index>-1){this.animateArray[index].callBackFunction();this.animateArray.splice(index,1);this.animateElementArray.splice(index,1)}},deleteElement:function(ele){if(this.playerType=='flashplayer'&&this.V){try{this.V.deleteElement(ele)}catch(event){}return}var def=this.arrIndexOf(this.elementArr,ele.className);if(def>-1){this.elementArr.splice(def,1)}try{def=this.arrIndexOf(this.elementTempArr,ele.className);if(def>-1){this.elementTempArr.splice(def,1)}}catch(event){}this.deleteAnimate(ele);this.deleteChild(ele)},getByElement:function(obj,parent){if(this.isUndefined(parent)){parent=document}var num=obj.substr(0,1);var res=[];if(num!='#'){if(num=='.'){obj=obj.substr(1,obj.length)}if(parent.getElementsByClassName){res=parent.getElementsByClassName(obj)}else{var reg=new RegExp(' '+obj+' ','i');var ele=parent.getElementsByTagName('*');for(var i=0;i0){return res[0]}else{return res}}else{if(num=='#'){obj=obj.substr(1,obj.length)}return document.getElementById(obj)}},css:function(elem,attribute,value){var i=0;var k='';if(typeof(elem)=='object'){if(!this.isUndefined(typeof(elem.length))){for(i=0;i0)?((m<10)?'0'+m+':':m+':'):'00:';tHours=(h>0)?((h<10)?'0'+h+':':h+':'):'';if(ishours){return tHours+tMinutes+tSeconds}else{return tMinutes+tSeconds}},randomString:function(len){len=len||16;var chars='abcdefghijklmnopqrstuvwxyz';var maxPos=chars.length;var val='';for(i=0;i127||str.charCodeAt(i)==94){len+=2}else{len++}}return len},createXHR:function(){if(window.XMLHttpRequest){return new XMLHttpRequest()}else if(window.ActiveXObject){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(event){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(event){this.eject(this.errorList[7])}}}else{this.eject(this.errorList[8])}},ajax:function(cObj){var thisTemp=this;var callback=null;var obj={method:'get',dataType:'json',charset:'utf-8',async:false,url:'',data:null,success:null};if(typeof(cObj)!='object'){this.eject(this.errorList[9]);return}obj=this.standardization(obj,cObj);if(obj.dataType==='json'||obj.dataType==='text'||obj.dataType==='html'){var xhr=this.createXHR();callback=function(){if(xhr.status==200){if(thisTemp.isUndefined(obj.success)){return}if(obj.dataType==='json'){try{obj.success(eval('('+xhr.responseText+')'))}catch(event){obj.success(null)}}else{obj.success(xhr.responseText)}}else{thisTemp.eject(thisTemp.errorList[10],'Ajax.status:'+xhr.status)}};obj.url=obj.url.indexOf('?')==-1?obj.url+'?rand='+this.randomString(6):obj.url;obj.data=this.formatParams(obj.data);if(obj.method==='get'&&!this.isUndefined(obj.data)){if(obj.data!=''){if(obj.url.indexOf('?')==-1){obj.url+='?'+obj.data}else{obj.url+='&'+obj.data}}}if(obj.async===true){xhr.onreadystatechange=function(){if(xhr.readyState==4&&callback!=null){callback()}}}xhr.open(obj.method,obj.url,obj.async);if(obj.method==='post'){xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xhr.setRequestHeader('charset',obj['charset']);xhr.send(obj.data)}else{xhr.send(null)}if(obj.async===false){callback()}}else if(obj.dataType==='jsonp'){var oHead=document.getElementsByTagName('head')[0];var oScript=document.createElement('script');var callbackName='callback'+new Date().getTime();var params=this.formatParams(obj.data)+'&callback='+callbackName;callback=obj.success;oScript.src=obj.url.split('?')+'?'+params;oHead.insertBefore(oScript,oHead.firstChild);window[callbackName]=function(json){callback(json);oHead.removeChild(oScript)}}},loadJs:function(path,success){var oHead=document.getElementsByTagName('HEAD').item(0);var oScript=document.createElement('script');oScript.type='text/javascript';oScript.src=this.getNewUrl(path);oHead.appendChild(oScript);oScript.onload=function(){success()}},isMsie:function(){var browser=navigator.appName;var b_version=navigator.appVersion;var version=b_version.split(';');var trim_Version='';if(version.length>1){trim_Version=version[1].replace(/[ ]/g,'')}if(browser=='Microsoft Internet Explorer'&&(trim_Version=='MSIE6.0'||trim_Version=='MSIE7.0'||trim_Version=='MSIE8.0'||trim_Version=='MSIE9.0'||trim_Version=='MSIE10.0')){return false}return true},uploadFlash:function(){var swf;if(navigator.userAgent.indexOf('MSIE')>0){try{var swf=new ActiveXObject('ShockwaveFlash.ShockwaveFlash');return true}catch(e){return false}}if(navigator.userAgent.indexOf('Firefox')>0){swf=navigator.plugins['Shockwave Flash'];if(swf){return true}else{return false}}return true},supportVideo:function(){if(!this.isMsie()){return false}if(!!document.createElement('video').canPlayType){var vidTest=document.createElement('video');var oggTest;try{oggTest=vidTest.canPlayType('video/ogg; codecs="theora, vorbis"')}catch(error){oggTest=false}if(!oggTest){var h264Test;try{h264Test=vidTest.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')}catch(error){h264Test=false}if(!h264Test){return false}else{if(h264Test=="probably"){return true}else{return false}}}else{if(oggTest=="probably"){return true}else{return false}}}else{return false}},getDataset:function(ele,z){try{return ele.dataset[z]}catch(error){try{return ele.getAttribute('data-'+z)}catch(error){return false}}},getObjectById:function(id){var x=null;var y=this.getByElement('#'+id);var r='embed';if(y&&y.nodeName=='OBJECT'){if(typeof(y.SetVariable)!='undefined'){x=y}else{var z=y.getElementsByTagName(r)[0];if(z){x=z}}}return x},formatParams:function(data){var arr=[];for(var i in data){arr.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i]))}return arr.join('&')},arrSort:function(arr){var temp=[];for(var i=0;i-1){filepath=filepath.split('?')[0]}var pos='.'+filepath.replace(/.+\./,'');return pos.toLowerCase()}return''},isMobile:function(){if(navigator.userAgent.match(/(iPhone|iPad|iPod|Android|ios)/i)){return true}return false},isContains:function(str,key){return str.indexOf(key)>-1},getNewUrl:function(url){if(this.isContains(url,'?')){return url+='&'+this.randomString(8)+'='+this.randomString(8)}else{return url+='?'+this.randomString(8)+'='+this.randomString(8)}},client:function(event){var eve=event||window.event;if(this.isUndefined(eve)){eve={clientX:0,clientY:0}}return{x:eve.clientX+(document.documentElement.scrollLeft||this.body.scrollLeft)-this.pdCoor['x'],y:eve.clientY+(document.documentElement.scrollTop||this.body.scrollTop)-this.pdCoor['y']}},getCoor:function(obj){var coor=this.getXY(obj);return{x:coor['x']-this.pdCoor['x'],y:coor['y']-this.pdCoor['y']}},getXY:function(obj){var parObj=obj;var left=obj.offsetLeft;var top=obj.offsetTop;while(parObj=parObj.offsetParent){left+=parObj.offsetLeft;top+=parObj.offsetTop}return{x:left,y:top}},removeChild:function(){if(this.playerType=='html5video'){var i=0;var timerArr=[this.timerError,this.timerFull,this.timerTime,this.timerBuffer,this.timerClick,this.timerLoading,this.timerCBar,this.timerVCanvas];for(i=0;i0){name.lineTo(d[0],d[1])}else{name.moveTo(d[0],d[1])}}name.closePath();name.fill()},canvasFillRect:function(name,path){for(var i=0;i-1){this.elementArr.splice(def,1)}var childs=f.childNodes;for(var i=childs.length-1;i>=0;i--){f.removeChild(childs[i])}if(f&&f!=null&&f.parentNode){try{if(f.parentNode){f.parentNode.removeChild(f)}}catch(event){}}},getProportionCoor:function(stageW,stageH,vw,vh){var w=0,h=0,x=0,y=0;if(stageW/stageH]+>/g,'')};for(i=0;i0){arr.push(arrs[i])}else{if(arr.length>0){textSubtitles.push(arr)}arr=[]}}for(i=0;i=2){var sn=textSubtitle[0];var startTime=this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[0]));var endTime=this.toSeconds(this.trim(textSubtitle[1].split(' --> ')[1]));var content=[delHtmlTag(textSubtitle[2])];if(textSubtitle.length>2){for(var j=3;j=thisTemp.numberTotal){thisTemp.stop()}};this.start=function(){if(!thisTemp.runing){thisTemp.runing=true;thisTemp.timeObj=window.setInterval(thisTemp.startFun,time)}};this.stop=function(){if(thisTemp.runing){thisTemp.runing=false;window.clearInterval(thisTemp.timeObj);thisTemp.timeObj=null}};if(time){this.time=time}if(fun){this.fun=fun}if(number){this.numberTotal=number}this.start()},toSeconds:function(t){var s=0.0;if(t){var p=t.split(':');for(i=0;i + + + + true + 30 + 100 + true + 0 + true + true + 200 + true + true + 200 + + true + true + true + true + true + + 10 + 0.1 + 1 + true + false + + false + false + true + true + + + false + 2 + start + + 1 + false + true + + + + 30 + , + + adPlay,adPause,playOrPause,videoPlay,videoPause,videoMute,videoEscMute,videoClear,changeVolume,fastBack,fastNext,videoSeek,newVideo,getMetaDate,videoRotation,videoBrightness,videoContrast,videoSaturation,videoHue,videoZoom,videoProportion,videoError,addListener,removeListener,addElement,getElement,deleteElement,animate,animateResume,animatePause,deleteAnimate,changeConfig,getConfig,openUrl,fullScreen,quitFullScreen,switchFull,screenshot,custom,changeControlBarShow,getCurrentSrc + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/mask_detection/web/js/ckplayer/hls/LICENSE b/demo/mask_detection/web/js/ckplayer/hls/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..8f263a03ac644efa1a22ca4d097cefc2dc859076 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/LICENSE @@ -0,0 +1,28 @@ +Copyright (c) 2017 Dailymotion (http://www.dailymotion.com) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +src/remux/mp4-generator.js and src/demux/exp-golomb.js implementation in this project +are derived from the HLS library for video.js (https://github.com/videojs/videojs-contrib-hls) + +That work is also covered by the Apache 2 License, following copyright: +Copyright (c) 2013-2015 Brightcove + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/demo/mask_detection/web/js/ckplayer/hls/hls.js b/demo/mask_detection/web/js/ckplayer/hls/hls.js new file mode 100644 index 0000000000000000000000000000000000000000..3a95d08e8d4a1e0acb6eb40589ba928914bc40ec --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/hls.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){var e;return function e(t,r,i){function a(s,o){if(!r[s]){if(!t[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[s]={exports:{}};t[s][0].call(d.exports,function(e){var r=t[s][1][e];return a(r?r:e)},d,d.exports,e,t,r,i)}return r[s].exports}for(var n="function"==typeof require&&require,s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.trace),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function r(){this.removeListener(e,r),i||(i=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var i=!1;return r.listener=t,this.on(e,r),this},i.prototype.removeListener=function(e,t){var r,i,n,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],n=r.length,i=-1,r===t||a(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(o=n;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){i=o;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],a(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(t,r,i){!function(t){var a=/^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,n=/^([^\/;?#]*)(.*)$/,s={buildAbsoluteURL:function(e,t,r){if(r=r||{},e=e.trim(),!(t=t.trim())){if(!r.alwaysNormalize)return e;var i=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");return i.path=s.normalizePath(i.path),s.buildURLFromParts(i)}var a=this.parseURL(t);if(!a)throw new Error("Error trying to parse relative URL.");if(a.scheme)return r.alwaysNormalize?(a.path=s.normalizePath(a.path),s.buildURLFromParts(a)):t;var o=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");if(!o.netLoc&&o.path&&"/"!==o.path[0]){var l=n.exec(o.path);o.netLoc=l[1],o.path=l[2]}o.netLoc&&!o.path&&(o.path="/");var u={scheme:o.scheme,netLoc:a.netLoc,path:null,params:a.params,query:a.query,fragment:a.fragment};if(!a.netLoc&&(u.netLoc=o.netLoc,"/"!==a.path[0]))if(a.path){var d=o.path,f=d.substring(0,d.lastIndexOf("/")+1)+a.path;u.path=s.normalizePath(f)}else u.path=o.path,a.params||(u.params=o.params,a.query||(u.query=o.query));return null===u.path&&(u.path=r.alwaysNormalize?s.normalizePath(a.path):a.path),s.buildURLFromParts(u)},parseURL:function(e){var t=a.exec(e);return t?{scheme:t[1]||"",netLoc:t[2]||"",path:t[3]||"",params:t[4]||"",query:t[5]||"",fragment:t[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(/(?:\/|^)\.(?=\/)/g,"");e.length!==(e=e.replace(/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};"object"==typeof i&&"object"==typeof r?r.exports=s:"function"==typeof e&&e.amd?e([],function(){return s}):"object"==typeof i?i.URLToolkit=s:t.URLToolkit=s}(this)},{}],3:[function(e,t,r){var i=arguments[3],a=arguments[4],n=arguments[5],s=JSON.stringify;t.exports=function(e,t){function r(e){p[e]=!0;for(var t in a[e][1]){var i=a[e][1][t];p[i]||r(i)}}for(var o,l=Object.keys(n),u=0,d=l.length;u500*r.duration/o){var l=e.levels,d=Math.max(1,n.bw?n.bw/8:1e3*n.loaded/s),f=l[r.level],c=f.realBitrate?Math.max(f.realBitrate,f.bitrate):f.bitrate,g=n.total?n.total:Math.max(n.loaded,Math.round(r.duration*c/8)),p=t.currentTime,y=(g-n.loaded)/d,m=(h.default.bufferInfo(t,p,e.config.maxBufferHole).end-p)/o;if(m<2*r.duration/o&&y>m){var E=void 0,b=void 0;for(b=r.level-1;b>a;b--){var T=l[b].realBitrate?Math.max(l[b].realBitrate,l[b].bitrate):l[b].bitrate;if((E=r.duration*T/(6.4*d))=i;u--){var d=l[u],f=d.details,c=f?f.totalduration/f.fragments.length:t,h=!!f&&f.live,g=void 0;g=u<=e?s*r:o*r;var p=l[u].realBitrate?Math.max(l[u].realBitrate,l[u].bitrate):l[u].bitrate,y=p*c/g;if(v.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+u+"/"+Math.round(g)+"/"+p+"/"+c+"/"+n+"/"+y),g>p&&(!y||h||y=0)return c;v.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,y=i.abrBandWidthUpFactor;if(0===f){var m=this.bitrateTestDelay;if(m){g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,v.logger.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=y=1}}return c=this._findBestLevel(s,o,d,a,t,f+g,p,y,r),Math.max(c,0)}}]),t}(f.default);r.default=m},{30:30,31:31,32:32,34:34,48:48,50:50}],6:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1?(k.logger.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=R.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=R.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var e,t,r,i=this.hls,a=i.config;switch(this.state){case R.ERROR:case R.PAUSED:case R.BUFFER_FLUSHING:break;case R.STARTING:this.state=R.WAITING_TRACK,this.loadedmetadata=!1;break;case R.IDLE:var n=this.tracks;if(!n)break;if(!this.media&&(this.startFragRequested||!a.startFragPrefetch))break;e=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition;var s=this.mediaBuffer?this.mediaBuffer:this.media,o=f.default.bufferInfo(s,e,a.maxBufferHole),l=o.len,d=o.end,c=this.fragPrevious,h=a.maxMaxBufferLength,g=this.audioSwitch,p=this.trackId;if((lE||o.nextStart))return;k.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=E+.05}if(r.initSegment&&!r.initSegment.data)T=r.initSegment;else if(d<=E){if(T=y[0],r.live&&T.loadIdx&&T.loadIdx===this.fragLoadIdx){var A=o.nextStart?o.nextStart:E;return k.logger.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(A+.05)),void(this.media.currentTime=A+.05)}}else{var S=void 0,L=a.maxFragLookUpTolerance,w=c?y[c.sn-y[0].sn+1]:void 0,D=function(e){var t=Math.min(L,e.duration);return e.start+e.duration-t<=d?1:e.start-t>d&&e.start?-1:0};db-L&&(L=0),S=w&&!D(w)?w:u.default.search(y,D)):S=y[m-1],S&&(T=S,E=S.start,c&&T.level===c.level&&T.sn===c.sn&&(T.snO&&Math.abs(this.fragLoadIdx-T.loadIdx)=P||C)&&(k.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.WAITING_INIT_PTS:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.tracks;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){this.state===R.ENDED&&(this.state=R.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaEnded",value:function(){this.startPosition=this.lastCurrentTime=0}},{key:"onAudioTracksUpdated",value:function(e){k.logger.log("audio tracks updated"),this.tracks=e.audioTracks}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url;this.trackId=e.id,this.state=R.IDLE,this.fragCurrent=null,this.state=R.PAUSED,this.waitingFragment=null,t?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=R.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()}},{key:"onAudioTrackLoaded",value:function(e){var t=e.details,r=e.id,i=this.tracks[r],a=t.totalduration,n=0;if(k.logger.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,t.PTSKnown?k.logger.log("live audio playlist sliding:"+n.toFixed(3)):k.logger.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live audio playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,!this.startFragRequested){if(this.startPosition===-1){var o=t.startTimeOffset;isNaN(o)?this.startPosition=0:(k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o)}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_TRACK&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,u=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",d=this.stats=e.stats;if("initSegment"===o)this.state=R.IDLE,d.tparsed=d.tbuffered=performance.now(),a.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:d,frag:t,id:"audio"}),this.tick();else{this.state=R.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new h.default(this.hls,"audio"));var f=this.initPTS[l],c=a.initSegment?a.initSegment.data:[];if(c||void 0!==f){this.pendingBuffering=!0,k.logger.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,c,u,null,t,n,!1,f)}else k.logger.log("unknown video PTS for continuity counter "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.state=R.WAITING_INIT_PTS}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i=e.tracks,a=void 0;if(i.video&&delete i.video,a=i.audio){a.levelCodec="mp4a.40.2",a.id=e.id,this.hls.trigger(v.default.BUFFER_CODECS,i),k.logger.log("audio track:audio,container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var n=a.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,s))}this.tick()}}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===R.PARSING){var a=this.trackId,n=this.tracks[a],s=this.hls;isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),E.default.updateFragPTSDTS(n.details,r.sn,e.startPTS,e.endPTS);var o=this.audioSwitch,l=this.media,u=!1;if(o&&l)if(l.readyState){var d=l.currentTime;k.logger.log("switching audio track : currentTime:"+d),d>=e.startPTS&&(k.logger.log("switching audio track : flushing all audio"),this.state=R.BUFFER_FLUSHING,s.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),u=!0,this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a}))}else this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a});var f=this.pendingData;this.audioSwitch||([e.data1,e.data2].forEach(function(t){t&&t.length&&f.push({type:e.type,data:t,parent:"audio",content:"data"})}),!u&&f.length&&(f.forEach(function(e){t.state===R.PARSING&&(t.pendingBuffering=!0,t.hls.trigger(v.default.BUFFER_APPENDING,e))}),this.pendingData=[],this.appended=!0)),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onBufferCreated",value:function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0)}},{key:"onBufferAppended",value:function(e){if("audio"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=performance.now(),r.trigger(v.default.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("audio buffered : "+T.default.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!e.fatal){var r=this.fragLoadError;r?r++:r=1;var i=this.config;if(r<=i.fragLoadingMaxRetry){this.fragLoadError=r,t.loadCounter=0;var a=Math.min(Math.pow(2,r-1)*i.fragLoadingRetryDelay,i.fragLoadingMaxRetryTimeout);k.logger.warn("audioStreamController: frag loading failed, retry in "+a+" ms"),this.retryDate=performance.now()+a,this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("audioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==R.ERROR&&(this.state=e.fatal?R.ERROR:R.IDLE,k.logger.warn("audioStreamController: "+e.details+" while loading frag,switch to "+this.state+" state ..."));break;case _.ErrorDetails.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===R.PARSING||this.state===R.PARSED)){var n=this.mediaBuffer,s=this.media.currentTime;if(n&&f.default.isBuffered(n,s)&&f.default.isBuffered(n,s+.5)){var o=this.config;o.maxMaxBufferLength>=o.maxBufferLength&&(o.maxMaxBufferLength/=2,k.logger.warn("audio:reduce max buffer length to "+o.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*o.fragLoadingLoopThreshold),this.state=R.IDLE}else k.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=R.BUFFER_FLUSHING,this.hls.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}}},{key:"onBufferFlushed",value:function(){var e=this,t=this.pendingData;t&&t.length?(k.logger.log("appending pending audio data on Buffer Flushed"),t.forEach(function(t){e.hls.trigger(v.default.BUFFER_APPENDING,t)}),this.appended=!0,this.pendingData=[],this.state=R.PARSED):(this.state=R.IDLE,this.fragPrevious=null,this.tick())}},{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,k.logger.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],7:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){this.updateTrack(this.trackId)}},{key:"onManifestLoading",value:function(){this.tracks=[],this.trackId=-1}},{key:"onManifestLoaded",value:function(e){var t=this,r=e.audioTracks||[],i=!1;this.tracks=r,this.hls.trigger(u.default.AUDIO_TRACKS_UPDATED,{audioTracks:r});var a=0;r.forEach(function(e){if(e.default)return t.audioTrack=a,void(i=!0);a++}),i===!1&&r.length&&(c.logger.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)}},{key:"onAudioTrackLoaded",value:function(e){e.id=0&&e=0&&e.1){var a=i.updating;try{i.abort()}catch(e){a=!0,c.logger.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(c.logger.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}}},{key:"onManifestParsed",value:function(e){var t=e.audio,r=e.video,i=0;e.altAudio&&(t||r)&&(i=(t?1:0)+(r?1:0),c.logger.log(i+" sourceBuffer(s) expected")),this.sourceBufferNb=i}},{key:"onMediaAttaching",value:function(e){var t=this.media=e.media;if(t){var r=this.mediaSource=new MediaSource;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),r.addEventListener("sourceopen",this.onmso),r.addEventListener("sourceended",this.onmse),r.addEventListener("sourceclose",this.onmsc),t.src=URL.createObjectURL(r)}}},{key:"onMediaDetaching",value:function(){c.logger.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){c.logger.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this.onmso),e.removeEventListener("sourceended",this.onmse),e.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this.media.src),this.media.removeAttribute("src"),this.media.load()),this.mediaSource=null,this.media=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(u.default.MEDIA_DETACHED)}},{key:"onMediaSourceOpen",value:function(){c.logger.log("media source opened"),this.hls.trigger(u.default.MEDIA_ATTACHED,{media:this.media});var e=this.mediaSource;e&&e.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()}},{key:"checkPendingTracks",value:function(){var e=this.pendingTracks,t=Object.keys(e).length;t&&(this.sourceBufferNb<=t||0===this.sourceBufferNb)&&(this.createSourceBuffers(e),this.pendingTracks={},this.doAppending())}},{key:"onMediaSourceClose",value:function(){c.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){c.logger.log("media source ended")}},{key:"onSBUpdateEnd",value:function(){if(this.audioTimestampOffset){var e=this.sourceBuffer.audio;c.logger.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+this.audioTimestampOffset),e.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var t=this.parent,r=this.segments.reduce(function(e,r){return r.parent===t?e+1:e},0);this.hls.trigger(u.default.BUFFER_APPENDED,{parent:t,pending:r}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()}},{key:"onSBUpdateError",value:function(e){c.logger.error("sourceBuffer error:",e),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferReset",value:function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this.onsbue),r.removeEventListener("error",this.onsbe)}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}},{key:"onBufferCodecs",value:function(e){if(0===Object.keys(this.sourceBuffer).length){for(var t in e)this.pendingTracks[t]=e[t];var r=this.mediaSource;r&&"open"===r.readyState&&this.checkPendingTracks()}}},{key:"createSourceBuffers",value:function(e){var t=this.sourceBuffer,r=this.mediaSource;for(var i in e)if(!t[i]){var a=e[i],n=a.levelCodec||a.codec,s=a.container+";codecs="+n;c.logger.log("creating sourceBuffer("+s+")");try{var o=t[i]=r.addSourceBuffer(s);o.addEventListener("updateend",this.onsbue),o.addEventListener("error",this.onsbe),this.tracks[i]={codec:n,container:a.container},a.buffer=o}catch(e){c.logger.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(u.default.BUFFER_CREATED,{tracks:e})}},{key:"onBufferAppending",value:function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())}},{key:"onBufferAppendFail",value:function(e){c.logger.error("sourceBuffer error:",e.event),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferEos",value:function(e){var t=this.sourceBuffer,r=e.type;for(var i in t)r&&i!==r||t[i].ended||(t[i].ended=!0,c.logger.log(i+" sourceBuffer now EOS"));this.checkEos()}},{key:"checkEos",value:function(){var e=this.sourceBuffer,t=this.mediaSource;if(!t||"open"!==t.readyState)return void(this._needsEos=!1);for(var r in e){var i=e[r];if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}c.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){c.logger.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}},{key:"onBufferFlushing",value:function(e){this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}),this.flushBufferCounter=0,this.doFlush()}},{key:"onLevelUpdated",value:function(e){var t=e.details;0!==t.fragments.length&&(this._levelDuration=t.totalduration+t.fragments[0].start,this.updateMediaElementDuration())}},{key:"updateMediaElementDuration",value:function(){var e=this.media,t=this.mediaSource,r=this.sourceBuffer,i=this._levelDuration;if(null!==i&&e&&t&&r&&0!==e.readyState&&"open"===t.readyState){for(var a in r)if(r[a].updating)return;null===this._msDuration&&(this._msDuration=t.duration);var n=e.duration;(i>this._msDuration&&i>n||n===1/0||isNaN(n))&&(c.logger.log("Updating mediasource duration to "+i.toFixed(3)),this._msDuration=t.duration=i)}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r)t+=r[i].buffered.length}catch(e){c.logger.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(u.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var e=this.hls,t=this.sourceBuffer,r=this.segments;if(Object.keys(t).length){if(this.media.error)return this.segments=[],void c.logger.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(r&&r.length){var i=r.shift();try{var a=i.type,n=t[a];n?n.updating?r.unshift(i):(n.ended=!1,this.parent=i.parent,n.appendBuffer(i.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(t){c.logger.error("error while trying to append buffer:"+t.message),r.unshift(i);var s={type:h.ErrorTypes.MEDIA_ERROR,parent:i.parent};if(22===t.code)return this.segments=[],s.details=h.ErrorDetails.BUFFER_FULL_ERROR,s.fatal=!1,void e.trigger(u.default.ERROR,s);if(this.appendError?this.appendError++:this.appendError=1,s.details=h.ErrorDetails.BUFFER_APPEND_ERROR,this.appendError>e.config.appendErrorMaxRetry)return c.logger.log("fail "+e.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),r=[],s.fatal=!0,void e.trigger(u.default.ERROR,s);s.fatal=!1,e.trigger(u.default.ERROR,s)}}}}},{key:"flushBuffer",value:function(e,t,r){var i,a,n,s,o,l,u=this.sourceBuffer;if(Object.keys(u).length){if(c.logger.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+e+"/"+t),this.flushBufferCounter.5)return this.flushBufferCounter++,c.logger.log("flush "+d+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+this.media.currentTime),i.remove(o,l),!1}catch(e){c.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else c.logger.warn("abort flushing too many retries");c.logger.log("buffer flushed")}return!0}}]),t}(f.default);r.default=g},{30:30,31:31,32:32,50:50}],9:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}},{key:"getMaxLevel",value:function(e){var t=0,r=void 0,i=void 0,a=this.mediaWidth,n=this.mediaHeight,s=0,o=0;for(r=0;r<=e&&(i=this.levels[r],!this.isLevelRestricted(r))&&(t=r,s=i.width,o=i.height,!(a<=s||n<=o));r++);return t}},{key:"isLevelRestricted",value:function(e){return!(!this.restrictedLevels||this.restrictedLevels.indexOf(e)===-1)}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0,t=this.media;return t&&(e=t.width||t.clientWidth||t.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0,t=this.media;return t&&(e=t.height||t.clientHeight||t.offsetHeight,e*=this.contentScaleFactor),e}}]),t}(f.default);r.default=c},{31:31,32:32}],10:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&n>l.config.fpsDroppedMonitoringThreshold*s){var d=l.currentLevel;c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+d),d>0&&(l.autoLevelCapping===-1||l.autoLevelCapping>=d)&&(d-=1,l.trigger(u.default.FPS_DROP_LEVEL_CAPPING,{level:d,droppedLevel:l.currentLevel}),l.autoLevelCapping=d,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}}},{key:"checkFPSInterval",value:function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],11:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0})}else o.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:o.url,reason:"no level with compatible codecs found in manifest"})}},{key:"setLevelInternal",value:function(e){var t=this._levels,r=this.hls;if(e>=0&&e1&&a.loadErrore&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),e!==-1&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return this._manualLevel!==-1?this._manualLevel:this.hls.nextAutoLevel},set:function(e){this.level=e,this._manualLevel===-1&&(this.hls.nextAutoLevel=e)}}]),t}(f.default);r.default=p},{30:30,31:31,32:32,34:34,50:50}],12:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1&&(k.logger.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=R.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this.forceStartLoad=!0,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED,this.forceStartLoad=!1}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){switch(this.state){case R.ERROR:break;case R.BUFFER_FLUSHING:this.fragLoadError=0;break;case R.IDLE:if(!this._doTickIdle())return;break;case R.WAITING_LEVEL:var e=this.levels[this.level];e&&e.details&&(this.state=R.IDLE);break;case R.FRAG_LOADING_WAITING_RETRY:var t=performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(k.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.ERROR:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"_doTickIdle",value:function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&!r&&(this.startFragRequested||!t.startFragPrefetch))return!0;var i=void 0;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a],s=n.bitrate,o=void 0;o=s?Math.max(8*t.maxBufferSize/s,t.maxBufferLength):t.maxBufferLength,o=Math.min(o,t.maxMaxBufferLength);var l=f.default.bufferInfo(this.mediaBuffer?this.mediaBuffer:r,i,t.maxBufferHole),u=l.len;if(u>=o)return!0;k.logger.trace("buffer length of "+u.toFixed(3)+" is below max of "+o.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var d=n.details;if(void 0===d||d.live&&this.levelLastLoaded!==a)return this.state=R.WAITING_LEVEL,!0;var c=this.fragPrevious;if(!d.live&&c&&c.sn===d.endSN){if(Math.min(r.duration,c.start+c.duration)-Math.max(l.end,c.start)<=Math.max(.2,c.duration/2)){var h={};return this.altAudio&&(h.type="video"),this.hls.trigger(v.default.BUFFER_EOS,h),this.state=R.ENDED,!0}}return this._fetchPayloadOrEos(i,l,d)}},{key:"_fetchPayloadOrEos",value:function(e,t,r){var i=this.fragPrevious,a=this.level,n=r.fragments,s=n.length;if(0===s)return!1;var o=n[0].start,l=n[s-1].start+n[s-1].duration,u=t.end,d=void 0;if(r.initSegment&&!r.initSegment.data)d=r.initSegment;else if(r.live){var f=this.config.initialLiveManifestSize;if(sf&&(l.currentTime=f)}if(e.PTSKnown&&t>i&&l&&l.readyState)return null;if(this.startFragRequested&&!e.PTSKnown){if(a){var c=a.sn+1;c>=e.startSN&&c<=e.endSN&&(u=n[c-e.startSN],k.logger.log("live playlist, switching playlist, load frag with next SN: "+u.sn))}u||(u=n[Math.min(s-1,Math.round(s/2))],k.logger.log("live playlist, switching playlist, unknown, load middle frag : "+u.sn))}return u}},{key:"_findFragment",value:function(e,t,r,i,a,n,s){var o=this.hls.config,l=void 0,d=void 0,f=o.maxFragLookUpTolerance,c=t?i[t.sn-i[0].sn+1]:void 0,h=function(e){var t=Math.min(f,e.duration);return e.start+e.duration-t<=a?1:e.start-t>a&&e.start?-1:0};if(an-f&&(f=0),d=c&&!h(c)?c:u.default.search(i,h)):d=i[r-1],d){l=d;var g=l.sn-s.startSN,v=t&&l.level===t.level,p=i[g-1],y=i[g+1];if(v&&l.sn===t.sn)if(l.sno.maxBufferHole&&t.dropped&&g?(l=p,k.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),t.loadCounter--):(l=y,k.logger.log("SN just loaded, load next one: "+l.sn)) +}else l=null;else l.dropped&&!v&&(y&&y.backtracked?(k.logger.warn("Already backtracked from fragment "+(g+1)+", will not backtrack to fragment "+g+". Loading fragment "+(g+1)),l=y):(k.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),l.dropped=0,p?(p.loadCounter&&p.loadCounter--,l=p):l=null))}return l}},{key:"_loadFragmentOrKey",value:function(e,t,r,i,a){var n=this.hls,s=n.config;if(!e.decryptdata||null==e.decryptdata.uri||null!=e.decryptdata.key){if(k.logger.log("Loading "+e.sn+" of ["+r.startSN+" ,"+r.endSN+"],level "+t+", currentTime:"+i.toFixed(3)+",bufferEnd:"+a.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,e.loadCounter){e.loadCounter++;var o=s.fragLoadingLoopThreshold;if(e.loadCounter>o&&Math.abs(this.fragLoadIdx-e.loadIdx)t.endPTS?1:0})}},{key:"followingBufferedFrag",value:function(e){return e?this.getBufferedFrag(e.endPTS+.5):null}},{key:"_checkFragmentChanged",value:function(){var e,t,r=this.media;if(r&&r.readyState&&r.seeking===!1&&(t=r.currentTime,t>r.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=t),f.default.isBuffered(r,t)?e=this.getBufferedFrag(t):f.default.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(v.default.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(v.default.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}}},{key:"immediateLevelSwitch",value:function(){if(k.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e=this.media,t=void 0;e?(t=e.paused,e.pause()):t=!0,this.previouslyPaused=t}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}},{key:"immediateLevelSwitchEnd",value:function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,f.default.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var e=this.media;if(e&&e.readyState){var t=void 0,r=void 0,i=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,r=this.getBufferedFrag(e.currentTime),r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var a=this.hls.nextLoadLevel,n=this.levels[a],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.bitrate/(1e3*s)+1:0}if((i=this.getBufferedFrag(e.currentTime+t))&&(i=this.followingBufferedFrag(i))){var o=this.fragCurrent;o&&o.loader&&o.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(i.startPTS,Number.POSITIVE_INFINITY)}}}},{key:"flushMainBuffer",value:function(e,t){this.state=R.BUFFER_FLUSHING;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(v.default.BUFFER_FLUSHING,r)}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0,e.backtracked=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){var e=this.media,t=e?e.currentTime:void 0,r=this.config;if(k.logger.log("media seeking to "+t.toFixed(3)),this.state===R.FRAG_LOADING){var i=this.mediaBuffer?this.mediaBuffer:e,a=f.default.bufferInfo(i,t,this.config.maxBufferHole),n=this.fragCurrent;if(0===a.len&&n){var s=r.maxFragLookUpTolerance,o=n.start-s,l=n.start+n.duration+s;tl?(n.loader&&(k.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=R.IDLE):k.logger.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===R.ENDED&&(this.state=R.IDLE);e&&(this.lastCurrentTime=t),this.state!==R.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*r.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=t),this.tick()}},{key:"onMediaSeeked",value:function(){k.logger.log("media seeked to "+this.media.currentTime.toFixed(3)),this.tick()}},{key:"onMediaEnded",value:function(){k.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){k.logger.log("trigger BUFFER_RESET"),this.hls.trigger(v.default.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0}},{key:"onManifestParsed",value:function(e){var t,r=!1,i=!1;e.levels.forEach(function(e){(t=e.audioCodec)&&(t.indexOf("mp4a.40.2")!==-1&&(r=!0),t.indexOf("mp4a.40.5")!==-1&&(i=!0))}),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&k.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=e.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var a=this.config;(a.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(a.startPosition)}},{key:"onLevelLoaded",value:function(e){var t=e.details,r=e.level,i=this.levels[r],a=t.totalduration,n=0;if(k.logger.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),this.levelLastLoaded=r,t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(n,s),t.PTSKnown?k.logger.log("live playlist sliding:"+n.toFixed(3)):k.logger.log("live playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,this.hls.trigger(v.default.LEVEL_UPDATED,{details:t,level:r}),this.startFragRequested===!1){if(this.startPosition===-1||this.lastCurrentTime===-1){var o=t.startTimeOffset;isNaN(o)?t.live?(this.startPosition=this.computeLivePosition(n,t),k.logger.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(o<0&&(k.logger.log("negative start time offset "+o+", count from end of last fragment"),o=n+a+o),k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_LEVEL&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"main"===r.type&&r.level===t.level&&r.sn===t.sn){var i=e.stats,a=this.levels[t.level],n=a.details;if(k.logger.log("Loaded "+t.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+t.level),this.bitrateTest=!1,this.stats=i,r.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=R.IDLE,this.startFragRequested=!1,i.tparsed=i.tbuffered=performance.now(),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else if("initSegment"===r.sn)this.state=R.IDLE,i.tparsed=i.tbuffered=performance.now(),n.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else{this.state=R.PARSING;var s=n.totalduration,o=t.level,l=t.sn,u=this.config.defaultAudioCodec||a.audioCodec;this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),void 0===u&&(u=this.lastAudioCodec),u&&(u=u.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,k.logger.log("Parsing "+l+" of ["+n.startSN+" ,"+n.endSN+"],level "+o+", cc "+t.cc);var d=this.demuxer;d||(d=this.demuxer=new h.default(this.hls,"main"));var f=this.media,c=f&&f.seeking,g=!c&&(n.PTSKnown||!n.live),p=n.initSegment?n.initSegment.data:[];d.push(e.payload,p,u,a.videoCodec,t,s,g,void 0)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i,a,n=e.tracks;if(n.audio&&this.altAudio&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),s=s.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&o.indexOf("firefox")===-1&&(s="mp4a.40.5"),o.indexOf("android")!==-1&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",k.logger.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}a=n.video,a&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(v.default.BUFFER_CODECS,n);for(i in n){a=n[i],k.logger.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===R.PARSING){var a=this.levels[this.level],n=r;if(isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped){if(!n.backtracked)return n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=R.IDLE,void this.tick();k.logger.warn("Already backtracked on this fragment, appending with the gap")}else n.backtracked=!1;var s=E.default.updateFragPTSDTS(a.details,n.sn,e.startPTS,e.endPTS,e.startDTS,e.endDTS),o=this.hls;o.trigger(v.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach(function(r){r&&r.length&&t.state===R.PARSING&&(t.appended=!0,t.pendingBuffering=!0,o.trigger(v.default.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))}),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url,r=e.id;if(!t){if(this.mediaBuffer!==this.media){k.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i.loader&&(k.logger.log("switching to main audio track, cancel main fragment load"),i.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.IDLE}var a=this.hls;a.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),a.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:r}),this.altAudio=!1}}},{key:"onAudioTrackSwitched",value:function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(k.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()}},{key:"onBufferCreated",value:function(e){var t=e.tracks,r=void 0,i=void 0,a=!1;for(var n in t){var s=t[n];"main"===s.id?(i=n,r=s,"video"===n&&(this.videoBuffer=t[n].buffer)):a=!0}a&&r?(k.logger.log("alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}},{key:"onBufferAppended",value:function(e){if("main"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent;if(e){var t=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("main buffered : "+T.default.toString(t.buffered));var r=this._bufferedFrags.filter(function(e){return f.default.isBuffered(t,(e.startPTS+e.endPTS)/2)});r.push(e),this._bufferedFrags=r.sort(function(e,t){return e.startPTS-t.startPTS}),this.fragPrevious=e;var i=this.stats;i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.total/(i.tbuffered-i.tfirst)),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:e,id:"main"}),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=this.media,i=r&&f.default.isBuffered(r,r.currentTime)&&f.default.isBuffered(r,r.currentTime+.5);switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:if(!e.fatal){var a=this.fragLoadError;a?a++:a=1;var n=this.config;if(a<=n.fragLoadingMaxRetry||i||t.autoLevel&&t.level){this.fragLoadError=a,t.loadCounter=0;var s=Math.min(Math.pow(2,a-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);k.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:e.fatal||(i?(this._reduceMaxBufferLength(t.duration),this.state=R.IDLE):t.autoLevel&&0!==t.level||(e.fatal=!0,this.state=R.ERROR));break;case _.ErrorDetails.LEVEL_LOAD_ERROR:case _.ErrorDetails.LEVEL_LOAD_TIMEOUT:this.state!==R.ERROR&&(e.fatal?(this.state=R.ERROR,k.logger.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):this.state===R.WAITING_LEVEL&&(this.state=R.IDLE));break;case _.ErrorDetails.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==R.PARSING&&this.state!==R.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=R.IDLE):(k.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}}},{key:"_reduceMaxBufferLength",value:function(e){var t=this.config;t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,k.logger.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*t.fragLoadingLoopThreshold)}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var t=e.currentTime,r=this.mediaBuffer?this.mediaBuffer:e,i=r.buffered;if(!this.loadedmetadata&&i.length){this.loadedmetadata=!0;var a=e.seeking?t:this.startPosition,n=f.default.isBuffered(r,a);t===a&&n||(k.logger.log("target start position:"+a),n||(a=i.start(0),k.logger.log("target start position not buffered, seek to buffered.start(0) "+a)),k.logger.log("adjust currentTime from "+t+" to "+a),e.currentTime=a)}else if(this.immediateSwitch)this.immediateLevelSwitchEnd();else{var s=f.default.bufferInfo(e,t,0),o=!(e.paused||e.ended||0===e.buffered.length),l=t!==this.lastCurrentTime,u=this.config;if(l)this.stallReported&&(k.logger.warn("playback not stuck anymore @"+t+", after "+Math.round(performance.now()-this.stalled)+"ms"),this.stallReported=!1),this.stalled=void 0,this.nudgeRetry=0;else if(o){var d=performance.now(),c=this.hls;if(this.stalled){var h=d-this.stalled,g=s.len,p=this.nudgeRetry||0;if(g<=.5&&h>1e3*u.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in low buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g}));var y=s.nextStart,m=y-t;if(y&&m0){this.nudgeRetry=++p;var E=p*u.nudgeOffset;k.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+y+" + nudge "+E),e.currentTime=y+E,this.stalled=void 0,c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:y+E-t})}}else if(g>.5&&h>1e3*u.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in high buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g})),this.stalled=void 0,this.nudgeRetry=++p,p"+e),this.hls.trigger(v.default.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],13:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r-1&&this.vttFragQueues[this.currentTrackId].length){var e=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.hls.trigger(u.default.FRAG_LOADING,{frag:e})}}},{key:"onSubtitleFragProcessed",value:function(e){e.success&&this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn),this.currentlyProcessing=null,this.nextFrag()}},{key:"onError",value:function(e){var t=e.frag;t&&"subtitle"!==t.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())}},{key:"onSubtitleTracksUpdated",value:function(e){var t=this;c.logger.log("subtitle tracks updated"),this.tracks=e.subtitleTracks,this.clearVttFragQueues(),this.vttFragSNsProcessed={},this.tracks.forEach(function(e){t.vttFragSNsProcessed[e.id]=[]})}},{key:"onSubtitleTrackSwitch",value:function(e){this.currentTrackId=e.id,this.clearVttFragQueues()}},{key:"onSubtitleTrackLoaded",value:function(e){var t=this.vttFragSNsProcessed[e.id],r=this.vttFragQueues[e.id],i=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(e){return t.indexOf(e.sn)>-1},n=function(e){return r.some(function(t){return t.sn===e.sn})};e.details.fragments.forEach(function(t){a(t)||t.sn===i||n(t)||(t.trackId=e.id,r.push(t))}),this.nextFrag()}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],14:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r=0&&e0;)e.removeCue(e.cues[0])}function l(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}function u(e,t,r,i){return Math.min(t,i)-Math.max(e,r)}Object.defineProperty(r,"__esModule",{value:!0});var d=function(){function e(e,t){for(var r=0;r=0&&(o[0]=Math.min(o[0],t),o[1]=Math.max(o[1],r),n=!0,l/(r-t)>.5))return}n||a.push([t,r]),this.Cues.newCue(this[e],t,r,i)}},{key:"onInitPtsFound",value:function(e){var t=this;void 0===this.initPTS&&(this.initPTS=e.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(e){t.onFragLoaded(e)}),this.unparsedVttFrags=[])}},{key:"getExistingTrack",value:function(e){var t=this.media;if(t)for(var r=0;r>>8^255&p^99,e[h]=p,t[p]=h;var y=c[h],m=c[y],E=c[m],b=257*c[p]^16843008*p;i[h]=b<<24|b>>>8,a[h]=b<<16|b>>>16,n[h]=b<<8|b>>>24,s[h]=b,b=16843009*E^65537*m^257*y^16843008*h,l[p]=b<<24|b>>>8,u[p]=b<<16|b>>>16,d[p]=b<<8|b>>>24,f[p]=b,h?(h=y^c[c[c[E^y]]],g^=c[c[g]]):h=g=1}}},{key:"expandKey",value:function(e){for(var t=this.uint8ArrayToUint32Array_(e),r=!0,i=0;i>8|e>>>24}},{key:"decrypt",value:function(e,t,r){for(var i,a,n=this.keySize+6,s=this.invKeySchedule,o=this.invSBox,l=this.invSubMix,u=l[0],d=l[1],f=l[2],c=l[3],h=this.uint8ArrayToUint32Array_(r),g=h[0],v=h[1],p=h[2],y=h[3],m=new Int32Array(e),E=new Int32Array(m.length),b=void 0,T=void 0,_=void 0,k=void 0,R=void 0,A=void 0,S=void 0,L=void 0,w=void 0,D=void 0,O=void 0,I=void 0,P=this.networkToHostOrderSwap;t>>24]^d[A>>16&255]^f[S>>8&255]^c[255&L]^s[i],T=u[A>>>24]^d[S>>16&255]^f[L>>8&255]^c[255&R]^s[i+1],_=u[S>>>24]^d[L>>16&255]^f[R>>8&255]^c[255&A]^s[i+2],k=u[L>>>24]^d[R>>16&255]^f[A>>8&255]^c[255&S]^s[i+3],R=b,A=T,S=_,L=k,i+=4;b=o[R>>>24]<<24^o[A>>16&255]<<16^o[S>>8&255]<<8^o[255&L]^s[i],T=o[A>>>24]<<24^o[S>>16&255]<<16^o[L>>8&255]<<8^o[255&R]^s[i+1],_=o[S>>>24]<<24^o[L>>16&255]<<16^o[R>>8&255]<<8^o[255&A]^s[i+2],k=o[L>>>24]<<24^o[R>>16&255]<<16^o[A>>8&255]<<8^o[255&S]^s[i+3],i+=3,E[t]=P(b^g),E[t+1]=P(k^v),E[t+2]=P(_^p),E[t+3]=P(T^y),g=w,v=D,p=O,y=I,t+=4}return E.buffer}},{key:"destroy",value:function(){this.key=void 0,this.keySize=void 0,this.ksRows=void 0,this.sBox=void 0,this.invSBox=void 0,this.subMix=void 0,this.invSubMix=void 0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.rcon=void 0}}]),e}();r.default=n},{}],18:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>>5,(s-=h)>0&&c+h+s<=v);)for(g=m+f*u,p={unit:e.subarray(c+h,c+h+s),pts:g,dts:g},a.samples.push(p),a.len+=s,c+=s+h,f++;c>>6),(o=(60&t[r+2])>>>2)>h.length-1?void e.trigger(Event.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(u=(1&t[r+2])<<2,u|=(192&t[r+3])>>>6,i.logger.log("manifest codec:"+n+",ADTS data:type:"+s+",sampleingIndex:"+o+"["+h[o]+"Hz],channelConfig:"+u),/firefox/i.test(f)?o>=6?(s=5,d=new Array(4),l=o-3):(s=2,d=new Array(2),l=o):f.indexOf("android")!==-1?(s=2,d=new Array(2),l=o):(s=5,d=new Array(4),n&&(n.indexOf("mp4a.40.29")!==-1||n.indexOf("mp4a.40.5")!==-1)||!n&&o>=6?l=o-3:((n&&n.indexOf("mp4a.40.2")!==-1&&o>=6&&1===u||!n&&1===u)&&(s=2,d=new Array(2)),l=o)),d[0]=s<<3,d[0]|=(14&o)>>1,d[1]|=(1&o)<<7,d[1]|=u<<3,5===s&&(d[1]|=(14&l)>>1,d[2]=(1&l)<<7,d[2]|=8,d[3]=0),{config:d,samplerate:h[o],channelCount:u,codec:"mp4a.40."+s,manifestCodec:c})}};t.exports=n},{30:30,50:50}],22:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&null!=t&&null!=t.key&&"AES-128"===t.method){var g=this.decrypter;null==g&&(g=this.decrypter=new d.default(this.observer,this.config));var v,p=this;try{v=performance.now()}catch(e){v=Date.now()}g.decrypt(e,t.key.buffer,t.iv.buffer,function(e){var d;try{d=performance.now()}catch(e){d=Date.now()}p.observer.trigger(o.default.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:d}}),p.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)})}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)}},{key:"pushDecrypted",value:function(e,t,r,i,a,n,s,u,d,f,h,v){var y=this.demuxer;if(!y||s&&!this.probe(e)){var E=this.observer,T=this.typeSupported,_=this.config,k=[{demux:p.default,remux:m.default},{demux:c.default,remux:m.default},{demux:g.default,remux:b.default}];for(var R in k){var A=k[R],S=A.demux.probe;if(S(e)){var L=this.remuxer=new A.remux(E,_,T,this.vendor);y=new A.demux(E,L,_,T),this.probe=S;break}}if(!y)return void E.trigger(o.default.ERROR,{type:l.ErrorTypes.MEDIA_ERROR,details:l.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"no demux matching with content found"});this.demuxer=y}var w=this.remuxer;(s||u)&&(y.resetInitSegment(r,i,a,f),w.resetInitSegment()),s&&(y.resetTimeStamp(),w.resetTimeStamp(v)),"function"==typeof y.setDecryptData&&y.setDecryptData(t),y.append(e,n,d,h)}}]),e}();r.default=T},{18:18,20:20,27:27,29:29,30:30,32:32,42:42,43:43}],23:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var a=e(22),n=i(a),s=e(32),o=i(s),l=e(50),u=e(1),d=i(u),f=function(e){var t=new d.default;t.trigger=function(e){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i1?t-1:0),i=1;ie?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(e){var t=Math.min(this.bitsAvailable,e),r=this.word>>>32-t;return e>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=t,this.bitsAvailable>0?this.word<<=t:this.bytesAvailable>0&&this.loadWord(),t=e-t,t>0&&this.bitsAvailable?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(e){var t,r,i=8,a=8;for(t=0;t=8){var r=e.bin2str(t.subarray(4,8));return["moof","ftyp","styp"].indexOf(r)>=0}return!1}},{key:"bin2str",value:function(e){return String.fromCharCode.apply(null,e)}},{key:"findBox",value:function(t,r){var i,a,n,s,o,l=[];if(!r.length)return null;for(i=0;i1?i+a:t.byteLength,n===r[0]&&(1===r.length?l.push(t.subarray(i+8,s)):(o=e.findBox(t.subarray(i+8,s),r.slice(1)),o.length&&(l=l.concat(o)))),i=s;return l}},{key:"parseInitSegment",value:function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach(function(t){var i=e.findBox(t,["tkhd"])[0];if(i){var a=i[0],n=0===a?12:20,s=i[n]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3];s=s<0?4294967296+s:s;var o=e.findBox(t,["mdia","mdhd"])[0];if(o){a=o[0],n=0===a?12:20;var l=o[n]<<24|o[n+1]<<16|o[n+2]<<8|o[n+3],u=e.findBox(t,["mdia","hdlr"])[0];if(u){var d=e.bin2str(u.subarray(8,12)),f={soun:"audio",vide:"video"}[d];f&&(r[s]={timescale:l,type:f},r[f]={timescale:l,id:s})}}}}),r}},{key:"startDTS",value:function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map(function(r){return e.findBox(r,["tfhd"]).map(function(i){var a,n,s;return a=i[4]<<24|i[5]<<16|i[6]<<8|i[7],n=t[a].timescale||9e4,s=e.findBox(r,["tfdt"]).map(function(e){var t,r;return t=e[0],r=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(r*=Math.pow(2,32),r+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),r})[0],(s=s||1/0)/n})})),n=Math.min.apply(null,a),isFinite(n)?n:0}}]),e}();r.default=o},{32:32}],28:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=e.length)return void r();if(!(e[t].unit.length<32)){var i=this.decrypter.isSync();if(this.decryptAacSample(e,t,r,i),!i)return}}}},{key:"getAvcEncryptedData",value:function(e){for(var t=16*Math.floor((e.length-48)/160)+16,r=new Int8Array(t),i=0,a=32;a<=e.length-16;a+=160,i+=16)r.set(e.subarray(a,a+16),i);return r}},{key:"getAvcDecryptedUnit",value:function(e,t){t=new Uint8Array(t);for(var r=0,i=32;i<=e.length-16;i+=160,r+=16)e.set(t.subarray(r,r+16),i);return e}},{key:"decryptAvcSample",value:function(e,t,r,i,a,n){var s=this.discardEPB(a.data),o=this.getAvcEncryptedData(s),l=this;this.decryptBuffer(o.buffer,function(o){a.data=l.getAvcDecryptedUnit(s,o),n||l.decryptAvcSamples(e,t,r+1,i)})}},{key:"decryptAvcSamples",value:function(e,t,r,i){for(;;t++,r=0){if(t>=e.length)return void i();for(var a=e[t].units;!(r>=a.length);r++){var n=a[r];if(!(n.length<=48||1!==n.type&&5!==n.type)){var s=this.decrypter.isSync();if(this.decryptAvcSample(e,t,r,i,n,s),!s)return}}}}}]),e}();r.default=o},{18:18}],29:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>4>1){if((o=a+5+e[a+4])===a+188)continue}else o=a+4;switch(s){case m:n&&(_&&(l=L(_))&&w(l,!1),_={data:[],size:0}),_&&(_.data.push(e.subarray(o,a+188)),_.size+=a+188-o);break;case E:n&&(k&&(l=L(k))&&(p.isAAC?D(l):O(l)),k={data:[],size:0}),k&&(k.data.push(e.subarray(o,a+188)),k.size+=a+188-o);break;case b:n&&(R&&(l=L(R))&&I(l),R={data:[],size:0}),R&&(R.data.push(e.subarray(o,a+188)),R.size+=a+188-o);break;case 0:n&&(o+=e[o]+1),T=this._pmtId=A(e,o);break;case T:n&&(o+=e[o]+1);var P=S(e,o,this.typeSupported.mpeg===!0||this.typeSupported.mp3===!0,null!=this.sampleAes);m=P.avc,m>0&&(h.id=m),E=P.audio,E>0&&(p.id=E,p.isAAC=P.isAAC),b=P.id3,b>0&&(y.id=b),f&&!c&&(g.logger.log("reparse from beginning"),f=!1,a=-188),c=this.pmtParsed=!0;break;case 17:case 8191:break;default:f=!0}}else this.observer.trigger(u.default.ERROR,{type:v.ErrorTypes.MEDIA_ERROR,details:v.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});_&&(l=L(_))?(w(l,!0),h.pesData=null):h.pesData=_,k&&(l=L(k))?(p.isAAC?D(l):O(l),p.pesData=null):(k&&k.size&&g.logger.log("last AAC PES packet truncated,might overlap between fragments"),p.pesData=k),R&&(l=L(R))?(I(l),y.pesData=null):y.pesData=R,null==this.sampleAes?this.remuxer.remux(p,h,y,this._txtTrack,t,r,i):this.decryptAndRemux(p,h,y,this._txtTrack,t,r,i)}},{key:"decryptAndRemux",value:function(e,t,r,i,a,n,s){if(e.samples&&e.isAAC){var o=this;this.sampleAes.decryptAacSamples(e.samples,0,function(){o.decryptAndRemuxAvc(e,t,r,i,a,n,s)})}else this.decryptAndRemuxAvc(e,t,r,i,a,n,s)}},{key:"decryptAndRemuxAvc",value:function(e,t,r,i,a,n,s){if(t.samples){var o=this;this.sampleAes.decryptAvcSamples(t.samples,0,0,function(){o.remuxer.remux(e,t,r,i,a,n,s)})}else this.remuxer.remux(e,t,r,i,a,n,s)}},{key:"destroy",value:function(){this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){return(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(e,t,r,i){var a,n,s,o,l={audio:-1,avc:-1,id3:-1,isAAC:!0};for(a=(15&e[t+1])<<8|e[t+2],n=t+3+a-4,s=(15&e[t+10])<<8|e[t+11],t+=12+s;t1;){var f=new Uint8Array(d[0].length+d[1].length);f.set(d[0]),f.set(d[1],d[0].length),d[0]=f,d.splice(1,1)}if(t=d[0],1===(t[0]<<16)+(t[1]<<8)+t[2]){if((i=(t[4]<<8)+t[5])&&i>e.size-6)return null;r=t[7],192&r&&(s=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2, +s>4294967295&&(s-=8589934592),64&r?(o=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,o>4294967295&&(o-=8589934592),s-o>54e5&&(g.logger.warn(Math.round((s-o)/9e4)+"s delta between PTS and DTS, align them"),s=o)):o=s),a=t[8],l=a+9,e.size-=l,n=new Uint8Array(e.size);for(var c=0,h=d.length;cv){l-=v;continue}t=t.subarray(l),v-=l,l=0}n.set(t,u),u+=v}return i&&(i-=a+3),{data:n,pts:s,dts:o,len:i}}return null}},{key:"pushAccesUnit",value:function(e,t){if(e.units.length&&e.frame){var r=t.samples,i=r.length;!this.config.forceKeyFrameOnDiscontinuity||e.key===!0||t.sps&&(i||this.contiguous)?(e.id=i,r.push(e)):t.dropped++}e.debug.length&&g.logger.log(e.pts+"/"+e.dts+":"+e.debug)}},{key:"_parseAVCPES",value:function(e,t){var r,i,a,n=this,s=this._avcTrack,o=this._parseAVCNALu(e.data),l=this.avcSample;e.data=null,o.forEach(function(t){switch(t.type){case 1:i=!0,l.frame=!0;var o=t.data;if(o.length>4){var u=new f.default(o).readSliceType();2!==u&&4!==u&&7!==u&&9!==u||(l.key=!0)}break;case 5:i=!0,l||(l=n.avcSample=n._createAVCSample(!0,e.pts,e.dts,"")),l.key=!0,l.frame=!0;break;case 6:i=!0,r=new f.default(n.discardEPB(t.data)),r.readUByte();for(var d=0,c=0,h=!1,g=0;!h&&r.bytesAvailable>1;){d=0;do{g=r.readUByte(),d+=g}while(255===g);c=0;do{g=r.readUByte(),c+=g}while(255===g);if(4===d&&0!==r.bytesAvailable){h=!0;if(181===r.readUByte()){if(49===r.readUShort()){if(1195456820===r.readUInt()){if(3===r.readUByte()){var v=r.readUByte(),p=r.readUByte(),y=31&v,m=[v,p];for(a=0;a0){if(t.pts>=e[r-1].pts)e.push(t);else for(var i=r-1;i>=0;i--)if(t.pts=0)i={data:e.subarray(c,s-u-1),type:n},f.push(i);else{var h=this._getLastNalUnit();if(h&&(d&&s<=4-d&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-d)),(r=s-u-1)>0)){var g=new Uint8Array(h.data.byteLength+r);g.set(h.data,0),g.set(e.subarray(0,r),h.data.byteLength),h.data=g}}s=0&&u>=0&&(i={data:e.subarray(c,o),type:n,state:u},f.push(i)),0===f.length){var v=this._getLastNalUnit();if(v){var p=new Uint8Array(v.data.byteLength+e.byteLength);p.set(v.data,0),p.set(e,v.data.byteLength),v.data=p}}return l.naluState=u,f}},{key:"discardEPB",value:function(e){for(var t,r,i=e.byteLength,a=[],n=1;n1&&(g.logger.log("AAC: align PTS for overlapping frames by "+Math.round((k-p)/90)),p=k)}for(;n+5>>5,(r-=s)>0&&n+s+r<=d);)for(l=p+a*i,f={unit:h.subarray(n+s,n+s+r),pts:l,dts:l},c.samples.push(f),c.len+=r,n+=r+s,a++;n0;)s+=t}},{key:"_onMpegFrame",value:function(e,t,r,i,a,n){var s=1152/r*1e3,o=n+a*s,l=this._audioTrack;l.config=[],l.channelCount=i,l.samplerate=r,l.duration=this._duration,l.samples.push({unit:e,pts:o,dts:o}),l.len+=e.length}},{key:"_onMpegNoise",value:function(e){g.logger.warn("mpeg audio has noise: "+e.length+" bytes")}},{key:"_parseMpeg",value:function(e,t,r,i,a){var n=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],s=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3];if(t+2>r)return-1;if(255===e[t]||224==(224&e[t+1])){if(t+24>r)return-1;var o=e[t+1]>>3&3,l=e[t+1]>>1&3,u=e[t+2]>>4&15,d=e[t+2]>>2&3,f=!!(2&e[t+2]);if(1!==o&&0!==u&&15!==u&&3!==d){var c=3===o?3-l:3===l?3:4,h=1e3*n[14*c+u-1],g=3===o?0:2===o?1:2,v=s[3*g+d],p=f?1:0,y=e[t+3]>>6==3?1:2,m=3===l?(3===o?12:6)*h/v+p<<2:(3===o?144:72)*h/v+p|0;return t+m>r?-1:(this._onMpegFrame&&this._onMpegFrame(e.subarray(t,t+m),h,v,y,i,a),m)}}for(var E=t+2;E=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),e}();r.default=p},{21:21,25:25,28:28,30:30,32:32,50:50}],30:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",MUX_ERROR:"muxError",OTHER_ERROR:"otherError"},r.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",AUDIO_TRACK_LOAD_ERROR:"audioTrackLoadError",AUDIO_TRACK_LOAD_TIMEOUT:"audioTrackLoadTimeOut",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",REMUX_ALLOC_ERROR:"remuxAllocError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_ADD_CODEC_ERROR:"bufferAddCodecError",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",BUFFER_NUDGE_ON_STALL:"bufferNudgeOnStall",INTERNAL_EXCEPTION:"internalException",WEBVTT_EXCEPTION:"webVTTException"}},{}],31:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a="function"==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},n=function(){function e(e,t){for(var r=0;r1?r-1:0),n=1;n=r.start(i)&&t<=r.end(i))return!0;return!1},bufferInfo:function(e,t,r){if(e){var i,a=e.buffered,n=[];for(i=0;id&&(l[u-1].end=e[o].end):l.push(e[o])}else l.push(e[o])}for(o=0,i=0,a=n=t;o=f&&t=0&&oe.endSN)return 0;if(o=t-e.startSN,l=e.fragments,u=l[o],!isNaN(u.startPTS)){var f=Math.abs(u.startPTS-r);isNaN(u.deltaPTS)?u.deltaPTS=f:u.deltaPTS=Math.max(f,u.deltaPTS),r=Math.min(r,u.startPTS),i=Math.max(i,u.endPTS),n=Math.min(n,u.startDTS),s=Math.max(s,u.endDTS)}var c=r-u.start;for(u.start=u.startPTS=r,u.endPTS=i,u.startDTS=n,u.endDTS=s,u.duration=i-r,d=o;d>0;d--)a.updatePTS(l,d,d-1);for(d=o;dt?a.start+a.duration:a.start-n.duration:r>t?(a.duration=s-a.start,a.duration<0&&i.logger.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!")):(n.duration=a.start-s,n.duration<0&&i.logger.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!"))}};t.exports=a},{50:50}],36:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};a(this,e);var i=e.DefaultConfig;if((r.liveSyncDurationCount||r.liveMaxLatencyDurationCount)&&(r.liveSyncDuration||r.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var n in i)n in r||(r[n]=i[n]);if(void 0!==r.liveMaxLatencyDurationCount&&r.liveMaxLatencyDurationCount<=r.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==r.liveMaxLatencyDuration&&(r.liveMaxLatencyDuration<=r.liveSyncDuration||void 0===r.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');(0,T.enableLogs)(r.debug),this.config=r,this._autoLevelCapping=-1;var s=this.observer=new k.default;s.trigger=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:-1;T.logger.log("startLoad("+e+")"),this.networkControllers.forEach(function(t){t.startLoad(e)})}},{key:"stopLoad",value:function(){T.logger.log("stopLoad"),this.networkControllers.forEach(function(e){e.stopLoad()})}},{key:"swapAudioCodec",value:function(){T.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){T.logger.log("recoverMediaError");var e=this.media;this.detachMedia(),this.attachMedia(e)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){T.logger.log("set currentLevel:"+e),this.loadLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){T.logger.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){T.logger.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){T.logger.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(e){T.logger.log("set startLevel:"+e);var t=this;e!==-1&&(e=Math.max(e,t.minAutoLevel)),t.levelController.startLevel=e}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){T.logger.log("set autoLevelCapping:"+e),this._autoLevelCapping=e}},{key:"autoLevelEnabled",get:function(){return this.levelController.manualLevel===-1}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var e=this,t=e.levels,r=e.config.minAutoBitrate,i=t?t.length:0,a=0;ar)return a}return 0}},{key:"maxAutoLevel",get:function(){var e=this,t=e.levels,r=e.autoLevelCapping;return r===-1&&t&&t.length?t.length-1:r}},{key:"nextAutoLevel",get:function(){var e=this;return Math.min(Math.max(e.abrController.nextAutoLevel,e.minAutoLevel),e.maxAutoLevel)},set:function(e){var t=this;t.abrController.nextAutoLevel=Math.max(t.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}}]),e}();r.default=A},{1:1,11:11,12:12,2:2,30:30,32:32,38:38,39:39,4:4,40:40,50:50}],37:[function(e,t,r){"use strict";t.exports=e(36).default},{36:36}],38:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r>8*(15-r)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,t){var r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new T,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=u.default.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(e){this._url=e}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var e=this._byteRange=[] +;if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var r=this.lastByteRangeEndOffset;e[0]=r?r:0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),e}(),k=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,f.default.MANIFEST_LOADING,f.default.LEVEL_LOADING,f.default.AUDIO_TRACK_LOADING,f.default.SUBTITLE_TRACK_LOADING));return r.loaders={},r}return n(t,e),o(t,[{key:"destroy",value:function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy()}this.loaders={},h.default.prototype.destroy.call(this)}},{key:"onManifestLoading",value:function(e){this.load(e.url,{type:"manifest"})}},{key:"onLevelLoading",value:function(e){this.load(e.url,{type:"level",level:e.level,id:e.id})}},{key:"onAudioTrackLoading",value:function(e){this.load(e.url,{type:"audioTrack",id:e.id})}},{key:"onSubtitleTrackLoading",value:function(e){this.load(e.url,{type:"subtitleTrack",id:e.id})}},{key:"load",value:function(e,t){var r=this.loaders[t.type];if(r){var i=r.context;if(i&&i.url===e)return void y.logger.trace("playlist request ongoing");y.logger.warn("abort previous loader for type:"+t.type),r.abort()}var a=this.hls.config,n=void 0,s=void 0,o=void 0,l=void 0;"manifest"===t.type?(n=a.manifestLoadingMaxRetry,s=a.manifestLoadingTimeOut,o=a.manifestLoadingRetryDelay,l=a.manifestLoadingMaxRetryTimeout):(n=a.levelLoadingMaxRetry,s=a.levelLoadingTimeOut,o=a.levelLoadingRetryDelay,l=a.levelLoadingMaxRetryTimeout,y.logger.log("loading playlist for "+t.type+" "+(t.level||t.id))),r=this.loaders[t.type]=t.loader=void 0!==a.pLoader?new a.pLoader(a):new a.loader(a),t.url=e,t.responseType="";var u=void 0,d=void 0;u={timeout:s,maxRetry:n,retryDelay:o,maxRetryDelay:l},d={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},r.load(t,u,d)}},{key:"resolve",value:function(e,t){return u.default.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}},{key:"parseMasterPlaylist",value:function(e,t){var r=[],i=void 0;for(m.lastIndex=0;null!=(i=m.exec(e));){var a={},n=a.attrs=new p.default(i[1]);a.url=this.resolve(i[2],t);var s=n.decimalResolution("RESOLUTION");s&&(a.width=s.width,a.height=s.height),a.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),a.name=n.NAME;var o=n.CODECS;if(o){o=o.split(/[ ,]+/);for(var l=0;l2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}},{key:"parseLevelPlaylist",value:function(e,t,r,i){var a,n,s=0,o=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new T,d=0,f=null,c=new _;for(b.lastIndex=0;null!==(a=b.exec(e));){var h=a[1];if(h){c.duration=parseFloat(h);var g=(" "+a[2]).slice(1);c.title=g?g:null,c.tagList.push(g?["INF",h,g]:["INF",h])}else if(a[3]){if(!isNaN(c.duration)){var v=s++;c.type=i,c.start=o,c.levelkey=u,c.sn=v,c.level=r,c.cc=d,c.baseurl=t,c.relurl=(" "+a[3]).slice(1),l.fragments.push(c),f=c,o+=c.duration,c=new _}}else if(a[4]){if(c.rawByteRange=(" "+a[4]).slice(1),f){var m=f.byteRangeEndOffset;m&&(c.lastByteRangeEndOffset=m)}}else if(a[5])c.rawProgramDateTime=(" "+a[5]).slice(1),c.tagList.push(["PROGRAM-DATE-TIME",c.rawProgramDateTime]);else{for(a=a[0].match(/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/),n=1;n=0&&(u.method=S,u.baseuri=t,u.reluri=L,u.key=null,u.iv=w));break;case"START":var D=E,O=new p.default(D),I=O.decimalFloatingPoint("TIME-OFFSET");isNaN(I)||(l.startTimeOffset=I);break;case"MAP":var P=new p.default(E);c.relurl=P.URI,c.rawByteRange=P.BYTERANGE,c.baseurl=t,c.level=r,c.type=i,c.sn="initSegment",l.initSegment=c,c=new _;break;default:y.logger.warn("line parsed but not handled: "+a)}}}return c=f,c&&!c.relurl&&(l.fragments.pop(),o-=c.duration),l.totalduration=o,l.averagetargetduration=o/l.fragments.length,l.endSN=s-1,l}},{key:"loadsuccess",value:function(e,t,r){var i=e.data,a=e.url,n=r.type,s=r.id,o=r.level,l=this.hls;if(this.loaders[n]=void 0,void 0!==a&&0!==a.indexOf("data:")||(a=r.url),t.tload=performance.now(),0===i.indexOf("#EXTM3U"))if(i.indexOf("#EXTINF:")>0){var u="audioTrack"!==n&&"subtitleTrack"!==n,d=isNaN(o)?isNaN(s)?0:s:o,c=this.parseLevelPlaylist(i,a,d,"audioTrack"===n?"audio":"subtitleTrack"===n?"subtitle":"main");c.tload=t.tload,"manifest"===n&&l.trigger(f.default.MANIFEST_LOADED,{levels:[{url:a,details:c}],audioTracks:[],url:a,stats:t}),t.tparsed=performance.now(),c.targetduration?u?l.trigger(f.default.LEVEL_LOADED,{details:c,level:o||0,id:s||0,stats:t}):"audioTrack"===n?l.trigger(f.default.AUDIO_TRACK_LOADED,{details:c,id:s,stats:t}):"subtitleTrack"===n&&l.trigger(f.default.SUBTITLE_TRACK_LOADED,{details:c,id:s,stats:t}):l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"invalid targetduration"})}else{var h=this.parseMasterPlaylist(i,a);if(h.length){var v=this.parseMasterPlaylistMedia(i,a,"AUDIO"),p=this.parseMasterPlaylistMedia(i,a,"SUBTITLES");if(v.length){var m=!1;v.forEach(function(e){e.url||(m=!0)}),m===!1&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(y.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main"}))}l.trigger(f.default.MANIFEST_LOADED,{levels:h,audioTracks:v,subtitles:p,url:a,stats:t})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no level found in manifest"})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_ERROR,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,response:e,context:t})}},{key:"loadtimeout",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,context:t})}}]),t}(h.default);r.default=k},{2:2,30:30,31:31,32:32,44:44,50:50}],41:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r>24&255,t[1]=i>>16&255,t[2]=i>>8&255,t[3]=255&i,t.set(e,4),a=0,i=8;a>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trex(t[r]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){r*=t;var i=Math.floor(r/(n+1)),a=Math.floor(r%(n+1)),s=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,s)}},{key:"sdtp",value:function(t){var r,i,a=t.samples||[],n=new Uint8Array(4+a.length);for(i=0;i>>8&255),n.push(255&a),n=n.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&a),s=s.concat(Array.prototype.slice.call(i));var o=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n).concat([t.pps.length]).concat(s))),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,u>>8&255,255&u,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,f>>24,f>>16&255,f>>8&255,255&f])))}},{key:"esds",value:function(e){var t=e.config.length;return new Uint8Array([0,0,0,0,3,23+t,0,1,0,4,15+t,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([t]).concat(e.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.samplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"mp3",value:function(t){var r=t.samplerate;return e.box(e.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]))}},{key:"stsd",value:function(t){return"audio"===t.type?t.isAAC||"mp3"!==t.codec?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.mp3(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration*t.timescale,a=t.width,s=t.height,o=Math.floor(i/(n+1)),l=Math.floor(i%(n+1));return e.box(e.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,o>>24,o>>16&255,o>>8&255,255&o,l>>24,l>>16&255,l>>8&255,255&l,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,s>>8&255,255&s,0,0]))}},{key:"traf",value:function(t,r){var i=e.sdtp(t),a=t.id,s=Math.floor(r/(n+1)),o=Math.floor(r%(n+1));return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a])),e.box(e.types.tfdt,new Uint8Array([1,0,0,0,s>>24,s>>16&255,s>>8&255,255&s,o>>24,o>>16&255,o>>8&255,255&o])),e.trun(t,i.length+16+20+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(t){var r=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(t,r){var i,a,n,s,o,l,u=t.samples||[],d=u.length,f=12+16*d,c=new Uint8Array(f);for(r+=8+f,c.set([0,0,15,1,d>>>24&255,d>>>16&255,d>>>8&255,255&d,r>>>24&255,r>>>16&255,r>>>8&255,255&r],0),i=0;i>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,c)}},{key:"initSegment",value:function(t){e.types||e.init();var r,i=e.moov(t);return r=new Uint8Array(e.FTYP.byteLength+i.byteLength),r.set(e.FTYP),r.set(i,e.FTYP.byteLength),r}}]),e}();r.default=s},{}],42:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r-1&&s&&!s.match("CriOS"),this.ISGenerated=!1}return n(e,[{key:"destroy",value:function(){}},{key:"resetTimeStamp",value:function(e){this._initPTS=this._initDTS=e}},{key:"resetInitSegment",value:function(){this.ISGenerated=!1}},{key:"remux",value:function(e,t,r,i,a,n,s){if(this.ISGenerated||this.generateIS(e,t,a),this.ISGenerated)if(e.samples.length){var o=this.remuxAudio(e,a,n,s);if(t.samples.length){var l=void 0;o&&(l=o.endPTS-o.startPTS),this.remuxVideo(t,a,n,l)}}else{var d=void 0;t.samples.length&&(d=this.remuxVideo(t,a,n)),d&&e.codec&&this.remuxEmptyAudio(e,a,n,d)}r.samples.length&&this.remuxID3(r,a),i.samples.length&&this.remuxText(i,a),this.observer.trigger(u.default.FRAG_PARSED)}},{key:"generateIS",value:function(e,t,r){var i,a,n=this.observer,s=e.samples,o=t.samples,l=this.typeSupported,f="audio/mp4",g={},v={tracks:g},p=void 0===this._initPTS;if(p&&(i=a=1/0),e.config&&s.length&&(e.timescale=e.samplerate,d.logger.log("audio sampling rate : "+e.samplerate),e.isAAC||(l.mpeg?(f="audio/mpeg",e.codec=""):l.mp3&&(e.codec="mp3")),g.audio={container:f,codec:e.codec,initSegment:!e.isAAC&&l.mpeg?new Uint8Array:c.default.initSegment([e]),metadata:{channelCount:e.channelCount}},p&&(i=a=s[0].pts-e.inputTimeScale*r)),t.sps&&t.pps&&o.length){var y=t.inputTimeScale;t.timescale=y,g.video={container:"video/mp4",codec:t.codec,initSegment:c.default.initSegment([t]),metadata:{width:t.width,height:t.height}},p&&(i=Math.min(i,o[0].pts-y*r),a=Math.min(a,o[0].dts-y*r),this.observer.trigger(u.default.INIT_PTS_FOUND,{initPTS:i}))}Object.keys(g).length?(n.trigger(u.default.FRAG_PARSING_INIT_SEGMENT,v),this.ISGenerated=!0,p&&(this._initPTS=i,this._initDTS=a)):n.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(e,t,r,i){var a,n,s,o,l,f,g,v=8,p=e.timescale,y=e.samples,m=[],E=y.length,b=this._PTSNormalize,T=this._initDTS;y.sort(function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r?r:i?i:e.id-t.id});var _=y.reduce(function(e,t){return Math.max(Math.min(e,t.pts-t.dts),-18e3)},0);if(_<0){d.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(_/90)+" ms to overcome this issue");for(var k=0;k1?d.logger.log("AVC:"+S+" ms hole between fragments detected,filling it"):S<-1&&d.logger.log("AVC:"+-S+" ms overlapping between fragments detected"),l=R,y[0].dts=l+T,o=Math.max(o-S,R),y[0].pts=o+T,d.logger.log("Video/PTS/DTS adjusted: "+Math.round(o/90)+"/"+Math.round(l/90)+",delta:"+S+" ms")),A=y[y.length-1],g=Math.max(b(A.dts-T,R),0),f=Math.max(b(A.pts-T,R),0),f=Math.max(f,g);var L=this.isSafari;L&&(a=Math.round((g-l)/(y.length-1)));for(var w=0,D=0,O=0;O0?U-1:U].dts;if(q.stretchShortVideoTrack){var Q=q.maxBufferHole,J=q.maxSeekHole,Z=Math.floor(Math.min(Q,J)*p),$=(i?o+i*p:this.nextAudioPts)-B.pts;$>Z?(a=$-z,a<0&&(a=z),d.logger.log("It is approximately "+$/90+" ms to the next segment; using duration "+a/90+" ms for the last video frame.")):a=z}else a=z}K=Math.round(B.pts-B.dts)}m.push({size:j,duration:a,cts:K,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:B.key?2:1,isNonSync:B.key?0:1}})}this.nextAvcDts=g+a;var ee=e.dropped;if(e.len=0,e.nbNalu=0,e.dropped=0,m.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var te=m[0].flags;te.dependsOn=2,te.isNonSync=0}e.samples=m,s=c.default.moof(e.sequenceNumber++,l,e),e.samples=[];var re={data1:s,data2:n,startPTS:o/p,endPTS:(f+a)/p,startDTS:l/p,endDTS:this.nextAvcDts/p,type:"video",nb:m.length,dropped:ee};return this.observer.trigger(u.default.FRAG_PARSING_DATA,re),re}},{key:"remuxAudio",value:function(e,t,r,i){var a,n,s,l,f,g,v,p,y,m,E,b,T,_,k,R,A=e.inputTimeScale,S=e.timescale,L=A/S,w=e.isAAC?1024:1152,D=w*L,O=this._PTSNormalize,I=this._initDTS,P=!e.isAAC&&this.typeSupported.mpeg,C=P?0:8,x=[],F=[];if(e.samples.sort(function(e,t){return e.pts-t.pts}),F=e.samples,R=this.nextAudioPts,r|=F.length&&R&&(Math.abs(t-R/A)<.1||Math.abs(F[0].pts-R-I)<20*D),r||(R=t*A),i&&e.isAAC)for(var M=0,N=R;M=D&&N){var j=Math.round(G/D);d.logger.warn("Injecting "+j+" audio frame @ "+(N/A).toFixed(3)+"s due to "+1e3*G/A+" ms gap.");for(var K=0;K0)Y=Math.round((b-R)/D),d.logger.log(V+" ms hole between AAC samples detected,filling it"),Y>0&&(_=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount),_||(_=l.subarray()),e.len+=Y*_.length);else if(V<-12){d.logger.log(-V+" ms overlapping between AAC samples detected, drop frame"),e.len-=l.byteLength;continue}b=T=R}if(v=Math.max(0,b),p=Math.max(0,T),!(e.len>0))return;var X=P?e.len:e.len+8;try{f=new Uint8Array(X)}catch(e){return void this.observer.trigger(u.default.ERROR,{type:h.ErrorTypes.MUX_ERROR,details:h.ErrorDetails.REMUX_ALLOC_ERROR,fatal:!1,bytes:X,reason:"fail allocating audio mdat "+X})}P||(a=new DataView(f.buffer),a.setUint32(0,X),f.set(c.default.types.mdat,4));for(var q=0;q=2&&(Q=x[J-2].duration,s.duration=Q),J){this.nextAudioPts=b+L*Q,e.len=0,e.samples=x,g=P?new Uint8Array:c.default.moof(e.sequenceNumber++,p/L,e),e.samples=[];var Z={data1:g,data2:f,startPTS:v/A,endPTS:this.nextAudioPts/A,startDTS:p/A,endDTS:(T+L*Q)/A,type:"audio",nb:J};return this.observer.trigger(u.default.FRAG_PARSING_DATA,Z),Z}return null}},{key:"remuxEmptyAudio",value:function(e,t,r,i){var a=e.inputTimeScale,n=e.samplerate?e.samplerate:a,s=a/n,l=this.nextAudioPts,u=(void 0!==l?l:i.startDTS*a)+this._initDTS,f=i.endDTS*a+this._initDTS,c=1024*s,h=Math.ceil((f-u)/c),g=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(d.logger.warn("remux empty Audio"),!g)return void d.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var v=[],p=0;p4294967296;)e+=r;return e}}]),e}();r.default=g},{30:30,32:32,33:33,41:41,50:50}],43:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"hexadecimalInteger",value:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(e){var t=n.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}}],[{key:"parseAttrList",value:function(e){var t,r={};for(s.lastIndex=0;null!==(t=s.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r}}]),e}();r.default=o},{}],45:[function(e,t,r){"use strict";var i={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){a=(r+i)/2|0,n=e[a];var s=t(n);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}};t.exports=i},{}],46:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rl&&(g.log("ERROR","Too large cursor position "+this.pos),this.pos=l)}},{key:"moveCursor",value:function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=s(e);if(this.pos>=l)return void g.log("ERROR","Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}},{key:"clearFromPos",value:function(e){var t;for(t=e;t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r}},{key:"getTextAndFormat",value:function(){return this.rows}}]),e}(),b=function(){function e(t,r){i(this,e),this.chNr=t,this.outputFilter=r,this.mode=null,this.verbose=0,this.displayedMemory=new E,this.nonDisplayedMemory=new E,this.lastOutputScreen=new E,this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return a(e,[{key:"reset",value:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null}},{key:"getHandler",value:function(){return this.outputFilter}},{key:"setHandler",value:function(e){this.outputFilter=e}},{key:"setPAC",value:function(e){this.writeScreen.setPAC(e)}},{key:"setBkgData",value:function(e){this.writeScreen.setBkgData(e)}},{key:"setMode",value:function(e){e!==this.mode&&(this.mode=e,g.log("INFO","MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}},{key:"insertChars",value:function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16,i=["white","green","blue","cyan","red","yellow","magenta"];t.foreground=i[r]}g.log("INFO","MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)}},{key:"outputDataUpdate",value:function(){var e=g.time;null!==e&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(e,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))}},{key:"cueSplitAtTime",value:function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}]),e}(),T=function(){function e(t,r,a){i(this,e),this.field=t||1,this.outputs=[r,a],this.channels=[new b(1,r),new b(2,a)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return a(e,[{key:"getHandler",value:function(e){return this.channels[e].getHandler()}},{key:"setHandler",value:function(e,t){this.channels[e].setHandler(t)}},{key:"addData",value:function(e,t){var r,i,a,n=!1;this.lastTime=e,g.setTime(e);for(var s=0;s ("+v([i,a])+")"),r=this.parseCmd(i,a),r||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a)))if(this.currChNr&&this.currChNr>=0){var o=this.channels[this.currChNr-1];o.insertChars(n)}else g.log("WARNING","No channel found yet. TEXT-MODE?");r?this.dataCounters.cmd+=2:n?this.dataCounters.char+=2:(this.dataCounters.other+=2,g.log("WARNING","Couldn't parse cleaned data "+v([i,a])+" orig: "+v([t[s],t[s+1]])))}else this.dataCounters.padding+=2}},{key:"parseCmd",value:function(e,t){var r=null,i=(20===e||28===e)&&32<=t&&t<=47,a=(23===e||31===e)&&33<=t&&t<=35;if(!i&&!a)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,g.log("DEBUG","Repeated command ("+v([e,t])+") is dropped"),!0;r=20===e||23===e?1:2;var n=this.channels[r-1];return 20===e||28===e?32===t?n.ccRCL():33===t?n.ccBS():34===t?n.ccAOF():35===t?n.ccAON():36===t?n.ccDER():37===t?n.ccRU(2):38===t?n.ccRU(3):39===t?n.ccRU(4):40===t?n.ccFON():41===t?n.ccRDC():42===t?n.ccTR():43===t?n.ccRTD():44===t?n.ccEDM():45===t?n.ccCR():46===t?n.ccENM():47===t&&n.ccEOC():n.ccTO(t-32),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"parseMidrow",value:function(e,t){var r=null;if((17===e||25===e)&&32<=t&&t<=47){if((r=17===e?1:2)!==this.currChNr)return g.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[r-1].ccMIDROW(t),g.log("DEBUG","MIDROW ("+v([e,t])+")"),!0}return!1}},{key:"parsePAC",value:function(e,t){var r=null,i=null,a=(17<=e&&e<=23||25<=e&&e<=31)&&64<=t&&t<=127,n=(16===e||24===e)&&64<=t&&t<=95;if(!a&&!n)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;r=e<=23?1:2,i=64<=t&&t<=95?1===r?u[e]:f[e]:1===r?d[e]:c[e];var s=this.interpretPAC(i,t);return this.channels[r-1].setPAC(s),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"interpretPAC",value:function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1==(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i}},{key:"parseChars",value:function(e,t){var r=null,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),17<=a&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,g.log("INFO","Special char '"+s(n)+"' in channel "+r),i=[n]}else 32<=e&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var o=v(i);g.log("DEBUG","Char codes = "+o.join(",")),this.lastCmdA=null,this.lastCmdB=null}return i}},{key:"parseBackgroundAttributes",value:function(e,t){var r,i,a,n,s=(16===e||24===e)&&32<=t&&t<=47,o=(23===e||31===e)&&45<=t&&t<=47;return!(!s&&!o)&&(r={},16===e||24===e?(i=Math.floor((t-32)/2),r.background=h[i],t%2==1&&(r.background=r.background+"_semi")):45===t?r.background="transparent":(r.foreground="black",47===t&&(r.underline=!0)),a=e<24?1:2,n=this.channels[a-1],n.setBkgData(r),this.lastCmdA=null,this.lastCmdB=null,!0)}},{key:"reset",value:function(){for(var e=0;e=16?l--:l++,navigator.userAgent.match(/Firefox\//)?s.line=f+1:s.line=f>7?f-2:f+1,s.align="left",s.position=Math.max(0,Math.min(100,l/32*100+(navigator.userAgent.match(/Firefox\//)?50:0))),e.addCue(s)}}};t.exports=a},{53:53}],48:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=this.minWeight_}},{key:"getEstimate",value:function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}},{key:"destroy",value:function(){}}]),e}();r.default=o},{49:49}],49:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r "+t}function n(e){var t=self.console[e];return t?function(){for(var r=arguments.length,i=Array(r),n=0;n1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",r({},u,{get:function(){return T},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");T=r,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",r({},u,{get:function(){return _},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");_=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",r({},u,{get:function(){return k},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");k=r,this.hasBeenReset=!0}})),o.displayState=void 0,l)return o}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var a="auto",n={"":!0,lr:!0,rl:!0},s={start:!0,middle:!0,end:!0,left:!0,right:!0};return i.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},i}()},{}],53:[function(e,t,r){"use strict";function i(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new f,this.regionList=[]}function a(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}function n(){this.values=Object.create(null)}function s(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length){var o=s[0],l=s[1];t(o,l)}}}function o(e,t,r){function i(){var t=a(e);if(null===t)throw new Error("Malformed timestamp: "+l);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function o(){e=e.replace(/^\s+/,"")}var l=e;if(o(),t.startTime=i(),o(),"-->"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '-->'): "+l);e=e.substr(3),o(),t.endTime=i(),o(),function(e,t){var i=new n;s(e,function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",h,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",h,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",h,"end","left","right"])}},/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&c.line===-1&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",h);var o=i.get("position","auto");"auto"===o&&50===c.position&&(o="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=o}(e,t)}function l(e){return e.replace(//gi,"\n")}Object.defineProperty(r,"__esModule",{value:!0}),r.fixLineBreaks=void 0;var u=e(52),d=function(e){return e&&e.__esModule?e:{default:e}}(u),f=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};n.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100)&&(this.set(e,t),!0)}};var c=new d.default(0,0,0),h="middle"===c.align?"middle":"center";i.prototype={parse:function(e){function t(){var e=r.buffer,t=0;for(e=l(e);t")===-1){r.cue.id=i;continue}case"CUE":try{o(i,r.cue,r.regionList)}catch(e){r.cue=null,r.state="BADCUE";continue}r.state="CUETEXT";continue;case"CUETEXT":var u=i.indexOf("-->")!==-1;if(!i||u&&(n=!0)){r.oncue&&r.oncue(r.cue),r.cue=null,r.state="ID";continue}r.cue.text&&(r.cue.text+="\n"),r.cue.text+=i;continue;case"BADCUE":i||(r.state="ID");continue}}}catch(e){"CUETEXT"===r.state&&r.cue&&r.oncue&&r.oncue(r.cue),r.cue=null,r.state="INITIAL"===r.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},r.fixLineBreaks=l,r.default=i},{52:52}],54:[function(e,t,r){"use strict";var i=e(53),a=function(e){return e&&e.__esModule?e:{default:e}}(i),n=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;return isNaN(t)||isNaN(r)||isNaN(i)||isNaN(a)?-1:(t+=1e3*r,t+=6e4*i,t+=36e5*a)},s=function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,i=a,a=e[i.prevCC];e.presentationOffset=r},o={parse:function(e,t,r,i,o,l){var u=String.fromCharCode.apply(null,new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",f=0,c=0,h=0,g=[],v=void 0,p=!0,y=new a.default;y.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(c?a=r.ccOffset=t.start:s(r,i,h)),h&&!c&&(a=h+r.ccOffset-r.presentationOffset),e.startTime+=a-c,e.endTime+=a-c,e.text=decodeURIComponent(escape(e.text)),e.endTime>0&&g.push(e)},y.onparsingerror=function(e){v=e},y.onflush=function(){if(v&&l)return void l(v);o(g)},u.forEach(function(e){if(p){if(e.startsWith("X-TIMESTAMP-MAP=")){p=!1,e.substr(16).split(",").forEach(function(e){e.startsWith("LOCAL:")?d=e.substr(6):e.startsWith("MPEGTS:")&&(f=parseInt(e.substr(7)))});try{t=t<0?t+8589934592:t,f-=t,c=n(d)/1e3,h=f/9e4,c===-1&&(v=new Error("Malformed X-TIMESTAMP-MAP: "+e))}catch(t){v=new Error("Malformed X-TIMESTAMP-MAP: "+e)}return}""===e&&(p=!1)}y.parse(e+"\n")}),y.flush()}};t.exports=o},{53:53}],55:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(performance.now(),i.trequest)),4===r){var o=t.status;if(o>=200&&o<300){i.tload=Math.max(i.tfirst,performance.now());var l=void 0,u=void 0;"arraybuffer"===a.responseType?(l=t.response,u=l.byteLength):(l=t.responseText,u=l.length),i.loaded=i.total=u;var d={url:t.responseURL,data:l};this.callbacks.onSuccess(d,i,a)}else i.retry>=s.maxRetry||o>=400&&o<499?(n.logger.error(o+" while loading "+a.url),this.callbacks.onError({code:o,text:t.statusText},a)):(n.logger.warn(o+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,s.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),s.timeout)}},{key:"loadtimeout",value:function(){n.logger.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context)}},{key:"loadprogress",value:function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total);var r=this.callbacks.onProgress;r&&r(t,this.context,null)}}]),e}();r.default=s},{50:50}]},{},[37])(37)}); diff --git a/demo/mask_detection/web/js/ckplayer/hls/hls.min.js b/demo/mask_detection/web/js/ckplayer/hls/hls.min.js new file mode 100644 index 0000000000000000000000000000000000000000..3a95d08e8d4a1e0acb6eb40589ba928914bc40ec --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/hls/hls.min.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){var e;return function e(t,r,i){function a(s,o){if(!r[s]){if(!t[s]){var l="function"==typeof require&&require;if(!o&&l)return l(s,!0);if(n)return n(s,!0);var u=new Error("Cannot find module '"+s+"'");throw u.code="MODULE_NOT_FOUND",u}var d=r[s]={exports:{}};t[s][0].call(d.exports,function(e){var r=t[s][1][e];return a(r?r:e)},d,d.exports,e,t,r,i)}return r[s].exports}for(var n="function"==typeof require&&require,s=0;s0&&this._events[e].length>r&&(this._events[e].warned=!0,console.trace),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function r(){this.removeListener(e,r),i||(i=!0,t.apply(this,arguments))}if(!a(t))throw TypeError("listener must be a function");var i=!1;return r.listener=t,this.on(e,r),this},i.prototype.removeListener=function(e,t){var r,i,n,o;if(!a(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(r=this._events[e],n=r.length,i=-1,r===t||a(r.listener)&&r.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(s(r)){for(o=n;o-- >0;)if(r[o]===t||r[o].listener&&r[o].listener===t){i=o;break}if(i<0)return this;1===r.length?(r.length=0,delete this._events[e]):r.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],a(r))this.removeListener(e,r);else if(r)for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?a(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(a(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(t,r,i){!function(t){var a=/^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,n=/^([^\/;?#]*)(.*)$/,s={buildAbsoluteURL:function(e,t,r){if(r=r||{},e=e.trim(),!(t=t.trim())){if(!r.alwaysNormalize)return e;var i=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");return i.path=s.normalizePath(i.path),s.buildURLFromParts(i)}var a=this.parseURL(t);if(!a)throw new Error("Error trying to parse relative URL.");if(a.scheme)return r.alwaysNormalize?(a.path=s.normalizePath(a.path),s.buildURLFromParts(a)):t;var o=this.parseURL(e);if(!o)throw new Error("Error trying to parse base URL.");if(!o.netLoc&&o.path&&"/"!==o.path[0]){var l=n.exec(o.path);o.netLoc=l[1],o.path=l[2]}o.netLoc&&!o.path&&(o.path="/");var u={scheme:o.scheme,netLoc:a.netLoc,path:null,params:a.params,query:a.query,fragment:a.fragment};if(!a.netLoc&&(u.netLoc=o.netLoc,"/"!==a.path[0]))if(a.path){var d=o.path,f=d.substring(0,d.lastIndexOf("/")+1)+a.path;u.path=s.normalizePath(f)}else u.path=o.path,a.params||(u.params=o.params,a.query||(u.query=o.query));return null===u.path&&(u.path=r.alwaysNormalize?s.normalizePath(a.path):a.path),s.buildURLFromParts(u)},parseURL:function(e){var t=a.exec(e);return t?{scheme:t[1]||"",netLoc:t[2]||"",path:t[3]||"",params:t[4]||"",query:t[5]||"",fragment:t[6]||""}:null},normalizePath:function(e){for(e=e.split("").reverse().join("").replace(/(?:\/|^)\.(?=\/)/g,"");e.length!==(e=e.replace(/(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,"")).length;);return e.split("").reverse().join("")},buildURLFromParts:function(e){return e.scheme+e.netLoc+e.path+e.params+e.query+e.fragment}};"object"==typeof i&&"object"==typeof r?r.exports=s:"function"==typeof e&&e.amd?e([],function(){return s}):"object"==typeof i?i.URLToolkit=s:t.URLToolkit=s}(this)},{}],3:[function(e,t,r){var i=arguments[3],a=arguments[4],n=arguments[5],s=JSON.stringify;t.exports=function(e,t){function r(e){p[e]=!0;for(var t in a[e][1]){var i=a[e][1][t];p[i]||r(i)}}for(var o,l=Object.keys(n),u=0,d=l.length;u500*r.duration/o){var l=e.levels,d=Math.max(1,n.bw?n.bw/8:1e3*n.loaded/s),f=l[r.level],c=f.realBitrate?Math.max(f.realBitrate,f.bitrate):f.bitrate,g=n.total?n.total:Math.max(n.loaded,Math.round(r.duration*c/8)),p=t.currentTime,y=(g-n.loaded)/d,m=(h.default.bufferInfo(t,p,e.config.maxBufferHole).end-p)/o;if(m<2*r.duration/o&&y>m){var E=void 0,b=void 0;for(b=r.level-1;b>a;b--){var T=l[b].realBitrate?Math.max(l[b].realBitrate,l[b].bitrate):l[b].bitrate;if((E=r.duration*T/(6.4*d))=i;u--){var d=l[u],f=d.details,c=f?f.totalduration/f.fragments.length:t,h=!!f&&f.live,g=void 0;g=u<=e?s*r:o*r;var p=l[u].realBitrate?Math.max(l[u].realBitrate,l[u].bitrate):l[u].bitrate,y=p*c/g;if(v.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+u+"/"+Math.round(g)+"/"+p+"/"+c+"/"+n+"/"+y),g>p&&(!y||h||y=0)return c;v.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var g=o?Math.min(o,i.maxStarvationDelay):i.maxStarvationDelay,p=i.abrBandWidthFactor,y=i.abrBandWidthUpFactor;if(0===f){var m=this.bitrateTestDelay;if(m){g=(o?Math.min(o,i.maxLoadingDelay):i.maxLoadingDelay)-m,v.logger.trace("bitrate test took "+Math.round(1e3*m)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*g)+" ms"),p=y=1}}return c=this._findBestLevel(s,o,d,a,t,f+g,p,y,r),Math.max(c,0)}}]),t}(f.default);r.default=m},{30:30,31:31,32:32,34:34,48:48,50:50}],6:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1?(k.logger.log("audio:override startPosition with lastCurrentTime @"+t.toFixed(3)),this.state=R.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:e,this.state=R.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else this.startPosition=e,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var e,t,r,i=this.hls,a=i.config;switch(this.state){case R.ERROR:case R.PAUSED:case R.BUFFER_FLUSHING:break;case R.STARTING:this.state=R.WAITING_TRACK,this.loadedmetadata=!1;break;case R.IDLE:var n=this.tracks;if(!n)break;if(!this.media&&(this.startFragRequested||!a.startFragPrefetch))break;e=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition;var s=this.mediaBuffer?this.mediaBuffer:this.media,o=f.default.bufferInfo(s,e,a.maxBufferHole),l=o.len,d=o.end,c=this.fragPrevious,h=a.maxMaxBufferLength,g=this.audioSwitch,p=this.trackId;if((lE||o.nextStart))return;k.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),this.media.currentTime=E+.05}if(r.initSegment&&!r.initSegment.data)T=r.initSegment;else if(d<=E){if(T=y[0],r.live&&T.loadIdx&&T.loadIdx===this.fragLoadIdx){var A=o.nextStart?o.nextStart:E;return k.logger.log("no alt audio available @currentTime:"+this.media.currentTime+", seeking @"+(A+.05)),void(this.media.currentTime=A+.05)}}else{var S=void 0,L=a.maxFragLookUpTolerance,w=c?y[c.sn-y[0].sn+1]:void 0,D=function(e){var t=Math.min(L,e.duration);return e.start+e.duration-t<=d?1:e.start-t>d&&e.start?-1:0};db-L&&(L=0),S=w&&!D(w)?w:u.default.search(y,D)):S=y[m-1],S&&(T=S,E=S.start,c&&T.level===c.level&&T.sn===c.sn&&(T.snO&&Math.abs(this.fragLoadIdx-T.loadIdx)=P||C)&&(k.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.WAITING_INIT_PTS:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("ended",this.onvended);var r=this.config;this.tracks&&r.autoStartLoad&&this.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.tracks;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){this.state===R.ENDED&&(this.state=R.IDLE),this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaEnded",value:function(){this.startPosition=this.lastCurrentTime=0}},{key:"onAudioTracksUpdated",value:function(e){k.logger.log("audio tracks updated"),this.tracks=e.audioTracks}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url;this.trackId=e.id,this.state=R.IDLE,this.fragCurrent=null,this.state=R.PAUSED,this.waitingFragment=null,t?this.timer||(this.timer=setInterval(this.ontick,100)):this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),t&&(this.audioSwitch=!0,this.state=R.IDLE,void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold)),this.tick()}},{key:"onAudioTrackLoaded",value:function(e){var t=e.details,r=e.id,i=this.tracks[r],a=t.totalduration,n=0;if(k.logger.log("track "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,t.PTSKnown?k.logger.log("live audio playlist sliding:"+n.toFixed(3)):k.logger.log("live audio playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live audio playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,!this.startFragRequested){if(this.startPosition===-1){var o=t.startTimeOffset;isNaN(o)?this.startPosition=0:(k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o)}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_TRACK&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"audio"===r.type&&r.level===t.level&&r.sn===t.sn){var i=this.tracks[this.trackId],a=i.details,n=a.totalduration,s=t.level,o=t.sn,l=t.cc,u=this.config.defaultAudioCodec||i.audioCodec||"mp4a.40.2",d=this.stats=e.stats;if("initSegment"===o)this.state=R.IDLE,d.tparsed=d.tbuffered=performance.now(),a.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:d,frag:t,id:"audio"}),this.tick();else{this.state=R.PARSING,this.appended=!1,this.demuxer||(this.demuxer=new h.default(this.hls,"audio"));var f=this.initPTS[l],c=a.initSegment?a.initSegment.data:[];if(c||void 0!==f){this.pendingBuffering=!0,k.logger.log("Demuxing "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s);this.demuxer.push(e.payload,c,u,null,t,n,!1,f)}else k.logger.log("unknown video PTS for continuity counter "+l+", waiting for video PTS before demuxing audio frag "+o+" of ["+a.startSN+" ,"+a.endSN+"],track "+s),this.waitingFragment=e,this.state=R.WAITING_INIT_PTS}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i=e.tracks,a=void 0;if(i.video&&delete i.video,a=i.audio){a.levelCodec="mp4a.40.2",a.id=e.id,this.hls.trigger(v.default.BUFFER_CODECS,i),k.logger.log("audio track:audio,container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var n=a.initSegment;if(n){var s={type:"audio",data:n,parent:"audio",content:"initSegment"};this.audioSwitch?this.pendingData=[s]:(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,s))}this.tick()}}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"audio"===e.id&&"audio"===e.type&&i.sn===r.sn&&i.level===r.level&&this.state===R.PARSING){var a=this.trackId,n=this.tracks[a],s=this.hls;isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb),E.default.updateFragPTSDTS(n.details,r.sn,e.startPTS,e.endPTS);var o=this.audioSwitch,l=this.media,u=!1;if(o&&l)if(l.readyState){var d=l.currentTime;k.logger.log("switching audio track : currentTime:"+d),d>=e.startPTS&&(k.logger.log("switching audio track : flushing all audio"),this.state=R.BUFFER_FLUSHING,s.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),u=!0,this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a}))}else this.audioSwitch=!1,s.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:a});var f=this.pendingData;this.audioSwitch||([e.data1,e.data2].forEach(function(t){t&&t.length&&f.push({type:e.type,data:t,parent:"audio",content:"data"})}),!u&&f.length&&(f.forEach(function(e){t.state===R.PARSING&&(t.pendingBuffering=!0,t.hls.trigger(v.default.BUFFER_APPENDING,e))}),this.pendingData=[],this.appended=!0)),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"audio"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onBufferCreated",value:function(e){var t=e.tracks.audio;t&&(this.mediaBuffer=t.buffer,this.loadedmetadata=!0)}},{key:"onBufferAppended",value:function(e){if("audio"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent,t=this.stats,r=this.hls;if(e){this.fragPrevious=e,t.tbuffered=performance.now(),r.trigger(v.default.FRAG_BUFFERED,{stats:t,frag:e,id:"audio"});var i=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("audio buffered : "+T.default.toString(i.buffered)),this.audioSwitch&&this.appended&&(this.audioSwitch=!1,r.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:this.trackId})),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag;if(!t||"audio"===t.type)switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!e.fatal){var r=this.fragLoadError;r?r++:r=1;var i=this.config;if(r<=i.fragLoadingMaxRetry){this.fragLoadError=r,t.loadCounter=0;var a=Math.min(Math.pow(2,r-1)*i.fragLoadingRetryDelay,i.fragLoadingMaxRetryTimeout);k.logger.warn("audioStreamController: frag loading failed, retry in "+a+" ms"),this.retryDate=performance.now()+a,this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("audioStreamController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:case _.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==R.ERROR&&(this.state=e.fatal?R.ERROR:R.IDLE,k.logger.warn("audioStreamController: "+e.details+" while loading frag,switch to "+this.state+" state ..."));break;case _.ErrorDetails.BUFFER_FULL_ERROR:if("audio"===e.parent&&(this.state===R.PARSING||this.state===R.PARSED)){var n=this.mediaBuffer,s=this.media.currentTime;if(n&&f.default.isBuffered(n,s)&&f.default.isBuffered(n,s+.5)){var o=this.config;o.maxMaxBufferLength>=o.maxBufferLength&&(o.maxMaxBufferLength/=2,k.logger.warn("audio:reduce max buffer length to "+o.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*o.fragLoadingLoopThreshold),this.state=R.IDLE}else k.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"),this.fragCurrent=null,this.state=R.BUFFER_FLUSHING,this.hls.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"})}}}},{key:"onBufferFlushed",value:function(){var e=this,t=this.pendingData;t&&t.length?(k.logger.log("appending pending audio data on Buffer Flushed"),t.forEach(function(t){e.hls.trigger(v.default.BUFFER_APPENDING,t)}),this.appended=!0,this.pendingData=[],this.state=R.PARSED):(this.state=R.IDLE,this.fragPrevious=null,this.tick())}},{key:"state",set:function(e){if(this.state!==e){var t=this.state;this._state=e,k.logger.log("audio stream:"+t+"->"+e)}},get:function(){return this._state}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],7:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){this.updateTrack(this.trackId)}},{key:"onManifestLoading",value:function(){this.tracks=[],this.trackId=-1}},{key:"onManifestLoaded",value:function(e){var t=this,r=e.audioTracks||[],i=!1;this.tracks=r,this.hls.trigger(u.default.AUDIO_TRACKS_UPDATED,{audioTracks:r});var a=0;r.forEach(function(e){if(e.default)return t.audioTrack=a,void(i=!0);a++}),i===!1&&r.length&&(c.logger.log("no default audio track defined, use first audio track as default"),this.audioTrack=0)}},{key:"onAudioTrackLoaded",value:function(e){e.id=0&&e=0&&e.1){var a=i.updating;try{i.abort()}catch(e){a=!0,c.logger.warn("can not abort audio buffer: "+e)}a?this.audioTimestampOffset=e.start:(c.logger.warn("change mpeg audio timestamp offset from "+i.timestampOffset+" to "+e.start),i.timestampOffset=e.start)}}}},{key:"onManifestParsed",value:function(e){var t=e.audio,r=e.video,i=0;e.altAudio&&(t||r)&&(i=(t?1:0)+(r?1:0),c.logger.log(i+" sourceBuffer(s) expected")),this.sourceBufferNb=i}},{key:"onMediaAttaching",value:function(e){var t=this.media=e.media;if(t){var r=this.mediaSource=new MediaSource;this.onmso=this.onMediaSourceOpen.bind(this),this.onmse=this.onMediaSourceEnded.bind(this),this.onmsc=this.onMediaSourceClose.bind(this),r.addEventListener("sourceopen",this.onmso),r.addEventListener("sourceended",this.onmse),r.addEventListener("sourceclose",this.onmsc),t.src=URL.createObjectURL(r)}}},{key:"onMediaDetaching",value:function(){c.logger.log("media source detaching");var e=this.mediaSource;if(e){if("open"===e.readyState)try{e.endOfStream()}catch(e){c.logger.warn("onMediaDetaching:"+e.message+" while calling endOfStream")}e.removeEventListener("sourceopen",this.onmso),e.removeEventListener("sourceended",this.onmse),e.removeEventListener("sourceclose",this.onmsc),this.media&&(URL.revokeObjectURL(this.media.src),this.media.removeAttribute("src"),this.media.load()),this.mediaSource=null,this.media=null,this.pendingTracks={},this.tracks={},this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}this.onmso=this.onmse=this.onmsc=null,this.hls.trigger(u.default.MEDIA_DETACHED)}},{key:"onMediaSourceOpen",value:function(){c.logger.log("media source opened"),this.hls.trigger(u.default.MEDIA_ATTACHED,{media:this.media});var e=this.mediaSource;e&&e.removeEventListener("sourceopen",this.onmso),this.checkPendingTracks()}},{key:"checkPendingTracks",value:function(){var e=this.pendingTracks,t=Object.keys(e).length;t&&(this.sourceBufferNb<=t||0===this.sourceBufferNb)&&(this.createSourceBuffers(e),this.pendingTracks={},this.doAppending())}},{key:"onMediaSourceClose",value:function(){c.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){c.logger.log("media source ended")}},{key:"onSBUpdateEnd",value:function(){if(this.audioTimestampOffset){var e=this.sourceBuffer.audio;c.logger.warn("change mpeg audio timestamp offset from "+e.timestampOffset+" to "+this.audioTimestampOffset),e.timestampOffset=this.audioTimestampOffset,delete this.audioTimestampOffset}this._needsFlush&&this.doFlush(),this._needsEos&&this.checkEos(),this.appending=!1;var t=this.parent,r=this.segments.reduce(function(e,r){return r.parent===t?e+1:e},0);this.hls.trigger(u.default.BUFFER_APPENDED,{parent:t,pending:r}),this._needsFlush||this.doAppending(),this.updateMediaElementDuration()}},{key:"onSBUpdateError",value:function(e){c.logger.error("sourceBuffer error:",e),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferReset",value:function(){var e=this.sourceBuffer;for(var t in e){var r=e[t];try{this.mediaSource.removeSourceBuffer(r),r.removeEventListener("updateend",this.onsbue),r.removeEventListener("error",this.onsbe)}catch(e){}}this.sourceBuffer={},this.flushRange=[],this.segments=[],this.appended=0}},{key:"onBufferCodecs",value:function(e){if(0===Object.keys(this.sourceBuffer).length){for(var t in e)this.pendingTracks[t]=e[t];var r=this.mediaSource;r&&"open"===r.readyState&&this.checkPendingTracks()}}},{key:"createSourceBuffers",value:function(e){var t=this.sourceBuffer,r=this.mediaSource;for(var i in e)if(!t[i]){var a=e[i],n=a.levelCodec||a.codec,s=a.container+";codecs="+n;c.logger.log("creating sourceBuffer("+s+")");try{var o=t[i]=r.addSourceBuffer(s);o.addEventListener("updateend",this.onsbue),o.addEventListener("error",this.onsbe),this.tracks[i]={codec:n,container:a.container},a.buffer=o}catch(e){c.logger.error("error while trying to add sourceBuffer:"+e.message),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_ADD_CODEC_ERROR,fatal:!1,err:e,mimeType:s})}}this.hls.trigger(u.default.BUFFER_CREATED,{tracks:e})}},{key:"onBufferAppending",value:function(e){this._needsFlush||(this.segments?this.segments.push(e):this.segments=[e],this.doAppending())}},{key:"onBufferAppendFail",value:function(e){c.logger.error("sourceBuffer error:",e.event),this.hls.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1})}},{key:"onBufferEos",value:function(e){var t=this.sourceBuffer,r=e.type;for(var i in t)r&&i!==r||t[i].ended||(t[i].ended=!0,c.logger.log(i+" sourceBuffer now EOS"));this.checkEos()}},{key:"checkEos",value:function(){var e=this.sourceBuffer,t=this.mediaSource;if(!t||"open"!==t.readyState)return void(this._needsEos=!1);for(var r in e){var i=e[r];if(!i.ended)return;if(i.updating)return void(this._needsEos=!0)}c.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment");try{t.endOfStream()}catch(e){c.logger.warn("exception while calling mediaSource.endOfStream()")}this._needsEos=!1}},{key:"onBufferFlushing",value:function(e){this.flushRange.push({start:e.startOffset,end:e.endOffset,type:e.type}),this.flushBufferCounter=0,this.doFlush()}},{key:"onLevelUpdated",value:function(e){var t=e.details;0!==t.fragments.length&&(this._levelDuration=t.totalduration+t.fragments[0].start,this.updateMediaElementDuration())}},{key:"updateMediaElementDuration",value:function(){var e=this.media,t=this.mediaSource,r=this.sourceBuffer,i=this._levelDuration;if(null!==i&&e&&t&&r&&0!==e.readyState&&"open"===t.readyState){for(var a in r)if(r[a].updating)return;null===this._msDuration&&(this._msDuration=t.duration);var n=e.duration;(i>this._msDuration&&i>n||n===1/0||isNaN(n))&&(c.logger.log("Updating mediasource duration to "+i.toFixed(3)),this._msDuration=t.duration=i)}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var e=this.flushRange[0];if(!this.flushBuffer(e.start,e.end,e.type))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var t=0,r=this.sourceBuffer;try{for(var i in r)t+=r[i].buffered.length}catch(e){c.logger.error("error while accessing sourceBuffer.buffered")}this.appended=t,this.hls.trigger(u.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var e=this.hls,t=this.sourceBuffer,r=this.segments;if(Object.keys(t).length){if(this.media.error)return this.segments=[],void c.logger.error("trying to append although a media error occured, flush segment and abort");if(this.appending)return;if(r&&r.length){var i=r.shift();try{var a=i.type,n=t[a];n?n.updating?r.unshift(i):(n.ended=!1,this.parent=i.parent,n.appendBuffer(i.data),this.appendError=0,this.appended++,this.appending=!0):this.onSBUpdateEnd()}catch(t){c.logger.error("error while trying to append buffer:"+t.message),r.unshift(i);var s={type:h.ErrorTypes.MEDIA_ERROR,parent:i.parent};if(22===t.code)return this.segments=[],s.details=h.ErrorDetails.BUFFER_FULL_ERROR,s.fatal=!1,void e.trigger(u.default.ERROR,s);if(this.appendError?this.appendError++:this.appendError=1,s.details=h.ErrorDetails.BUFFER_APPEND_ERROR,this.appendError>e.config.appendErrorMaxRetry)return c.logger.log("fail "+e.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),r=[],s.fatal=!0,void e.trigger(u.default.ERROR,s);s.fatal=!1,e.trigger(u.default.ERROR,s)}}}}},{key:"flushBuffer",value:function(e,t,r){var i,a,n,s,o,l,u=this.sourceBuffer;if(Object.keys(u).length){if(c.logger.log("flushBuffer,pos/start/end: "+this.media.currentTime.toFixed(3)+"/"+e+"/"+t),this.flushBufferCounter.5)return this.flushBufferCounter++,c.logger.log("flush "+d+" ["+o+","+l+"], of ["+n+","+s+"], pos:"+this.media.currentTime),i.remove(o,l),!1}catch(e){c.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource")}}}else c.logger.warn("abort flushing too many retries");c.logger.log("buffer flushed")}return!0}}]),t}(f.default);r.default=g},{30:30,31:31,32:32,50:50}],9:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;rthis.autoLevelCapping&&t.streamController.nextLevelSwitch(),this.autoLevelCapping=t.autoLevelCapping}}}},{key:"getMaxLevel",value:function(e){var t=0,r=void 0,i=void 0,a=this.mediaWidth,n=this.mediaHeight,s=0,o=0;for(r=0;r<=e&&(i=this.levels[r],!this.isLevelRestricted(r))&&(t=r,s=i.width,o=i.height,!(a<=s||n<=o));r++);return t}},{key:"isLevelRestricted",value:function(e){return!(!this.restrictedLevels||this.restrictedLevels.indexOf(e)===-1)}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0,t=this.media;return t&&(e=t.width||t.clientWidth||t.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0,t=this.media;return t&&(e=t.height||t.clientHeight||t.offsetHeight,e*=this.contentScaleFactor),e}}]),t}(f.default);r.default=c},{31:31,32:32}],10:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&n>l.config.fpsDroppedMonitoringThreshold*s){var d=l.currentLevel;c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: "+d),d>0&&(l.autoLevelCapping===-1||l.autoLevelCapping>=d)&&(d-=1,l.trigger(u.default.FPS_DROP_LEVEL_CAPPING,{level:d,droppedLevel:l.currentLevel}),l.autoLevelCapping=d,l.streamController.nextLevelSwitch())}}this.lastTime=i,this.lastDroppedFrames=r,this.lastDecodedFrames=t}}},{key:"checkFPSInterval",value:function(){var e=this.video;if(e)if(this.isVideoPlaybackQualityAvailable){var t=e.getVideoPlaybackQuality();this.checkFPS(e,t.totalVideoFrames,t.droppedVideoFrames)}else this.checkFPS(e,e.webkitDecodedFrameCount,e.webkitDroppedFrameCount)}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],11:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0})}else o.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,fatal:!0,url:o.url,reason:"no level with compatible codecs found in manifest"})}},{key:"setLevelInternal",value:function(e){var t=this._levels,r=this.hls;if(e>=0&&e1&&a.loadErrore&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),e!==-1&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){if(void 0===this._startLevel){var e=this.hls.config.startLevel;return void 0!==e?e:this._firstLevel}return this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return this._manualLevel!==-1?this._manualLevel:this.hls.nextAutoLevel},set:function(e){this.level=e,this._manualLevel===-1&&(this.hls.nextAutoLevel=e)}}]),t}(f.default);r.default=p},{30:30,31:31,32:32,34:34,50:50}],12:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r0&&e===-1&&(k.logger.log("override startPosition with lastCurrentTime @"+t.toFixed(3)),e=t),this.state=R.IDLE,this.nextLoadPosition=this.startPosition=this.lastCurrentTime=e,this.tick()}else this.forceStartLoad=!0,this.state=R.STOPPED}},{key:"stopLoad",value:function(){var e=this.fragCurrent;e&&(e.loader&&e.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.STOPPED,this.forceStartLoad=!1}},{key:"tick",value:function(){1===++this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){switch(this.state){case R.ERROR:break;case R.BUFFER_FLUSHING:this.fragLoadError=0;break;case R.IDLE:if(!this._doTickIdle())return;break;case R.WAITING_LEVEL:var e=this.levels[this.level];e&&e.details&&(this.state=R.IDLE);break;case R.FRAG_LOADING_WAITING_RETRY:var t=performance.now(),r=this.retryDate;(!r||t>=r||this.media&&this.media.seeking)&&(k.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=R.IDLE);break;case R.ERROR:case R.STOPPED:case R.FRAG_LOADING:case R.PARSING:case R.PARSED:case R.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"_doTickIdle",value:function(){var e=this.hls,t=e.config,r=this.media;if(void 0!==this.levelLastLoaded&&!r&&(this.startFragRequested||!t.startFragPrefetch))return!0;var i=void 0;i=this.loadedmetadata?r.currentTime:this.nextLoadPosition;var a=e.nextLoadLevel,n=this.levels[a],s=n.bitrate,o=void 0;o=s?Math.max(8*t.maxBufferSize/s,t.maxBufferLength):t.maxBufferLength,o=Math.min(o,t.maxMaxBufferLength);var l=f.default.bufferInfo(this.mediaBuffer?this.mediaBuffer:r,i,t.maxBufferHole),u=l.len;if(u>=o)return!0;k.logger.trace("buffer length of "+u.toFixed(3)+" is below max of "+o.toFixed(3)+". checking for more payload ..."),this.level=e.nextLoadLevel=a;var d=n.details;if(void 0===d||d.live&&this.levelLastLoaded!==a)return this.state=R.WAITING_LEVEL,!0;var c=this.fragPrevious;if(!d.live&&c&&c.sn===d.endSN){if(Math.min(r.duration,c.start+c.duration)-Math.max(l.end,c.start)<=Math.max(.2,c.duration/2)){var h={};return this.altAudio&&(h.type="video"),this.hls.trigger(v.default.BUFFER_EOS,h),this.state=R.ENDED,!0}}return this._fetchPayloadOrEos(i,l,d)}},{key:"_fetchPayloadOrEos",value:function(e,t,r){var i=this.fragPrevious,a=this.level,n=r.fragments,s=n.length;if(0===s)return!1;var o=n[0].start,l=n[s-1].start+n[s-1].duration,u=t.end,d=void 0;if(r.initSegment&&!r.initSegment.data)d=r.initSegment;else if(r.live){var f=this.config.initialLiveManifestSize;if(sf&&(l.currentTime=f)}if(e.PTSKnown&&t>i&&l&&l.readyState)return null;if(this.startFragRequested&&!e.PTSKnown){if(a){var c=a.sn+1;c>=e.startSN&&c<=e.endSN&&(u=n[c-e.startSN],k.logger.log("live playlist, switching playlist, load frag with next SN: "+u.sn))}u||(u=n[Math.min(s-1,Math.round(s/2))],k.logger.log("live playlist, switching playlist, unknown, load middle frag : "+u.sn))}return u}},{key:"_findFragment",value:function(e,t,r,i,a,n,s){var o=this.hls.config,l=void 0,d=void 0,f=o.maxFragLookUpTolerance,c=t?i[t.sn-i[0].sn+1]:void 0,h=function(e){var t=Math.min(f,e.duration);return e.start+e.duration-t<=a?1:e.start-t>a&&e.start?-1:0};if(an-f&&(f=0),d=c&&!h(c)?c:u.default.search(i,h)):d=i[r-1],d){l=d;var g=l.sn-s.startSN,v=t&&l.level===t.level,p=i[g-1],y=i[g+1];if(v&&l.sn===t.sn)if(l.sno.maxBufferHole&&t.dropped&&g?(l=p,k.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),t.loadCounter--):(l=y,k.logger.log("SN just loaded, load next one: "+l.sn)) +}else l=null;else l.dropped&&!v&&(y&&y.backtracked?(k.logger.warn("Already backtracked from fragment "+(g+1)+", will not backtrack to fragment "+g+". Loading fragment "+(g+1)),l=y):(k.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),l.dropped=0,p?(p.loadCounter&&p.loadCounter--,l=p):l=null))}return l}},{key:"_loadFragmentOrKey",value:function(e,t,r,i,a){var n=this.hls,s=n.config;if(!e.decryptdata||null==e.decryptdata.uri||null!=e.decryptdata.key){if(k.logger.log("Loading "+e.sn+" of ["+r.startSN+" ,"+r.endSN+"],level "+t+", currentTime:"+i.toFixed(3)+",bufferEnd:"+a.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,e.loadCounter){e.loadCounter++;var o=s.fragLoadingLoopThreshold;if(e.loadCounter>o&&Math.abs(this.fragLoadIdx-e.loadIdx)t.endPTS?1:0})}},{key:"followingBufferedFrag",value:function(e){return e?this.getBufferedFrag(e.endPTS+.5):null}},{key:"_checkFragmentChanged",value:function(){var e,t,r=this.media;if(r&&r.readyState&&r.seeking===!1&&(t=r.currentTime,t>r.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=t),f.default.isBuffered(r,t)?e=this.getBufferedFrag(t):f.default.isBuffered(r,t+.1)&&(e=this.getBufferedFrag(t+.1)),e)){var i=e;if(i!==this.fragPlaying){this.hls.trigger(v.default.FRAG_CHANGED,{frag:i});var a=i.level;this.fragPlaying&&this.fragPlaying.level===a||this.hls.trigger(v.default.LEVEL_SWITCHED,{level:a}),this.fragPlaying=i}}}},{key:"immediateLevelSwitch",value:function(){if(k.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var e=this.media,t=void 0;e?(t=e.paused,e.pause()):t=!0,this.previouslyPaused=t}var r=this.fragCurrent;r&&r.loader&&r.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)}},{key:"immediateLevelSwitchEnd",value:function(){var e=this.media;e&&e.buffered.length&&(this.immediateSwitch=!1,f.default.isBuffered(e,e.currentTime)&&(e.currentTime-=1e-4),this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var e=this.media;if(e&&e.readyState){var t=void 0,r=void 0,i=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,r=this.getBufferedFrag(e.currentTime),r&&r.startPTS>1&&this.flushMainBuffer(0,r.startPTS-1),e.paused)t=0;else{var a=this.hls.nextLoadLevel,n=this.levels[a],s=this.fragLastKbps;t=s&&this.fragCurrent?this.fragCurrent.duration*n.bitrate/(1e3*s)+1:0}if((i=this.getBufferedFrag(e.currentTime+t))&&(i=this.followingBufferedFrag(i))){var o=this.fragCurrent;o&&o.loader&&o.loader.abort(),this.fragCurrent=null,this.flushMainBuffer(i.startPTS,Number.POSITIVE_INFINITY)}}}},{key:"flushMainBuffer",value:function(e,t){this.state=R.BUFFER_FLUSHING;var r={startOffset:e,endOffset:t};this.altAudio&&(r.type="video"),this.hls.trigger(v.default.BUFFER_FLUSHING,r)}},{key:"onMediaAttached",value:function(e){var t=this.media=this.mediaBuffer=e.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),t.addEventListener("seeking",this.onvseeking),t.addEventListener("seeked",this.onvseeked),t.addEventListener("ended",this.onvended);var r=this.config;this.levels&&r.autoStartLoad&&this.hls.startLoad(r.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(k.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var t=this.levels;t&&t.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0,e.backtracked=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=this.mediaBuffer=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){var e=this.media,t=e?e.currentTime:void 0,r=this.config;if(k.logger.log("media seeking to "+t.toFixed(3)),this.state===R.FRAG_LOADING){var i=this.mediaBuffer?this.mediaBuffer:e,a=f.default.bufferInfo(i,t,this.config.maxBufferHole),n=this.fragCurrent;if(0===a.len&&n){var s=r.maxFragLookUpTolerance,o=n.start-s,l=n.start+n.duration+s;tl?(n.loader&&(k.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),n.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.state=R.IDLE):k.logger.log("seeking outside of buffer but within currently loaded fragment range")}}else this.state===R.ENDED&&(this.state=R.IDLE);e&&(this.lastCurrentTime=t),this.state!==R.FRAG_LOADING&&void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*r.fragLoadingLoopThreshold),this.loadedmetadata||(this.nextLoadPosition=this.startPosition=t),this.tick()}},{key:"onMediaSeeked",value:function(){k.logger.log("media seeked to "+this.media.currentTime.toFixed(3)),this.tick()}},{key:"onMediaEnded",value:function(){k.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){k.logger.log("trigger BUFFER_RESET"),this.hls.trigger(v.default.BUFFER_RESET),this._bufferedFrags=[],this.stalled=!1,this.startPosition=this.lastCurrentTime=0}},{key:"onManifestParsed",value:function(e){var t,r=!1,i=!1;e.levels.forEach(function(e){(t=e.audioCodec)&&(t.indexOf("mp4a.40.2")!==-1&&(r=!0),t.indexOf("mp4a.40.5")!==-1&&(i=!0))}),this.audioCodecSwitch=r&&i,this.audioCodecSwitch&&k.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=e.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var a=this.config;(a.autoStartLoad||this.forceStartLoad)&&this.hls.startLoad(a.startPosition)}},{key:"onLevelLoaded",value:function(e){var t=e.details,r=e.level,i=this.levels[r],a=t.totalduration,n=0;if(k.logger.log("level "+r+" loaded ["+t.startSN+","+t.endSN+"],duration:"+a),this.levelLastLoaded=r,t.live){var s=i.details;s&&t.fragments.length>0?(E.default.mergeDetails(s,t),n=t.fragments[0].start,this.liveSyncPosition=this.computeLivePosition(n,s),t.PTSKnown?k.logger.log("live playlist sliding:"+n.toFixed(3)):k.logger.log("live playlist - outdated PTS, unknown sliding")):(t.PTSKnown=!1,k.logger.log("live playlist - first load, unknown sliding"))}else t.PTSKnown=!1;if(i.details=t,this.hls.trigger(v.default.LEVEL_UPDATED,{details:t,level:r}),this.startFragRequested===!1){if(this.startPosition===-1||this.lastCurrentTime===-1){var o=t.startTimeOffset;isNaN(o)?t.live?(this.startPosition=this.computeLivePosition(n,t),k.logger.log("configure startPosition to "+this.startPosition)):this.startPosition=0:(o<0&&(k.logger.log("negative start time offset "+o+", count from end of last fragment"),o=n+a+o),k.logger.log("start time offset found in playlist, adjust startPosition to "+o),this.startPosition=o),this.lastCurrentTime=this.startPosition}this.nextLoadPosition=this.startPosition}this.state===R.WAITING_LEVEL&&(this.state=R.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===R.KEY_LOADING&&(this.state=R.IDLE,this.tick())}},{key:"onFragLoaded",value:function(e){var t=this.fragCurrent,r=e.frag;if(this.state===R.FRAG_LOADING&&t&&"main"===r.type&&r.level===t.level&&r.sn===t.sn){var i=e.stats,a=this.levels[t.level],n=a.details;if(k.logger.log("Loaded "+t.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+t.level),this.bitrateTest=!1,this.stats=i,r.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=R.IDLE,this.startFragRequested=!1,i.tparsed=i.tbuffered=performance.now(),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else if("initSegment"===r.sn)this.state=R.IDLE,i.tparsed=i.tbuffered=performance.now(),n.initSegment.data=e.payload,this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:t,id:"main"}),this.tick();else{this.state=R.PARSING;var s=n.totalduration,o=t.level,l=t.sn,u=this.config.defaultAudioCodec||a.audioCodec;this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),void 0===u&&(u=this.lastAudioCodec),u&&(u=u.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5")),this.pendingBuffering=!0,this.appended=!1,k.logger.log("Parsing "+l+" of ["+n.startSN+" ,"+n.endSN+"],level "+o+", cc "+t.cc);var d=this.demuxer;d||(d=this.demuxer=new h.default(this.hls,"main"));var f=this.media,c=f&&f.seeking,g=!c&&(n.PTSKnown||!n.live),p=n.initSegment?n.initSegment.data:[];d.push(e.payload,p,u,a.videoCodec,t,s,g,void 0)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(e){var t=this.fragCurrent,r=e.frag;if(t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING){var i,a,n=e.tracks;if(n.audio&&this.altAudio&&delete n.audio,a=n.audio){var s=this.levels[this.level].audioCodec,o=navigator.userAgent.toLowerCase();s&&this.audioCodecSwap&&(k.logger.log("swapping playlist audio codec"),s=s.indexOf("mp4a.40.5")!==-1?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&o.indexOf("firefox")===-1&&(s="mp4a.40.5"),o.indexOf("android")!==-1&&"audio/mpeg"!==a.container&&(s="mp4a.40.2",k.logger.log("Android: force audio codec to "+s)),a.levelCodec=s,a.id=e.id}a=n.video,a&&(a.levelCodec=this.levels[this.level].videoCodec,a.id=e.id),this.hls.trigger(v.default.BUFFER_CODECS,n);for(i in n){a=n[i],k.logger.log("main track:"+i+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var l=a.initSegment;l&&(this.appended=!0,this.pendingBuffering=!0,this.hls.trigger(v.default.BUFFER_APPENDING,{type:i,data:l,parent:"main",content:"initSegment"}))}this.tick()}}},{key:"onFragParsingData",value:function(e){var t=this,r=this.fragCurrent,i=e.frag;if(r&&"main"===e.id&&i.sn===r.sn&&i.level===r.level&&("audio"!==e.type||!this.altAudio)&&this.state===R.PARSING){var a=this.levels[this.level],n=r;if(isNaN(e.endPTS)&&(e.endPTS=e.startPTS+r.duration,e.endDTS=e.startDTS+r.duration),k.logger.log("Parsed "+e.type+",PTS:["+e.startPTS.toFixed(3)+","+e.endPTS.toFixed(3)+"],DTS:["+e.startDTS.toFixed(3)+"/"+e.endDTS.toFixed(3)+"],nb:"+e.nb+",dropped:"+(e.dropped||0)),"video"===e.type)if(n.dropped=e.dropped,n.dropped){if(!n.backtracked)return n.backtracked=!0,this.nextLoadPosition=e.startPTS,this.state=R.IDLE,void this.tick();k.logger.warn("Already backtracked on this fragment, appending with the gap")}else n.backtracked=!1;var s=E.default.updateFragPTSDTS(a.details,n.sn,e.startPTS,e.endPTS,e.startDTS,e.endDTS),o=this.hls;o.trigger(v.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s,type:e.type,start:e.startPTS,end:e.endPTS}),[e.data1,e.data2].forEach(function(r){r&&r.length&&t.state===R.PARSING&&(t.appended=!0,t.pendingBuffering=!0,o.trigger(v.default.BUFFER_APPENDING,{type:e.type,data:r,parent:"main",content:"data"}))}),this.tick()}}},{key:"onFragParsed",value:function(e){var t=this.fragCurrent,r=e.frag;t&&"main"===e.id&&r.sn===t.sn&&r.level===t.level&&this.state===R.PARSING&&(this.stats.tparsed=performance.now(),this.state=R.PARSED,this._checkAppendedParsed())}},{key:"onAudioTrackSwitching",value:function(e){var t=!!e.url,r=e.id;if(!t){if(this.mediaBuffer!==this.media){k.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),this.mediaBuffer=this.media;var i=this.fragCurrent;i.loader&&(k.logger.log("switching to main audio track, cancel main fragment load"),i.loader.abort()),this.fragCurrent=null,this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=R.IDLE}var a=this.hls;a.trigger(v.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY,type:"audio"}),a.trigger(v.default.AUDIO_TRACK_SWITCHED,{id:r}),this.altAudio=!1}}},{key:"onAudioTrackSwitched",value:function(e){var t=e.id,r=!!this.hls.audioTracks[t].url;if(r){var i=this.videoBuffer;i&&this.mediaBuffer!==i&&(k.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),this.mediaBuffer=i)}this.altAudio=r,this.tick()}},{key:"onBufferCreated",value:function(e){var t=e.tracks,r=void 0,i=void 0,a=!1;for(var n in t){var s=t[n];"main"===s.id?(i=n,r=s,"video"===n&&(this.videoBuffer=t[n].buffer)):a=!0}a&&r?(k.logger.log("alternate track found, use "+i+".buffered to schedule main fragment loading"),this.mediaBuffer=r.buffer):this.mediaBuffer=this.media}},{key:"onBufferAppended",value:function(e){if("main"===e.parent){var t=this.state;t!==R.PARSING&&t!==R.PARSED||(this.pendingBuffering=e.pending>0,this._checkAppendedParsed())}}},{key:"_checkAppendedParsed",value:function(){if(!(this.state!==R.PARSED||this.appended&&this.pendingBuffering)){var e=this.fragCurrent;if(e){var t=this.mediaBuffer?this.mediaBuffer:this.media;k.logger.log("main buffered : "+T.default.toString(t.buffered));var r=this._bufferedFrags.filter(function(e){return f.default.isBuffered(t,(e.startPTS+e.endPTS)/2)});r.push(e),this._bufferedFrags=r.sort(function(e,t){return e.startPTS-t.startPTS}),this.fragPrevious=e;var i=this.stats;i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.total/(i.tbuffered-i.tfirst)),this.hls.trigger(v.default.FRAG_BUFFERED,{stats:i,frag:e,id:"main"}),this.state=R.IDLE}this.tick()}}},{key:"onError",value:function(e){var t=e.frag||this.fragCurrent;if(!t||"main"===t.type){var r=this.media,i=r&&f.default.isBuffered(r,r.currentTime)&&f.default.isBuffered(r,r.currentTime+.5);switch(e.details){case _.ErrorDetails.FRAG_LOAD_ERROR:case _.ErrorDetails.FRAG_LOAD_TIMEOUT:case _.ErrorDetails.KEY_LOAD_ERROR:case _.ErrorDetails.KEY_LOAD_TIMEOUT:if(!e.fatal){var a=this.fragLoadError;a?a++:a=1;var n=this.config;if(a<=n.fragLoadingMaxRetry||i||t.autoLevel&&t.level){this.fragLoadError=a,t.loadCounter=0;var s=Math.min(Math.pow(2,a-1)*n.fragLoadingRetryDelay,n.fragLoadingMaxRetryTimeout);k.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.loadedmetadata||(this.startFragRequested=!1,this.nextLoadPosition=this.startPosition),this.state=R.FRAG_LOADING_WAITING_RETRY}else k.logger.error("mediaController: "+e.details+" reaches max retry, redispatch as fatal ..."),e.fatal=!0,this.state=R.ERROR}break;case _.ErrorDetails.FRAG_LOOP_LOADING_ERROR:e.fatal||(i?(this._reduceMaxBufferLength(t.duration),this.state=R.IDLE):t.autoLevel&&0!==t.level||(e.fatal=!0,this.state=R.ERROR));break;case _.ErrorDetails.LEVEL_LOAD_ERROR:case _.ErrorDetails.LEVEL_LOAD_TIMEOUT:this.state!==R.ERROR&&(e.fatal?(this.state=R.ERROR,k.logger.warn("streamController: "+e.details+",switch to "+this.state+" state ...")):this.state===R.WAITING_LEVEL&&(this.state=R.IDLE));break;case _.ErrorDetails.BUFFER_FULL_ERROR:"main"!==e.parent||this.state!==R.PARSING&&this.state!==R.PARSED||(i?(this._reduceMaxBufferLength(this.config.maxBufferLength),this.state=R.IDLE):(k.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),this.fragCurrent=null,this.flushMainBuffer(0,Number.POSITIVE_INFINITY)))}}}},{key:"_reduceMaxBufferLength",value:function(e){var t=this.config;t.maxMaxBufferLength>=e&&(t.maxMaxBufferLength/=2,k.logger.warn("main:reduce max buffer length to "+t.maxMaxBufferLength+"s"),this.fragLoadIdx+=2*t.fragLoadingLoopThreshold)}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var t=e.currentTime,r=this.mediaBuffer?this.mediaBuffer:e,i=r.buffered;if(!this.loadedmetadata&&i.length){this.loadedmetadata=!0;var a=e.seeking?t:this.startPosition,n=f.default.isBuffered(r,a);t===a&&n||(k.logger.log("target start position:"+a),n||(a=i.start(0),k.logger.log("target start position not buffered, seek to buffered.start(0) "+a)),k.logger.log("adjust currentTime from "+t+" to "+a),e.currentTime=a)}else if(this.immediateSwitch)this.immediateLevelSwitchEnd();else{var s=f.default.bufferInfo(e,t,0),o=!(e.paused||e.ended||0===e.buffered.length),l=t!==this.lastCurrentTime,u=this.config;if(l)this.stallReported&&(k.logger.warn("playback not stuck anymore @"+t+", after "+Math.round(performance.now()-this.stalled)+"ms"),this.stallReported=!1),this.stalled=void 0,this.nudgeRetry=0;else if(o){var d=performance.now(),c=this.hls;if(this.stalled){var h=d-this.stalled,g=s.len,p=this.nudgeRetry||0;if(g<=.5&&h>1e3*u.lowBufferWatchdogPeriod){this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in low buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g}));var y=s.nextStart,m=y-t;if(y&&m0){this.nudgeRetry=++p;var E=p*u.nudgeOffset;k.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+y+" + nudge "+E),e.currentTime=y+E,this.stalled=void 0,c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:y+E-t})}}else if(g>.5&&h>1e3*u.highBufferWatchdogPeriod)if(this.stallReported||(this.stallReported=!0,k.logger.warn("playback stalling in high buffer @"+t),c.trigger(v.default.ERROR,{type:_.ErrorTypes.MEDIA_ERROR,details:_.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1,buffer:g})),this.stalled=void 0,this.nudgeRetry=++p,p"+e),this.hls.trigger(v.default.STREAM_STATE_TRANSITION,{previousState:t,nextState:e})}},get:function(){return this._state}},{key:"currentLevel",get:function(){var e=this.media;if(e){var t=this.getBufferedFrag(e.currentTime);if(t)return t.level}return-1}},{key:"nextBufferedFrag",get:function(){var e=this.media;return e?this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferedFrag;return e?e.level:-1}},{key:"liveSyncPosition",get:function(){return this._liveSyncPosition},set:function(e){this._liveSyncPosition=e}}]),t}(y.default);r.default=A},{24:24,30:30,31:31,32:32,34:34,35:35,45:45,50:50,51:51}],13:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r-1&&this.vttFragQueues[this.currentTrackId].length){var e=this.currentlyProcessing=this.vttFragQueues[this.currentTrackId].shift();this.hls.trigger(u.default.FRAG_LOADING,{frag:e})}}},{key:"onSubtitleFragProcessed",value:function(e){e.success&&this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn),this.currentlyProcessing=null,this.nextFrag()}},{key:"onError",value:function(e){var t=e.frag;t&&"subtitle"!==t.type||this.currentlyProcessing&&(this.currentlyProcessing=null,this.nextFrag())}},{key:"onSubtitleTracksUpdated",value:function(e){var t=this;c.logger.log("subtitle tracks updated"),this.tracks=e.subtitleTracks,this.clearVttFragQueues(),this.vttFragSNsProcessed={},this.tracks.forEach(function(e){t.vttFragSNsProcessed[e.id]=[]})}},{key:"onSubtitleTrackSwitch",value:function(e){this.currentTrackId=e.id,this.clearVttFragQueues()}},{key:"onSubtitleTrackLoaded",value:function(e){var t=this.vttFragSNsProcessed[e.id],r=this.vttFragQueues[e.id],i=this.currentlyProcessing?this.currentlyProcessing.sn:-1,a=function(e){return t.indexOf(e.sn)>-1},n=function(e){return r.some(function(t){return t.sn===e.sn})};e.details.fragments.forEach(function(t){a(t)||t.sn===i||n(t)||(t.trackId=e.id,r.push(t))}),this.nextFrag()}}]),t}(f.default);r.default=h},{31:31,32:32,50:50}],14:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r=0&&e0;)e.removeCue(e.cues[0])}function l(e,t){return e&&e.label===t.name&&!(e.textTrack1||e.textTrack2)}function u(e,t,r,i){return Math.min(t,i)-Math.max(e,r)}Object.defineProperty(r,"__esModule",{value:!0});var d=function(){function e(e,t){for(var r=0;r=0&&(o[0]=Math.min(o[0],t),o[1]=Math.max(o[1],r),n=!0,l/(r-t)>.5))return}n||a.push([t,r]),this.Cues.newCue(this[e],t,r,i)}},{key:"onInitPtsFound",value:function(e){var t=this;void 0===this.initPTS&&(this.initPTS=e.initPTS),this.unparsedVttFrags.length&&(this.unparsedVttFrags.forEach(function(e){t.onFragLoaded(e)}),this.unparsedVttFrags=[])}},{key:"getExistingTrack",value:function(e){var t=this.media;if(t)for(var r=0;r>>8^255&p^99,e[h]=p,t[p]=h;var y=c[h],m=c[y],E=c[m],b=257*c[p]^16843008*p;i[h]=b<<24|b>>>8,a[h]=b<<16|b>>>16,n[h]=b<<8|b>>>24,s[h]=b,b=16843009*E^65537*m^257*y^16843008*h,l[p]=b<<24|b>>>8,u[p]=b<<16|b>>>16,d[p]=b<<8|b>>>24,f[p]=b,h?(h=y^c[c[c[E^y]]],g^=c[c[g]]):h=g=1}}},{key:"expandKey",value:function(e){for(var t=this.uint8ArrayToUint32Array_(e),r=!0,i=0;i>8|e>>>24}},{key:"decrypt",value:function(e,t,r){for(var i,a,n=this.keySize+6,s=this.invKeySchedule,o=this.invSBox,l=this.invSubMix,u=l[0],d=l[1],f=l[2],c=l[3],h=this.uint8ArrayToUint32Array_(r),g=h[0],v=h[1],p=h[2],y=h[3],m=new Int32Array(e),E=new Int32Array(m.length),b=void 0,T=void 0,_=void 0,k=void 0,R=void 0,A=void 0,S=void 0,L=void 0,w=void 0,D=void 0,O=void 0,I=void 0,P=this.networkToHostOrderSwap;t>>24]^d[A>>16&255]^f[S>>8&255]^c[255&L]^s[i],T=u[A>>>24]^d[S>>16&255]^f[L>>8&255]^c[255&R]^s[i+1],_=u[S>>>24]^d[L>>16&255]^f[R>>8&255]^c[255&A]^s[i+2],k=u[L>>>24]^d[R>>16&255]^f[A>>8&255]^c[255&S]^s[i+3],R=b,A=T,S=_,L=k,i+=4;b=o[R>>>24]<<24^o[A>>16&255]<<16^o[S>>8&255]<<8^o[255&L]^s[i],T=o[A>>>24]<<24^o[S>>16&255]<<16^o[L>>8&255]<<8^o[255&R]^s[i+1],_=o[S>>>24]<<24^o[L>>16&255]<<16^o[R>>8&255]<<8^o[255&A]^s[i+2],k=o[L>>>24]<<24^o[R>>16&255]<<16^o[A>>8&255]<<8^o[255&S]^s[i+3],i+=3,E[t]=P(b^g),E[t+1]=P(k^v),E[t+2]=P(_^p),E[t+3]=P(T^y),g=w,v=D,p=O,y=I,t+=4}return E.buffer}},{key:"destroy",value:function(){this.key=void 0,this.keySize=void 0,this.ksRows=void 0,this.sBox=void 0,this.invSBox=void 0,this.subMix=void 0,this.invSubMix=void 0,this.keySchedule=void 0,this.invKeySchedule=void 0,this.rcon=void 0}}]),e}();r.default=n},{}],18:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>>5,(s-=h)>0&&c+h+s<=v);)for(g=m+f*u,p={unit:e.subarray(c+h,c+h+s),pts:g,dts:g},a.samples.push(p),a.len+=s,c+=s+h,f++;c>>6),(o=(60&t[r+2])>>>2)>h.length-1?void e.trigger(Event.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+o}):(u=(1&t[r+2])<<2,u|=(192&t[r+3])>>>6,i.logger.log("manifest codec:"+n+",ADTS data:type:"+s+",sampleingIndex:"+o+"["+h[o]+"Hz],channelConfig:"+u),/firefox/i.test(f)?o>=6?(s=5,d=new Array(4),l=o-3):(s=2,d=new Array(2),l=o):f.indexOf("android")!==-1?(s=2,d=new Array(2),l=o):(s=5,d=new Array(4),n&&(n.indexOf("mp4a.40.29")!==-1||n.indexOf("mp4a.40.5")!==-1)||!n&&o>=6?l=o-3:((n&&n.indexOf("mp4a.40.2")!==-1&&o>=6&&1===u||!n&&1===u)&&(s=2,d=new Array(2)),l=o)),d[0]=s<<3,d[0]|=(14&o)>>1,d[1]|=(1&o)<<7,d[1]|=u<<3,5===s&&(d[1]|=(14&l)>>1,d[2]=(1&l)<<7,d[2]|=8,d[3]=0),{config:d,samplerate:h[o],channelCount:u,codec:"mp4a.40."+s,manifestCodec:c})}};t.exports=n},{30:30,50:50}],22:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&null!=t&&null!=t.key&&"AES-128"===t.method){var g=this.decrypter;null==g&&(g=this.decrypter=new d.default(this.observer,this.config));var v,p=this;try{v=performance.now()}catch(e){v=Date.now()}g.decrypt(e,t.key.buffer,t.iv.buffer,function(e){var d;try{d=performance.now()}catch(e){d=Date.now()}p.observer.trigger(o.default.FRAG_DECRYPTED,{stats:{tstart:v,tdecrypt:d}}),p.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)})}else this.pushDecrypted(new Uint8Array(e),t,new Uint8Array(r),i,a,n,s,l,u,f,c,h)}},{key:"pushDecrypted",value:function(e,t,r,i,a,n,s,u,d,f,h,v){var y=this.demuxer;if(!y||s&&!this.probe(e)){var E=this.observer,T=this.typeSupported,_=this.config,k=[{demux:p.default,remux:m.default},{demux:c.default,remux:m.default},{demux:g.default,remux:b.default}];for(var R in k){var A=k[R],S=A.demux.probe;if(S(e)){var L=this.remuxer=new A.remux(E,_,T,this.vendor);y=new A.demux(E,L,_,T),this.probe=S;break}}if(!y)return void E.trigger(o.default.ERROR,{type:l.ErrorTypes.MEDIA_ERROR,details:l.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"no demux matching with content found"});this.demuxer=y}var w=this.remuxer;(s||u)&&(y.resetInitSegment(r,i,a,f),w.resetInitSegment()),s&&(y.resetTimeStamp(),w.resetTimeStamp(v)),"function"==typeof y.setDecryptData&&y.setDecryptData(t),y.append(e,n,d,h)}}]),e}();r.default=T},{18:18,20:20,27:27,29:29,30:30,32:32,42:42,43:43}],23:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(r,"__esModule",{value:!0});var a=e(22),n=i(a),s=e(32),o=i(s),l=e(50),u=e(1),d=i(u),f=function(e){var t=new d.default;t.trigger=function(e){for(var r=arguments.length,i=Array(r>1?r-1:0),a=1;a1?r-1:0),a=1;a1?t-1:0),i=1;i1?t-1:0),i=1;ie?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(e){var t=Math.min(this.bitsAvailable,e),r=this.word>>>32-t;return e>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=t,this.bitsAvailable>0?this.word<<=t:this.bytesAvailable>0&&this.loadWord(),t=e-t,t>0&&this.bitsAvailable?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(e){var t,r,i=8,a=8;for(t=0;t=8){var r=e.bin2str(t.subarray(4,8));return["moof","ftyp","styp"].indexOf(r)>=0}return!1}},{key:"bin2str",value:function(e){return String.fromCharCode.apply(null,e)}},{key:"findBox",value:function(t,r){var i,a,n,s,o,l=[];if(!r.length)return null;for(i=0;i1?i+a:t.byteLength,n===r[0]&&(1===r.length?l.push(t.subarray(i+8,s)):(o=e.findBox(t.subarray(i+8,s),r.slice(1)),o.length&&(l=l.concat(o)))),i=s;return l}},{key:"parseInitSegment",value:function(t){var r=[];return e.findBox(t,["moov","trak"]).forEach(function(t){var i=e.findBox(t,["tkhd"])[0];if(i){var a=i[0],n=0===a?12:20,s=i[n]<<24|i[n+1]<<16|i[n+2]<<8|i[n+3];s=s<0?4294967296+s:s;var o=e.findBox(t,["mdia","mdhd"])[0];if(o){a=o[0],n=0===a?12:20;var l=o[n]<<24|o[n+1]<<16|o[n+2]<<8|o[n+3],u=e.findBox(t,["mdia","hdlr"])[0];if(u){var d=e.bin2str(u.subarray(8,12)),f={soun:"audio",vide:"video"}[d];f&&(r[s]={timescale:l,type:f},r[f]={timescale:l,id:s})}}}}),r}},{key:"startDTS",value:function(t,r){var i,a,n;return i=e.findBox(r,["moof","traf"]),a=[].concat.apply([],i.map(function(r){return e.findBox(r,["tfhd"]).map(function(i){var a,n,s;return a=i[4]<<24|i[5]<<16|i[6]<<8|i[7],n=t[a].timescale||9e4,s=e.findBox(r,["tfdt"]).map(function(e){var t,r;return t=e[0],r=e[4]<<24|e[5]<<16|e[6]<<8|e[7],1===t&&(r*=Math.pow(2,32),r+=e[8]<<24|e[9]<<16|e[10]<<8|e[11]),r})[0],(s=s||1/0)/n})})),n=Math.min.apply(null,a),isFinite(n)?n:0}}]),e}();r.default=o},{32:32}],28:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=e.length)return void r();if(!(e[t].unit.length<32)){var i=this.decrypter.isSync();if(this.decryptAacSample(e,t,r,i),!i)return}}}},{key:"getAvcEncryptedData",value:function(e){for(var t=16*Math.floor((e.length-48)/160)+16,r=new Int8Array(t),i=0,a=32;a<=e.length-16;a+=160,i+=16)r.set(e.subarray(a,a+16),i);return r}},{key:"getAvcDecryptedUnit",value:function(e,t){t=new Uint8Array(t);for(var r=0,i=32;i<=e.length-16;i+=160,r+=16)e.set(t.subarray(r,r+16),i);return e}},{key:"decryptAvcSample",value:function(e,t,r,i,a,n){var s=this.discardEPB(a.data),o=this.getAvcEncryptedData(s),l=this;this.decryptBuffer(o.buffer,function(o){a.data=l.getAvcDecryptedUnit(s,o),n||l.decryptAvcSamples(e,t,r+1,i)})}},{key:"decryptAvcSamples",value:function(e,t,r,i){for(;;t++,r=0){if(t>=e.length)return void i();for(var a=e[t].units;!(r>=a.length);r++){var n=a[r];if(!(n.length<=48||1!==n.type&&5!==n.type)){var s=this.decrypter.isSync();if(this.decryptAvcSample(e,t,r,i,n,s),!s)return}}}}}]),e}();r.default=o},{18:18}],29:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r>4>1){if((o=a+5+e[a+4])===a+188)continue}else o=a+4;switch(s){case m:n&&(_&&(l=L(_))&&w(l,!1),_={data:[],size:0}),_&&(_.data.push(e.subarray(o,a+188)),_.size+=a+188-o);break;case E:n&&(k&&(l=L(k))&&(p.isAAC?D(l):O(l)),k={data:[],size:0}),k&&(k.data.push(e.subarray(o,a+188)),k.size+=a+188-o);break;case b:n&&(R&&(l=L(R))&&I(l),R={data:[],size:0}),R&&(R.data.push(e.subarray(o,a+188)),R.size+=a+188-o);break;case 0:n&&(o+=e[o]+1),T=this._pmtId=A(e,o);break;case T:n&&(o+=e[o]+1);var P=S(e,o,this.typeSupported.mpeg===!0||this.typeSupported.mp3===!0,null!=this.sampleAes);m=P.avc,m>0&&(h.id=m),E=P.audio,E>0&&(p.id=E,p.isAAC=P.isAAC),b=P.id3,b>0&&(y.id=b),f&&!c&&(g.logger.log("reparse from beginning"),f=!1,a=-188),c=this.pmtParsed=!0;break;case 17:case 8191:break;default:f=!0}}else this.observer.trigger(u.default.ERROR,{type:v.ErrorTypes.MEDIA_ERROR,details:v.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});_&&(l=L(_))?(w(l,!0),h.pesData=null):h.pesData=_,k&&(l=L(k))?(p.isAAC?D(l):O(l),p.pesData=null):(k&&k.size&&g.logger.log("last AAC PES packet truncated,might overlap between fragments"),p.pesData=k),R&&(l=L(R))?(I(l),y.pesData=null):y.pesData=R,null==this.sampleAes?this.remuxer.remux(p,h,y,this._txtTrack,t,r,i):this.decryptAndRemux(p,h,y,this._txtTrack,t,r,i)}},{key:"decryptAndRemux",value:function(e,t,r,i,a,n,s){if(e.samples&&e.isAAC){var o=this;this.sampleAes.decryptAacSamples(e.samples,0,function(){o.decryptAndRemuxAvc(e,t,r,i,a,n,s)})}else this.decryptAndRemuxAvc(e,t,r,i,a,n,s)}},{key:"decryptAndRemuxAvc",value:function(e,t,r,i,a,n,s){if(t.samples){var o=this;this.sampleAes.decryptAvcSamples(t.samples,0,0,function(){o.remuxer.remux(e,t,r,i,a,n,s)})}else this.remuxer.remux(e,t,r,i,a,n,s)}},{key:"destroy",value:function(){this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){return(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(e,t,r,i){var a,n,s,o,l={audio:-1,avc:-1,id3:-1,isAAC:!0};for(a=(15&e[t+1])<<8|e[t+2],n=t+3+a-4,s=(15&e[t+10])<<8|e[t+11],t+=12+s;t1;){var f=new Uint8Array(d[0].length+d[1].length);f.set(d[0]),f.set(d[1],d[0].length),d[0]=f,d.splice(1,1)}if(t=d[0],1===(t[0]<<16)+(t[1]<<8)+t[2]){if((i=(t[4]<<8)+t[5])&&i>e.size-6)return null;r=t[7],192&r&&(s=536870912*(14&t[9])+4194304*(255&t[10])+16384*(254&t[11])+128*(255&t[12])+(254&t[13])/2, +s>4294967295&&(s-=8589934592),64&r?(o=536870912*(14&t[14])+4194304*(255&t[15])+16384*(254&t[16])+128*(255&t[17])+(254&t[18])/2,o>4294967295&&(o-=8589934592),s-o>54e5&&(g.logger.warn(Math.round((s-o)/9e4)+"s delta between PTS and DTS, align them"),s=o)):o=s),a=t[8],l=a+9,e.size-=l,n=new Uint8Array(e.size);for(var c=0,h=d.length;cv){l-=v;continue}t=t.subarray(l),v-=l,l=0}n.set(t,u),u+=v}return i&&(i-=a+3),{data:n,pts:s,dts:o,len:i}}return null}},{key:"pushAccesUnit",value:function(e,t){if(e.units.length&&e.frame){var r=t.samples,i=r.length;!this.config.forceKeyFrameOnDiscontinuity||e.key===!0||t.sps&&(i||this.contiguous)?(e.id=i,r.push(e)):t.dropped++}e.debug.length&&g.logger.log(e.pts+"/"+e.dts+":"+e.debug)}},{key:"_parseAVCPES",value:function(e,t){var r,i,a,n=this,s=this._avcTrack,o=this._parseAVCNALu(e.data),l=this.avcSample;e.data=null,o.forEach(function(t){switch(t.type){case 1:i=!0,l.frame=!0;var o=t.data;if(o.length>4){var u=new f.default(o).readSliceType();2!==u&&4!==u&&7!==u&&9!==u||(l.key=!0)}break;case 5:i=!0,l||(l=n.avcSample=n._createAVCSample(!0,e.pts,e.dts,"")),l.key=!0,l.frame=!0;break;case 6:i=!0,r=new f.default(n.discardEPB(t.data)),r.readUByte();for(var d=0,c=0,h=!1,g=0;!h&&r.bytesAvailable>1;){d=0;do{g=r.readUByte(),d+=g}while(255===g);c=0;do{g=r.readUByte(),c+=g}while(255===g);if(4===d&&0!==r.bytesAvailable){h=!0;if(181===r.readUByte()){if(49===r.readUShort()){if(1195456820===r.readUInt()){if(3===r.readUByte()){var v=r.readUByte(),p=r.readUByte(),y=31&v,m=[v,p];for(a=0;a0){if(t.pts>=e[r-1].pts)e.push(t);else for(var i=r-1;i>=0;i--)if(t.pts=0)i={data:e.subarray(c,s-u-1),type:n},f.push(i);else{var h=this._getLastNalUnit();if(h&&(d&&s<=4-d&&h.state&&(h.data=h.data.subarray(0,h.data.byteLength-d)),(r=s-u-1)>0)){var g=new Uint8Array(h.data.byteLength+r);g.set(h.data,0),g.set(e.subarray(0,r),h.data.byteLength),h.data=g}}s=0&&u>=0&&(i={data:e.subarray(c,o),type:n,state:u},f.push(i)),0===f.length){var v=this._getLastNalUnit();if(v){var p=new Uint8Array(v.data.byteLength+e.byteLength);p.set(v.data,0),p.set(e,v.data.byteLength),v.data=p}}return l.naluState=u,f}},{key:"discardEPB",value:function(e){for(var t,r,i=e.byteLength,a=[],n=1;n1&&(g.logger.log("AAC: align PTS for overlapping frames by "+Math.round((k-p)/90)),p=k)}for(;n+5>>5,(r-=s)>0&&n+s+r<=d);)for(l=p+a*i,f={unit:h.subarray(n+s,n+s+r),pts:l,dts:l},c.samples.push(f),c.len+=r,n+=r+s,a++;n0;)s+=t}},{key:"_onMpegFrame",value:function(e,t,r,i,a,n){var s=1152/r*1e3,o=n+a*s,l=this._audioTrack;l.config=[],l.channelCount=i,l.samplerate=r,l.duration=this._duration,l.samples.push({unit:e,pts:o,dts:o}),l.len+=e.length}},{key:"_onMpegNoise",value:function(e){g.logger.warn("mpeg audio has noise: "+e.length+" bytes")}},{key:"_parseMpeg",value:function(e,t,r,i,a){var n=[32,64,96,128,160,192,224,256,288,320,352,384,416,448,32,48,56,64,80,96,112,128,160,192,224,256,320,384,32,40,48,56,64,80,96,112,128,160,192,224,256,320,32,48,56,64,80,96,112,128,144,160,176,192,224,256,8,16,24,32,40,48,56,64,80,96,112,128,144,160],s=[44100,48e3,32e3,22050,24e3,16e3,11025,12e3,8e3];if(t+2>r)return-1;if(255===e[t]||224==(224&e[t+1])){if(t+24>r)return-1;var o=e[t+1]>>3&3,l=e[t+1]>>1&3,u=e[t+2]>>4&15,d=e[t+2]>>2&3,f=!!(2&e[t+2]);if(1!==o&&0!==u&&15!==u&&3!==d){var c=3===o?3-l:3===l?3:4,h=1e3*n[14*c+u-1],g=3===o?0:2===o?1:2,v=s[3*g+d],p=f?1:0,y=e[t+3]>>6==3?1:2,m=3===l?(3===o?12:6)*h/v+p<<2:(3===o?144:72)*h/v+p|0;return t+m>r?-1:(this._onMpegFrame&&this._onMpegFrame(e.subarray(t,t+m),h,v,y,i,a),m)}}for(var E=t+2;E=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),e}();r.default=p},{21:21,25:25,28:28,30:30,32:32,50:50}],30:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",MUX_ERROR:"muxError",OTHER_ERROR:"otherError"},r.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",AUDIO_TRACK_LOAD_ERROR:"audioTrackLoadError",AUDIO_TRACK_LOAD_TIMEOUT:"audioTrackLoadTimeOut",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",REMUX_ALLOC_ERROR:"remuxAllocError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_ADD_CODEC_ERROR:"bufferAddCodecError",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",BUFFER_NUDGE_ON_STALL:"bufferNudgeOnStall",INTERNAL_EXCEPTION:"internalException",WEBVTT_EXCEPTION:"webVTTException"}},{}],31:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a="function"==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},n=function(){function e(e,t){for(var r=0;r1?r-1:0),n=1;n=r.start(i)&&t<=r.end(i))return!0;return!1},bufferInfo:function(e,t,r){if(e){var i,a=e.buffered,n=[];for(i=0;id&&(l[u-1].end=e[o].end):l.push(e[o])}else l.push(e[o])}for(o=0,i=0,a=n=t;o=f&&t=0&&oe.endSN)return 0;if(o=t-e.startSN,l=e.fragments,u=l[o],!isNaN(u.startPTS)){var f=Math.abs(u.startPTS-r);isNaN(u.deltaPTS)?u.deltaPTS=f:u.deltaPTS=Math.max(f,u.deltaPTS),r=Math.min(r,u.startPTS),i=Math.max(i,u.endPTS),n=Math.min(n,u.startDTS),s=Math.max(s,u.endDTS)}var c=r-u.start;for(u.start=u.startPTS=r,u.endPTS=i,u.startDTS=n,u.endDTS=s,u.duration=i-r,d=o;d>0;d--)a.updatePTS(l,d,d-1);for(d=o;dt?a.start+a.duration:a.start-n.duration:r>t?(a.duration=s-a.start,a.duration<0&&i.logger.warn("negative duration computed for frag "+a.sn+",level "+a.level+", there should be some duration drift between playlist and fragment!")):(n.duration=a.start-s,n.duration<0&&i.logger.warn("negative duration computed for frag "+n.sn+",level "+n.level+", there should be some duration drift between playlist and fragment!"))}};t.exports=a},{50:50}],36:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};a(this,e);var i=e.DefaultConfig;if((r.liveSyncDurationCount||r.liveMaxLatencyDurationCount)&&(r.liveSyncDuration||r.liveMaxLatencyDuration))throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");for(var n in i)n in r||(r[n]=i[n]);if(void 0!==r.liveMaxLatencyDurationCount&&r.liveMaxLatencyDurationCount<=r.liveSyncDurationCount)throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');if(void 0!==r.liveMaxLatencyDuration&&(r.liveMaxLatencyDuration<=r.liveSyncDuration||void 0===r.liveSyncDuration))throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');(0,T.enableLogs)(r.debug),this.config=r,this._autoLevelCapping=-1;var s=this.observer=new k.default;s.trigger=function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),i=1;i1?t-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:-1;T.logger.log("startLoad("+e+")"),this.networkControllers.forEach(function(t){t.startLoad(e)})}},{key:"stopLoad",value:function(){T.logger.log("stopLoad"),this.networkControllers.forEach(function(e){e.stopLoad()})}},{key:"swapAudioCodec",value:function(){T.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){T.logger.log("recoverMediaError");var e=this.media;this.detachMedia(),this.attachMedia(e)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(e){T.logger.log("set currentLevel:"+e),this.loadLevel=e,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(e){T.logger.log("set nextLevel:"+e),this.levelController.manualLevel=e,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(e){T.logger.log("set loadLevel:"+e),this.levelController.manualLevel=e}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return Math.max(this.levelController.firstLevel,this.minAutoLevel)},set:function(e){T.logger.log("set firstLevel:"+e),this.levelController.firstLevel=e}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(e){T.logger.log("set startLevel:"+e);var t=this;e!==-1&&(e=Math.max(e,t.minAutoLevel)),t.levelController.startLevel=e}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){T.logger.log("set autoLevelCapping:"+e),this._autoLevelCapping=e}},{key:"autoLevelEnabled",get:function(){return this.levelController.manualLevel===-1}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}},{key:"minAutoLevel",get:function(){for(var e=this,t=e.levels,r=e.config.minAutoBitrate,i=t?t.length:0,a=0;ar)return a}return 0}},{key:"maxAutoLevel",get:function(){var e=this,t=e.levels,r=e.autoLevelCapping;return r===-1&&t&&t.length?t.length-1:r}},{key:"nextAutoLevel",get:function(){var e=this;return Math.min(Math.max(e.abrController.nextAutoLevel,e.minAutoLevel),e.maxAutoLevel)},set:function(e){var t=this;t.abrController.nextAutoLevel=Math.max(t.minAutoLevel,e)}},{key:"audioTracks",get:function(){var e=this.audioTrackController;return e?e.audioTracks:[]}},{key:"audioTrack",get:function(){var e=this.audioTrackController;return e?e.audioTrack:-1},set:function(e){var t=this.audioTrackController;t&&(t.audioTrack=e)}},{key:"liveSyncPosition",get:function(){return this.streamController.liveSyncPosition}},{key:"subtitleTracks",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTracks:[]}},{key:"subtitleTrack",get:function(){var e=this.subtitleTrackController;return e?e.subtitleTrack:-1},set:function(e){var t=this.subtitleTrackController;t&&(t.subtitleTrack=e)}}]),e}();r.default=A},{1:1,11:11,12:12,2:2,30:30,32:32,38:38,39:39,4:4,40:40,50:50}],37:[function(e,t,r){"use strict";t.exports=e(36).default},{36:36}],38:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(r,"__esModule",{value:!0});var o=function(){function e(e,t){for(var r=0;r>8*(15-r)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,t){var r=e;return e&&e.method&&e.uri&&!e.iv&&(r=new T,r.method=e.method,r.baseuri=e.baseuri,r.reluri=e.reluri,r.iv=this.createInitializationVector(t)),r}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"url",get:function(){return!this._url&&this.relurl&&(this._url=u.default.buildAbsoluteURL(this.baseurl,this.relurl,{alwaysNormalize:!0})),this._url},set:function(e){this._url=e}},{key:"programDateTime",get:function(){return!this._programDateTime&&this.rawProgramDateTime&&(this._programDateTime=new Date(Date.parse(this.rawProgramDateTime))),this._programDateTime}},{key:"byteRange",get:function(){if(!this._byteRange){var e=this._byteRange=[] +;if(this.rawByteRange){var t=this.rawByteRange.split("@",2);if(1===t.length){var r=this.lastByteRangeEndOffset;e[0]=r?r:0}else e[0]=parseInt(t[1]);e[1]=parseInt(t[0])+e[0]}}return this._byteRange}},{key:"byteRangeStartOffset",get:function(){return this.byteRange[0]}},{key:"byteRangeEndOffset",get:function(){return this.byteRange[1]}},{key:"decryptdata",get:function(){return this._decryptdata||(this._decryptdata=this.fragmentDecryptdataFromLevelkey(this.levelkey,this.sn)),this._decryptdata}}]),e}(),k=function(e){function t(e){s(this,t);var r=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,f.default.MANIFEST_LOADING,f.default.LEVEL_LOADING,f.default.AUDIO_TRACK_LOADING,f.default.SUBTITLE_TRACK_LOADING));return r.loaders={},r}return n(t,e),o(t,[{key:"destroy",value:function(){for(var e in this.loaders){var t=this.loaders[e];t&&t.destroy()}this.loaders={},h.default.prototype.destroy.call(this)}},{key:"onManifestLoading",value:function(e){this.load(e.url,{type:"manifest"})}},{key:"onLevelLoading",value:function(e){this.load(e.url,{type:"level",level:e.level,id:e.id})}},{key:"onAudioTrackLoading",value:function(e){this.load(e.url,{type:"audioTrack",id:e.id})}},{key:"onSubtitleTrackLoading",value:function(e){this.load(e.url,{type:"subtitleTrack",id:e.id})}},{key:"load",value:function(e,t){var r=this.loaders[t.type];if(r){var i=r.context;if(i&&i.url===e)return void y.logger.trace("playlist request ongoing");y.logger.warn("abort previous loader for type:"+t.type),r.abort()}var a=this.hls.config,n=void 0,s=void 0,o=void 0,l=void 0;"manifest"===t.type?(n=a.manifestLoadingMaxRetry,s=a.manifestLoadingTimeOut,o=a.manifestLoadingRetryDelay,l=a.manifestLoadingMaxRetryTimeout):(n=a.levelLoadingMaxRetry,s=a.levelLoadingTimeOut,o=a.levelLoadingRetryDelay,l=a.levelLoadingMaxRetryTimeout,y.logger.log("loading playlist for "+t.type+" "+(t.level||t.id))),r=this.loaders[t.type]=t.loader=void 0!==a.pLoader?new a.pLoader(a):new a.loader(a),t.url=e,t.responseType="";var u=void 0,d=void 0;u={timeout:s,maxRetry:n,retryDelay:o,maxRetryDelay:l},d={onSuccess:this.loadsuccess.bind(this),onError:this.loaderror.bind(this),onTimeout:this.loadtimeout.bind(this)},r.load(t,u,d)}},{key:"resolve",value:function(e,t){return u.default.buildAbsoluteURL(t,e,{alwaysNormalize:!0})}},{key:"parseMasterPlaylist",value:function(e,t){var r=[],i=void 0;for(m.lastIndex=0;null!=(i=m.exec(e));){var a={},n=a.attrs=new p.default(i[1]);a.url=this.resolve(i[2],t);var s=n.decimalResolution("RESOLUTION");s&&(a.width=s.width,a.height=s.height),a.bitrate=n.decimalInteger("AVERAGE-BANDWIDTH")||n.decimalInteger("BANDWIDTH"),a.name=n.NAME;var o=n.CODECS;if(o){o=o.split(/[ ,]+/);for(var l=0;l2?(t=r.shift()+".",t+=parseInt(r.shift()).toString(16),t+=("000"+parseInt(r.shift()).toString(16)).substr(-4)):t=e,t}},{key:"parseLevelPlaylist",value:function(e,t,r,i){var a,n,s=0,o=0,l={type:null,version:null,url:t,fragments:[],live:!0,startSN:0},u=new T,d=0,f=null,c=new _;for(b.lastIndex=0;null!==(a=b.exec(e));){var h=a[1];if(h){c.duration=parseFloat(h);var g=(" "+a[2]).slice(1);c.title=g?g:null,c.tagList.push(g?["INF",h,g]:["INF",h])}else if(a[3]){if(!isNaN(c.duration)){var v=s++;c.type=i,c.start=o,c.levelkey=u,c.sn=v,c.level=r,c.cc=d,c.baseurl=t,c.relurl=(" "+a[3]).slice(1),l.fragments.push(c),f=c,o+=c.duration,c=new _}}else if(a[4]){if(c.rawByteRange=(" "+a[4]).slice(1),f){var m=f.byteRangeEndOffset;m&&(c.lastByteRangeEndOffset=m)}}else if(a[5])c.rawProgramDateTime=(" "+a[5]).slice(1),c.tagList.push(["PROGRAM-DATE-TIME",c.rawProgramDateTime]);else{for(a=a[0].match(/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)(.*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/),n=1;n=0&&(u.method=S,u.baseuri=t,u.reluri=L,u.key=null,u.iv=w));break;case"START":var D=E,O=new p.default(D),I=O.decimalFloatingPoint("TIME-OFFSET");isNaN(I)||(l.startTimeOffset=I);break;case"MAP":var P=new p.default(E);c.relurl=P.URI,c.rawByteRange=P.BYTERANGE,c.baseurl=t,c.level=r,c.type=i,c.sn="initSegment",l.initSegment=c,c=new _;break;default:y.logger.warn("line parsed but not handled: "+a)}}}return c=f,c&&!c.relurl&&(l.fragments.pop(),o-=c.duration),l.totalduration=o,l.averagetargetduration=o/l.fragments.length,l.endSN=s-1,l}},{key:"loadsuccess",value:function(e,t,r){var i=e.data,a=e.url,n=r.type,s=r.id,o=r.level,l=this.hls;if(this.loaders[n]=void 0,void 0!==a&&0!==a.indexOf("data:")||(a=r.url),t.tload=performance.now(),0===i.indexOf("#EXTM3U"))if(i.indexOf("#EXTINF:")>0){var u="audioTrack"!==n&&"subtitleTrack"!==n,d=isNaN(o)?isNaN(s)?0:s:o,c=this.parseLevelPlaylist(i,a,d,"audioTrack"===n?"audio":"subtitleTrack"===n?"subtitle":"main");c.tload=t.tload,"manifest"===n&&l.trigger(f.default.MANIFEST_LOADED,{levels:[{url:a,details:c}],audioTracks:[],url:a,stats:t}),t.tparsed=performance.now(),c.targetduration?u?l.trigger(f.default.LEVEL_LOADED,{details:c,level:o||0,id:s||0,stats:t}):"audioTrack"===n?l.trigger(f.default.AUDIO_TRACK_LOADED,{details:c,id:s,stats:t}):"subtitleTrack"===n&&l.trigger(f.default.SUBTITLE_TRACK_LOADED,{details:c,id:s,stats:t}):l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"invalid targetduration"})}else{var h=this.parseMasterPlaylist(i,a);if(h.length){var v=this.parseMasterPlaylistMedia(i,a,"AUDIO"),p=this.parseMasterPlaylistMedia(i,a,"SUBTITLES");if(v.length){var m=!1;v.forEach(function(e){e.url||(m=!0)}),m===!1&&h[0].audioCodec&&!h[0].attrs.AUDIO&&(y.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),v.unshift({type:"main",name:"main"}))}l.trigger(f.default.MANIFEST_LOADED,{levels:h,audioTracks:v,subtitles:p,url:a,stats:t})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no level found in manifest"})}else l.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:g.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:a,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_ERROR,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,response:e,context:t})}},{key:"loadtimeout",value:function(e,t){var r,i,a=t.loader;switch(t.type){case"manifest":r=g.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0;break;case"level":r=g.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1;break;case"audioTrack":r=g.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT,i=!1}a&&(a.abort(),this.loaders[t.type]=void 0),this.hls.trigger(f.default.ERROR,{type:g.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:a.url,loader:a,context:t})}}]),t}(h.default);r.default=k},{2:2,30:30,31:31,32:32,44:44,50:50}],41:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r>24&255,t[1]=i>>16&255,t[2]=i>>8&255,t[3]=255&i,t.set(e,4),a=0,i=8;a>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trex(t[r]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){r*=t;var i=Math.floor(r/(n+1)),a=Math.floor(r%(n+1)),s=new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,i>>24,i>>16&255,i>>8&255,255&i,a>>24,a>>16&255,a>>8&255,255&a,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,s)}},{key:"sdtp",value:function(t){var r,i,a=t.samples||[],n=new Uint8Array(4+a.length);for(i=0;i>>8&255),n.push(255&a),n=n.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&a),s=s.concat(Array.prototype.slice.call(i));var o=e.box(e.types.avcC,new Uint8Array([1,n[3],n[4],n[5],255,224|t.sps.length].concat(n).concat([t.pps.length]).concat(s))),l=t.width,u=t.height,d=t.pixelRatio[0],f=t.pixelRatio[1];return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,l>>8&255,255&l,u>>8&255,255&u,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),o,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])),e.box(e.types.pasp,new Uint8Array([d>>24,d>>16&255,d>>8&255,255&d,f>>24,f>>16&255,f>>8&255,255&f])))}},{key:"esds",value:function(e){var t=e.config.length;return new Uint8Array([0,0,0,0,3,23+t,0,1,0,4,15+t,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([t]).concat(e.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.samplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"mp3",value:function(t){var r=t.samplerate;return e.box(e.types[".mp3"],new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]))}},{key:"stsd",value:function(t){return"audio"===t.type?t.isAAC||"mp3"!==t.codec?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.mp3(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration*t.timescale,a=t.width,s=t.height,o=Math.floor(i/(n+1)),l=Math.floor(i%(n+1));return e.box(e.types.tkhd,new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,o>>24,o>>16&255,o>>8&255,255&o,l>>24,l>>16&255,l>>8&255,255&l,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,s>>8&255,255&s,0,0]))}},{key:"traf",value:function(t,r){var i=e.sdtp(t),a=t.id,s=Math.floor(r/(n+1)),o=Math.floor(r%(n+1));return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a])),e.box(e.types.tfdt,new Uint8Array([1,0,0,0,s>>24,s>>16&255,s>>8&255,255&s,o>>24,o>>16&255,o>>8&255,255&o])),e.trun(t,i.length+16+20+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(t){var r=t.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(t,r){var i,a,n,s,o,l,u=t.samples||[],d=u.length,f=12+16*d,c=new Uint8Array(f);for(r+=8+f,c.set([0,0,15,1,d>>>24&255,d>>>16&255,d>>>8&255,255&d,r>>>24&255,r>>>16&255,r>>>8&255,255&r],0),i=0;i>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,o.isLeading<<2|o.dependsOn,o.isDependedOn<<6|o.hasRedundancy<<4|o.paddingValue<<1|o.isNonSync,61440&o.degradPrio,15&o.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,c)}},{key:"initSegment",value:function(t){e.types||e.init();var r,i=e.moov(t);return r=new Uint8Array(e.FTYP.byteLength+i.byteLength),r.set(e.FTYP),r.set(i,e.FTYP.byteLength),r}}]),e}();r.default=s},{}],42:[function(e,t,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r-1&&s&&!s.match("CriOS"),this.ISGenerated=!1}return n(e,[{key:"destroy",value:function(){}},{key:"resetTimeStamp",value:function(e){this._initPTS=this._initDTS=e}},{key:"resetInitSegment",value:function(){this.ISGenerated=!1}},{key:"remux",value:function(e,t,r,i,a,n,s){if(this.ISGenerated||this.generateIS(e,t,a),this.ISGenerated)if(e.samples.length){var o=this.remuxAudio(e,a,n,s);if(t.samples.length){var l=void 0;o&&(l=o.endPTS-o.startPTS),this.remuxVideo(t,a,n,l)}}else{var d=void 0;t.samples.length&&(d=this.remuxVideo(t,a,n)),d&&e.codec&&this.remuxEmptyAudio(e,a,n,d)}r.samples.length&&this.remuxID3(r,a),i.samples.length&&this.remuxText(i,a),this.observer.trigger(u.default.FRAG_PARSED)}},{key:"generateIS",value:function(e,t,r){var i,a,n=this.observer,s=e.samples,o=t.samples,l=this.typeSupported,f="audio/mp4",g={},v={tracks:g},p=void 0===this._initPTS;if(p&&(i=a=1/0),e.config&&s.length&&(e.timescale=e.samplerate,d.logger.log("audio sampling rate : "+e.samplerate),e.isAAC||(l.mpeg?(f="audio/mpeg",e.codec=""):l.mp3&&(e.codec="mp3")),g.audio={container:f,codec:e.codec,initSegment:!e.isAAC&&l.mpeg?new Uint8Array:c.default.initSegment([e]),metadata:{channelCount:e.channelCount}},p&&(i=a=s[0].pts-e.inputTimeScale*r)),t.sps&&t.pps&&o.length){var y=t.inputTimeScale;t.timescale=y,g.video={container:"video/mp4",codec:t.codec,initSegment:c.default.initSegment([t]),metadata:{width:t.width,height:t.height}},p&&(i=Math.min(i,o[0].pts-y*r),a=Math.min(a,o[0].dts-y*r),this.observer.trigger(u.default.INIT_PTS_FOUND,{initPTS:i}))}Object.keys(g).length?(n.trigger(u.default.FRAG_PARSING_INIT_SEGMENT,v),this.ISGenerated=!0,p&&(this._initPTS=i,this._initDTS=a)):n.trigger(u.default.ERROR,{type:h.ErrorTypes.MEDIA_ERROR,details:h.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(e,t,r,i){var a,n,s,o,l,f,g,v=8,p=e.timescale,y=e.samples,m=[],E=y.length,b=this._PTSNormalize,T=this._initDTS;y.sort(function(e,t){var r=e.dts-t.dts,i=e.pts-t.pts;return r?r:i?i:e.id-t.id});var _=y.reduce(function(e,t){return Math.max(Math.min(e,t.pts-t.dts),-18e3)},0);if(_<0){d.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(_/90)+" ms to overcome this issue");for(var k=0;k1?d.logger.log("AVC:"+S+" ms hole between fragments detected,filling it"):S<-1&&d.logger.log("AVC:"+-S+" ms overlapping between fragments detected"),l=R,y[0].dts=l+T,o=Math.max(o-S,R),y[0].pts=o+T,d.logger.log("Video/PTS/DTS adjusted: "+Math.round(o/90)+"/"+Math.round(l/90)+",delta:"+S+" ms")),A=y[y.length-1],g=Math.max(b(A.dts-T,R),0),f=Math.max(b(A.pts-T,R),0),f=Math.max(f,g);var L=this.isSafari;L&&(a=Math.round((g-l)/(y.length-1)));for(var w=0,D=0,O=0;O0?U-1:U].dts;if(q.stretchShortVideoTrack){var Q=q.maxBufferHole,J=q.maxSeekHole,Z=Math.floor(Math.min(Q,J)*p),$=(i?o+i*p:this.nextAudioPts)-B.pts;$>Z?(a=$-z,a<0&&(a=z),d.logger.log("It is approximately "+$/90+" ms to the next segment; using duration "+a/90+" ms for the last video frame.")):a=z}else a=z}K=Math.round(B.pts-B.dts)}m.push({size:j,duration:a,cts:K,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:B.key?2:1,isNonSync:B.key?0:1}})}this.nextAvcDts=g+a;var ee=e.dropped;if(e.len=0,e.nbNalu=0,e.dropped=0,m.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1){var te=m[0].flags;te.dependsOn=2,te.isNonSync=0}e.samples=m,s=c.default.moof(e.sequenceNumber++,l,e),e.samples=[];var re={data1:s,data2:n,startPTS:o/p,endPTS:(f+a)/p,startDTS:l/p,endDTS:this.nextAvcDts/p,type:"video",nb:m.length,dropped:ee};return this.observer.trigger(u.default.FRAG_PARSING_DATA,re),re}},{key:"remuxAudio",value:function(e,t,r,i){var a,n,s,l,f,g,v,p,y,m,E,b,T,_,k,R,A=e.inputTimeScale,S=e.timescale,L=A/S,w=e.isAAC?1024:1152,D=w*L,O=this._PTSNormalize,I=this._initDTS,P=!e.isAAC&&this.typeSupported.mpeg,C=P?0:8,x=[],F=[];if(e.samples.sort(function(e,t){return e.pts-t.pts}),F=e.samples,R=this.nextAudioPts,r|=F.length&&R&&(Math.abs(t-R/A)<.1||Math.abs(F[0].pts-R-I)<20*D),r||(R=t*A),i&&e.isAAC)for(var M=0,N=R;M=D&&N){var j=Math.round(G/D);d.logger.warn("Injecting "+j+" audio frame @ "+(N/A).toFixed(3)+"s due to "+1e3*G/A+" ms gap.");for(var K=0;K0)Y=Math.round((b-R)/D),d.logger.log(V+" ms hole between AAC samples detected,filling it"),Y>0&&(_=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount),_||(_=l.subarray()),e.len+=Y*_.length);else if(V<-12){d.logger.log(-V+" ms overlapping between AAC samples detected, drop frame"),e.len-=l.byteLength;continue}b=T=R}if(v=Math.max(0,b),p=Math.max(0,T),!(e.len>0))return;var X=P?e.len:e.len+8;try{f=new Uint8Array(X)}catch(e){return void this.observer.trigger(u.default.ERROR,{type:h.ErrorTypes.MUX_ERROR,details:h.ErrorDetails.REMUX_ALLOC_ERROR,fatal:!1,bytes:X,reason:"fail allocating audio mdat "+X})}P||(a=new DataView(f.buffer),a.setUint32(0,X),f.set(c.default.types.mdat,4));for(var q=0;q=2&&(Q=x[J-2].duration,s.duration=Q),J){this.nextAudioPts=b+L*Q,e.len=0,e.samples=x,g=P?new Uint8Array:c.default.moof(e.sequenceNumber++,p/L,e),e.samples=[];var Z={data1:g,data2:f,startPTS:v/A,endPTS:this.nextAudioPts/A,startDTS:p/A,endDTS:(T+L*Q)/A,type:"audio",nb:J};return this.observer.trigger(u.default.FRAG_PARSING_DATA,Z),Z}return null}},{key:"remuxEmptyAudio",value:function(e,t,r,i){var a=e.inputTimeScale,n=e.samplerate?e.samplerate:a,s=a/n,l=this.nextAudioPts,u=(void 0!==l?l:i.startDTS*a)+this._initDTS,f=i.endDTS*a+this._initDTS,c=1024*s,h=Math.ceil((f-u)/c),g=o.default.getSilentFrame(e.manifestCodec||e.codec,e.channelCount);if(d.logger.warn("remux empty Audio"),!g)return void d.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!");for(var v=[],p=0;p4294967296;)e+=r;return e}}]),e}();r.default=g},{30:30,32:32,33:33,41:41,50:50}],43:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"hexadecimalInteger",value:function(e){if(this[e]){var t=(this[e]||"0x").slice(2);t=(1&t.length?"0":"")+t;for(var r=new Uint8Array(t.length/2),i=0;iNumber.MAX_SAFE_INTEGER?1/0:t}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(e){var t=n.exec(this[e]);if(null!==t)return{width:parseInt(t[1],10),height:parseInt(t[2],10)}}}],[{key:"parseAttrList",value:function(e){var t,r={};for(s.lastIndex=0;null!==(t=s.exec(e));){var i=t[2];0===i.indexOf('"')&&i.lastIndexOf('"')===i.length-1&&(i=i.slice(1,-1)),r[t[1]]=i}return r}}]),e}();r.default=o},{}],45:[function(e,t,r){"use strict";var i={search:function(e,t){for(var r=0,i=e.length-1,a=null,n=null;r<=i;){a=(r+i)/2|0,n=e[a];var s=t(n);if(s>0)r=a+1;else{if(!(s<0))return n;i=a-1}}return null}};t.exports=i},{}],46:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;rl&&(g.log("ERROR","Too large cursor position "+this.pos),this.pos=l)}},{key:"moveCursor",value:function(e){var t=this.pos+e;if(e>1)for(var r=this.pos+1;r=144&&this.backSpace();var t=s(e);if(this.pos>=l)return void g.log("ERROR","Cannot insert "+e.toString(16)+" ("+t+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(t,this.currPenState),this.moveCursor(1)}},{key:"clearFromPos",value:function(e){var t;for(t=e;t0&&(r=e?"["+t.join(" | ")+"]":t.join("\n")),r}},{key:"getTextAndFormat",value:function(){return this.rows}}]),e}(),b=function(){function e(t,r){i(this,e),this.chNr=t,this.outputFilter=r,this.mode=null,this.verbose=0,this.displayedMemory=new E,this.nonDisplayedMemory=new E,this.lastOutputScreen=new E,this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null}return a(e,[{key:"reset",value:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[o-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null}},{key:"getHandler",value:function(){return this.outputFilter}},{key:"setHandler",value:function(e){this.outputFilter=e}},{key:"setPAC",value:function(e){this.writeScreen.setPAC(e)}},{key:"setBkgData",value:function(e){this.writeScreen.setBkgData(e)}},{key:"setMode",value:function(e){e!==this.mode&&(this.mode=e,g.log("INFO","MODE="+e),"MODE_POP-ON"===this.mode?this.writeScreen=this.nonDisplayedMemory:(this.writeScreen=this.displayedMemory,this.writeScreen.reset()),"MODE_ROLL-UP"!==this.mode&&(this.displayedMemory.nrRollUpRows=null,this.nonDisplayedMemory.nrRollUpRows=null),this.mode=e)}},{key:"insertChars",value:function(e){for(var t=0;t=46,t.italics)t.foreground="white";else{var r=Math.floor(e/2)-16,i=["white","green","blue","cyan","red","yellow","magenta"];t.foreground=i[r]}g.log("INFO","MIDROW: "+JSON.stringify(t)),this.writeScreen.setPen(t)}},{key:"outputDataUpdate",value:function(){var e=g.time;null!==e&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(e,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:e):this.cueStartTime=e,this.lastOutputScreen.copy(this.displayedMemory))}},{key:"cueSplitAtTime",value:function(e){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,e,this.displayedMemory),this.cueStartTime=e))}}]),e}(),T=function(){function e(t,r,a){i(this,e),this.field=t||1,this.outputs=[r,a],this.channels=[new b(1,r),new b(2,a)],this.currChNr=-1,this.lastCmdA=null,this.lastCmdB=null,this.bufferedData=[],this.startTime=null,this.lastTime=null,this.dataCounters={padding:0,char:0,cmd:0,other:0}}return a(e,[{key:"getHandler",value:function(e){return this.channels[e].getHandler()}},{key:"setHandler",value:function(e,t){this.channels[e].setHandler(t)}},{key:"addData",value:function(e,t){var r,i,a,n=!1;this.lastTime=e,g.setTime(e);for(var s=0;s ("+v([i,a])+")"),r=this.parseCmd(i,a),r||(r=this.parseMidrow(i,a)),r||(r=this.parsePAC(i,a)),r||(r=this.parseBackgroundAttributes(i,a)),!r&&(n=this.parseChars(i,a)))if(this.currChNr&&this.currChNr>=0){var o=this.channels[this.currChNr-1];o.insertChars(n)}else g.log("WARNING","No channel found yet. TEXT-MODE?");r?this.dataCounters.cmd+=2:n?this.dataCounters.char+=2:(this.dataCounters.other+=2,g.log("WARNING","Couldn't parse cleaned data "+v([i,a])+" orig: "+v([t[s],t[s+1]])))}else this.dataCounters.padding+=2}},{key:"parseCmd",value:function(e,t){var r=null,i=(20===e||28===e)&&32<=t&&t<=47,a=(23===e||31===e)&&33<=t&&t<=35;if(!i&&!a)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,g.log("DEBUG","Repeated command ("+v([e,t])+") is dropped"),!0;r=20===e||23===e?1:2;var n=this.channels[r-1];return 20===e||28===e?32===t?n.ccRCL():33===t?n.ccBS():34===t?n.ccAOF():35===t?n.ccAON():36===t?n.ccDER():37===t?n.ccRU(2):38===t?n.ccRU(3):39===t?n.ccRU(4):40===t?n.ccFON():41===t?n.ccRDC():42===t?n.ccTR():43===t?n.ccRTD():44===t?n.ccEDM():45===t?n.ccCR():46===t?n.ccENM():47===t&&n.ccEOC():n.ccTO(t-32),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"parseMidrow",value:function(e,t){var r=null;if((17===e||25===e)&&32<=t&&t<=47){if((r=17===e?1:2)!==this.currChNr)return g.log("ERROR","Mismatch channel in midrow parsing"),!1;return this.channels[r-1].ccMIDROW(t),g.log("DEBUG","MIDROW ("+v([e,t])+")"),!0}return!1}},{key:"parsePAC",value:function(e,t){var r=null,i=null,a=(17<=e&&e<=23||25<=e&&e<=31)&&64<=t&&t<=127,n=(16===e||24===e)&&64<=t&&t<=95;if(!a&&!n)return!1;if(e===this.lastCmdA&&t===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;r=e<=23?1:2,i=64<=t&&t<=95?1===r?u[e]:f[e]:1===r?d[e]:c[e];var s=this.interpretPAC(i,t);return this.channels[r-1].setPAC(s),this.lastCmdA=e,this.lastCmdB=t,this.currChNr=r,!0}},{key:"interpretPAC",value:function(e,t){var r=t,i={color:null,italics:!1,indent:null,underline:!1,row:e};return r=t>95?t-96:t-64,i.underline=1==(1&r),r<=13?i.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(r/2)]:r<=15?(i.italics=!0,i.color="white"):i.indent=4*Math.floor((r-16)/2),i}},{key:"parseChars",value:function(e,t){var r=null,i=null,a=null;if(e>=25?(r=2,a=e-8):(r=1,a=e),17<=a&&a<=19){var n=t;n=17===a?t+80:18===a?t+112:t+144,g.log("INFO","Special char '"+s(n)+"' in channel "+r),i=[n]}else 32<=e&&e<=127&&(i=0===t?[e]:[e,t]);if(i){var o=v(i);g.log("DEBUG","Char codes = "+o.join(",")),this.lastCmdA=null,this.lastCmdB=null}return i}},{key:"parseBackgroundAttributes",value:function(e,t){var r,i,a,n,s=(16===e||24===e)&&32<=t&&t<=47,o=(23===e||31===e)&&45<=t&&t<=47;return!(!s&&!o)&&(r={},16===e||24===e?(i=Math.floor((t-32)/2),r.background=h[i],t%2==1&&(r.background=r.background+"_semi")):45===t?r.background="transparent":(r.foreground="black",47===t&&(r.underline=!0)),a=e<24?1:2,n=this.channels[a-1],n.setBkgData(r),this.lastCmdA=null,this.lastCmdB=null,!0)}},{key:"reset",value:function(){for(var e=0;e=16?l--:l++,navigator.userAgent.match(/Firefox\//)?s.line=f+1:s.line=f>7?f-2:f+1,s.align="left",s.position=Math.max(0,Math.min(100,l/32*100+(navigator.userAgent.match(/Firefox\//)?50:0))),e.addCue(s)}}};t.exports=a},{53:53}],48:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=this.minWeight_}},{key:"getEstimate",value:function(){return this.canEstimate()?Math.min(this.fast_.getEstimate(),this.slow_.getEstimate()):this.defaultEstimate_}},{key:"destroy",value:function(){}}]),e}();r.default=o},{49:49}],49:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r "+t}function n(e){var t=self.console[e];return t?function(){for(var r=arguments.length,i=Array(r),n=0;n1?t-1:0),i=1;i100)throw new Error("Position must be between 0 and 100.");b=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"positionAlign",r({},u,{get:function(){return T},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");T=r,this.hasBeenReset=!0}})),Object.defineProperty(o,"size",r({},u,{get:function(){return _},set:function(e){if(e<0||e>100)throw new Error("Size must be between 0 and 100.");_=e,this.hasBeenReset=!0}})),Object.defineProperty(o,"align",r({},u,{get:function(){return k},set:function(e){var r=t(e);if(!r)throw new SyntaxError("An invalid or illegal string was specified.");k=r,this.hasBeenReset=!0}})),o.displayState=void 0,l)return o}if("undefined"!=typeof window&&window.VTTCue)return window.VTTCue;var a="auto",n={"":!0,lr:!0,rl:!0},s={start:!0,middle:!0,end:!0,left:!0,right:!0};return i.prototype.getCueAsHTML=function(){return window.WebVTT.convertCueToDOMTree(window,this.text)},i}()},{}],53:[function(e,t,r){"use strict";function i(){this.window=window,this.state="INITIAL",this.buffer="",this.decoder=new f,this.regionList=[]}function a(e){function t(e,t,r,i){return 3600*(0|e)+60*(0|t)+(0|r)+(0|i)/1e3}var r=e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);return r?r[3]?t(r[1],r[2],r[3].replace(":",""),r[4]):r[1]>59?t(r[1],r[2],0,r[4]):t(0,r[1],r[2],r[4]):null}function n(){this.values=Object.create(null)}function s(e,t,r,i){var a=i?e.split(i):[e];for(var n in a)if("string"==typeof a[n]){var s=a[n].split(r);if(2===s.length){var o=s[0],l=s[1];t(o,l)}}}function o(e,t,r){function i(){var t=a(e);if(null===t)throw new Error("Malformed timestamp: "+l);return e=e.replace(/^[^\sa-zA-Z-]+/,""),t}function o(){e=e.replace(/^\s+/,"")}var l=e;if(o(),t.startTime=i(),o(),"-->"!==e.substr(0,3))throw new Error("Malformed time stamp (time stamps must be separated by '-->'): "+l);e=e.substr(3),o(),t.endTime=i(),o(),function(e,t){var i=new n;s(e,function(e,t){switch(e){case"region":for(var a=r.length-1;a>=0;a--)if(r[a].id===t){i.set(e,r[a].region);break}break;case"vertical":i.alt(e,t,["rl","lr"]);break;case"line":var n=t.split(","),s=n[0];i.integer(e,s),i.percent(e,s)&&i.set("snapToLines",!1),i.alt(e,s,["auto"]),2===n.length&&i.alt("lineAlign",n[1],["start",h,"end"]);break;case"position":n=t.split(","),i.percent(e,n[0]),2===n.length&&i.alt("positionAlign",n[1],["start",h,"end","line-left","line-right","auto"]);break;case"size":i.percent(e,t);break;case"align":i.alt(e,t,["start",h,"end","left","right"])}},/:/,/\s/),t.region=i.get("region",null),t.vertical=i.get("vertical","");var a=i.get("line","auto");"auto"===a&&c.line===-1&&(a=-1),t.line=a,t.lineAlign=i.get("lineAlign","start"),t.snapToLines=i.get("snapToLines",!0),t.size=i.get("size",100),t.align=i.get("align",h);var o=i.get("position","auto");"auto"===o&&50===c.position&&(o="start"===t.align||"left"===t.align?0:"end"===t.align||"right"===t.align?100:50),t.position=o}(e,t)}function l(e){return e.replace(//gi,"\n")}Object.defineProperty(r,"__esModule",{value:!0}),r.fixLineBreaks=void 0;var u=e(52),d=function(e){return e&&e.__esModule?e:{default:e}}(u),f=function(){return{decode:function(e){if(!e)return"";if("string"!=typeof e)throw new Error("Error - expected string data.");return decodeURIComponent(encodeURIComponent(e))}}};n.prototype={set:function(e,t){this.get(e)||""===t||(this.values[e]=t)},get:function(e,t,r){return r?this.has(e)?this.values[e]:t[r]:this.has(e)?this.values[e]:t},has:function(e){return e in this.values},alt:function(e,t,r){for(var i=0;i=0&&t<=100)&&(this.set(e,t),!0)}};var c=new d.default(0,0,0),h="middle"===c.align?"middle":"center";i.prototype={parse:function(e){function t(){var e=r.buffer,t=0;for(e=l(e);t")===-1){r.cue.id=i;continue}case"CUE":try{o(i,r.cue,r.regionList)}catch(e){r.cue=null,r.state="BADCUE";continue}r.state="CUETEXT";continue;case"CUETEXT":var u=i.indexOf("-->")!==-1;if(!i||u&&(n=!0)){r.oncue&&r.oncue(r.cue),r.cue=null,r.state="ID";continue}r.cue.text&&(r.cue.text+="\n"),r.cue.text+=i;continue;case"BADCUE":i||(r.state="ID");continue}}}catch(e){"CUETEXT"===r.state&&r.cue&&r.oncue&&r.oncue(r.cue),r.cue=null,r.state="INITIAL"===r.state?"BADWEBVTT":"BADCUE"}return this},flush:function(){var e=this;try{if(e.buffer+=e.decoder.decode(),(e.cue||"HEADER"===e.state)&&(e.buffer+="\n\n",e.parse()),"INITIAL"===e.state)throw new Error("Malformed WebVTT signature.")}catch(e){throw e}return e.onflush&&e.onflush(),this}},r.fixLineBreaks=l,r.default=i},{52:52}],54:[function(e,t,r){"use strict";var i=e(53),a=function(e){return e&&e.__esModule?e:{default:e}}(i),n=function(e){var t=parseInt(e.substr(-3)),r=parseInt(e.substr(-6,2)),i=parseInt(e.substr(-9,2)),a=e.length>9?parseInt(e.substr(0,e.indexOf(":"))):0;return isNaN(t)||isNaN(r)||isNaN(i)||isNaN(a)?-1:(t+=1e3*r,t+=6e4*i,t+=36e5*a)},s=function(e,t,r){var i=e[t],a=e[i.prevCC];if(!a||!a.new&&i.new)return e.ccOffset=e.presentationOffset=i.start,void(i.new=!1);for(;a&&a.new;)e.ccOffset+=i.start-a.start,i.new=!1,i=a,a=e[i.prevCC];e.presentationOffset=r},o={parse:function(e,t,r,i,o,l){var u=String.fromCharCode.apply(null,new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g,"\n").split("\n"),d="00:00.000",f=0,c=0,h=0,g=[],v=void 0,p=!0,y=new a.default;y.oncue=function(e){var t=r[i],a=r.ccOffset;t&&t.new&&(c?a=r.ccOffset=t.start:s(r,i,h)),h&&!c&&(a=h+r.ccOffset-r.presentationOffset),e.startTime+=a-c,e.endTime+=a-c,e.text=decodeURIComponent(escape(e.text)),e.endTime>0&&g.push(e)},y.onparsingerror=function(e){v=e},y.onflush=function(){if(v&&l)return void l(v);o(g)},u.forEach(function(e){if(p){if(e.startsWith("X-TIMESTAMP-MAP=")){p=!1,e.substr(16).split(",").forEach(function(e){e.startsWith("LOCAL:")?d=e.substr(6):e.startsWith("MPEGTS:")&&(f=parseInt(e.substr(7)))});try{t=t<0?t+8589934592:t,f-=t,c=n(d)/1e3,h=f/9e4,c===-1&&(v=new Error("Malformed X-TIMESTAMP-MAP: "+e))}catch(t){v=new Error("Malformed X-TIMESTAMP-MAP: "+e)}return}""===e&&(p=!1)}y.parse(e+"\n")}),y.flush()}};t.exports=o},{53:53}],55:[function(e,t,r){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(r,"__esModule",{value:!0});var a=function(){function e(e,t){for(var r=0;r=2)if(window.clearTimeout(this.requestTimeout),0===i.tfirst&&(i.tfirst=Math.max(performance.now(),i.trequest)),4===r){var o=t.status;if(o>=200&&o<300){i.tload=Math.max(i.tfirst,performance.now());var l=void 0,u=void 0;"arraybuffer"===a.responseType?(l=t.response,u=l.byteLength):(l=t.responseText,u=l.length),i.loaded=i.total=u;var d={url:t.responseURL,data:l};this.callbacks.onSuccess(d,i,a)}else i.retry>=s.maxRetry||o>=400&&o<499?(n.logger.error(o+" while loading "+a.url),this.callbacks.onError({code:o,text:t.statusText},a)):(n.logger.warn(o+" while loading "+a.url+", retrying in "+this.retryDelay+"..."),this.destroy(),this.retryTimeout=window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,s.maxRetryDelay),i.retry++)}else this.requestTimeout=window.setTimeout(this.loadtimeout.bind(this),s.timeout)}},{key:"loadtimeout",value:function(){n.logger.warn("timeout while loading "+this.context.url),this.callbacks.onTimeout(this.stats,this.context)}},{key:"loadprogress",value:function(e){var t=this.stats;t.loaded=e.loaded,e.lengthComputable&&(t.total=e.total);var r=this.callbacks.onProgress;r&&r(t,this.context,null)}}]),e}();r.default=s},{50:50}]},{},[37])(37)}); diff --git a/demo/mask_detection/web/js/ckplayer/language.xml b/demo/mask_detection/web/js/ckplayer/language.xml new file mode 100644 index 0000000000000000000000000000000000000000..6b873037e9921dfff6696036f6a7ae19d3cb3bbe --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/language.xml @@ -0,0 +1,44 @@ + + + [$second] + [$second] + + 点击播放 + 暂停播放 + 静音 + 恢复音量 + 全屏 + 退出全屏 + 上一集 + 下一集 + 点击选择清晰度 + + + 音量:[$volume]% + + [$percentage]% + + [$timeh]:[$timei]:[$times] + + + [$timeh]:[$timei]:[$times] + + + 直播中 [$liveTimeY]-[$liveTimem]-[$liveTimed] [$liveTimeh]:[$liveTimei]:[$liveTimes] + + + 流畅 + 低清 + 标清 + 高清 + 超清 + 蓝光 + 未知 + + + 视频地址不存在 + 加载失败 + 视频格式错误 + + 自动 + \ No newline at end of file diff --git a/demo/mask_detection/web/js/ckplayer/style.xml b/demo/mask_detection/web/js/ckplayer/style.xml new file mode 100644 index 0000000000000000000000000000000000000000..ddedc15f61d00fa4ca147c7fa9f5a6229a57d448 --- /dev/null +++ b/demo/mask_detection/web/js/ckplayer/style.xml @@ -0,0 +1,640 @@ + + + + + 0x000000 + + 0.5 + 3 + center + middle + 0 + 0 + 0 + 0 + + + + left + bottom + 100% + 38 + 0 + -38 + + + all + 1000 + alpha + 0.8 + all + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE5QTRFQjlCN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE5QTRFQjlDN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTlBNEVCOTk3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTlBNEVCOUE3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ey3YCAAAAEUlEQVR42mL0z61iAAOAAAMACZkBOI+IklEAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyMUM5N0M3N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyMUM5N0M4N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjIxQzk3QzU3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjIxQzk3QzY3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rS13VAAAAEUlEQVR42mK8ePEiAxgABBgAE6wCdf2yccQAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERDI3MTY5QTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERDI3MTZBQTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkREMjcxNjdBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkREMjcxNjhBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MLZi3AAAADklEQVR42mJgb/oKEGAAAhIBf+DIxYEAAAAASUVORK5CYII= + 100% + left + bottom + 0 + -2 + + + + + 0x000000 + + 0.6 + + + + + + + 0x333333 + 0x0787FF + 0.8 + 0 + 0x333333 + 6 + 70 + 27 + center + 5 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0xFFFFFF + false + 1 + + + 0x333333 + 0.8 + 0 + 0x333333 + 10 + 15 + 10 + 15 + 10 + 15 + 10 + 0x333333 + 0 + 0xFFFFFF + 0.8 + 0 + 0 + + + + 0x005CB2 + 0x0787FF + 0.8 + 0 + 0x333333 + 6 + 70 + 27 + center + 5 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0xFFFFFF + false + 1 + + + 5 + 5 + 5 + 5 + 0xFFFFFF + 0 + 1 + + + right + top + -119 + 6 + + + right + bottom + -130 + -35 + true + + click + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAFCAYAAAAZiY8XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY5RUEzNjQ1MDMxRDExRTY5OERCOEQ3NUNBQzJDMDlCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY5RUEzNjQ2MDMxRDExRTY5OERCOEQ3NUNBQzJDMDlCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjlFQTM2NDMwMzFEMTFFNjk4REI4RDc1Q0FDMkMwOUIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjlFQTM2NDQwMzFEMTFFNjk4REI4RDc1Q0FDMkMwOUIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ONxAiAAAAT0lEQVR42mL8//+/HAMDwxwgtgdiNobhCX4B8UEgTmEEeng3kOHCMDLAAZCHPwMZPCPEw7+YgMQJhpEDjoE8nAzEe6DpfLiC31A/JgAEGAAcdRWT+8TTHQAAAABJRU5ErkJggg== + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAFCAYAAAAZiY8XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMDE0IDc5LjE1Njc5NywgMjAxNC8wOC8yMC0wOTo1MzowMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcyRTE1NTk1MDMxRDExRTY4QTQ1Qzg3RjhDMENCNDU5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjcyRTE1NTk2MDMxRDExRTY4QTQ1Qzg3RjhDMENCNDU5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NzJFMTU1OTMwMzFEMTFFNjhBNDVDODdGOEMwQ0I0NTkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzJFMTU1OTQwMzFEMTFFNjhBNDVDODdGOEMwQ0I0NTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5HSf2sAAAATElEQVR42mJkb/8vx8DAMAeI7YGYjWF4gl9AfBCIUxiBHt4NZLgwjAxwgAlIWDCMHGAF8vCJEeThYyAPJwPxHmg6H67gN9SPCQABBgDwKw4wg3IbiQAAAABJRU5ErkJggg== + right + top + -200 + 14 + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc4ODQ4MDY0QTAzMjExRTc4MEExRkVEMDk5Qzg3QzNBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjc4ODQ4MDY1QTAzMjExRTc4MEExRkVEMDk5Qzg3QzNBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Nzg4NDgwNjJBMDMyMTFFNzgwQTFGRUQwOTlDODdDM0EiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Nzg4NDgwNjNBMDMyMTFFNzgwQTFGRUQwOTlDODdDM0EiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5pDHWjAAAAFUlEQVR42mKwt7c/w8QABNgIgAADACoYAZS6ywKEAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDQTMyRjExQTAzMjExRTdCMTcxQzJFNzY0M0U0MzRGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDQTMyRjEyQTAzMjExRTdCMTcxQzJFNzY0M0U0MzRGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OENBMzJGMEZBMDMyMTFFN0IxNzFDMkU3NjQzRTQzNEYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OENBMzJGMTBBMDMyMTFFN0IxNzFDMkU3NjQzRTQzNEYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6fRHO8AAAAFUlEQVR42mLKz88/w8QABNgIgAADADoUAiYYttFgAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAIAAACNcmNmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkEwNUQyNkVGQTAzMjExRTdCQUQwRDkyQUU5RjZBRkQwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkEwNUQyNkYwQTAzMjExRTdCQUQwRDkyQUU5RjZBRkQwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTA1RDI2RURBMDMyMTFFN0JBRDBEOTJBRTlGNkFGRDAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTA1RDI2RUVBMDMyMTFFN0JBRDBEOTJBRTlGNkFGRDAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5DgcOwAAAAFElEQVR42mJgb/rKxMDAgI4BAgwAIHYBiWQRRygAAAAASUVORK5CYII= + 100% + left + top + 0 + -9 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE5QTRFQjlCN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE5QTRFQjlDN0NDMzExRTdCOEU1OEZDRkMwNUMxRjkyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTlBNEVCOTk3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTlBNEVCOUE3Q0MzMTFFN0I4RTU4RkNGQzA1QzFGOTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6ey3YCAAAAEUlEQVR42mL0z61iAAOAAAMACZkBOI+IklEAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAABCAIAAACUgoPjAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjIyMUM5N0M3N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjIyMUM5N0M4N0NDMzExRTdCODNCQzc4NEQ0NDdCQUZGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MjIxQzk3QzU3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MjIxQzk3QzY3Q0MzMTFFN0I4M0JDNzg0RDQ0N0JBRkYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4rS13VAAAAEUlEQVR42mK8ePEiAxgABBgAE6wCdf2yccQAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJERDI3MTY5QTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJERDI3MTZBQTJDNjExRTdCNTdGQjE2MTZDNkNCMzA1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkREMjcxNjdBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkREMjcxNjhBMkM2MTFFN0I1N0ZCMTYxNkM2Q0IzMDUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MLZi3AAAADklEQVR42mJgb/oKEGAAAhIBf+DIxYEAAAAASUVORK5CYII= + 100% + left + top + 0 + -1 + + + + 0.3 + 0.3 + 0.3 + 0.3 + + + + + + [$timeh]:[$timei]:[$times] / [$durationh]:[$durationi]:[$durations] + left + top + 45 + 7 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 0.5 + false + + + [$liveLanguage] + left + top + 45 + 7 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAmCAYAAAAFvPEHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA4QUY5QzVEQTAzMTExRTdCQjA1QzM3RDE5N0NCNEEyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA4QUY5QzVFQTAzMTExRTdCQjA1QzM3RDE5N0NCNEEyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDhBRjlDNUJBMDMxMTFFN0JCMDVDMzdEMTk3Q0I0QTIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDhBRjlDNUNBMDMxMTFFN0JCMDVDMzdEMTk3Q0I0QTIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5OVecRAAAAFUlEQVR42mJISEg4w8QABEORAAgwAIP7AjcGIX7gAAAAAElFTkSuQmCC + right + top + -130 + 0 + + + + + + + + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkFDRDQ4ODE2QTk2QjExRTdBQkMyQ0IzM0IyRjZFNUUwIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkFDRDQ4ODE3QTk2QjExRTdBQkMyQ0IzM0IyRjZFNUUwIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QUNENDg4MTRBOTZCMTFFN0FCQzJDQjMzQjJGNkU1RTAiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QUNENDg4MTVBOTZCMTFFN0FCQzJDQjMzQjJGNkU1RTAiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6JjFkJAAAGwElEQVR42uyd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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjJBREI4MTY4QTk2QzExRTdBQTFEQ0Q2Nzk2NkRCRjk1IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjJBREI4MTY5QTk2QzExRTdBQTFEQ0Q2Nzk2NkRCRjk1Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MkFEQjgxNjZBOTZDMTFFN0FBMURDRDY3OTY2REJGOTUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MkFEQjgxNjdBOTZDMTFFN0FBMURDRDY3OTY2REJGOTUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6vwz5dAAALgUlEQVR42uxd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 + center + middle + -40 + -40 + actionScript->videoPlay + + + + data:image/swf;base64,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 + center + middle + -30 + -30 + + center + middle + -30 + -12 + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 60 + center + + + + + + + + + + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 120 + center + center + middle + -60 + 30 + + + + + + 0x000000 + 1 + + + + 30 + 0 + 30 + 0 + center + middle + + + + 0xFF0000 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjBCN0E2RjdCODNDODExRTdBODQ3QUZBODc1OTA0QjcxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjBCN0E2RjdDODNDODExRTdBODQ3QUZBODc1OTA0QjcxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MEI3QTZGNzk4M0M4MTFFN0E4NDdBRkE4NzU5MDRCNzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MEI3QTZGN0E4M0M4MTFFN0E4NDdBRkE4NzU5MDRCNzEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7cIKAYAAADQElEQVR42mKUEhf/xDAKaA6YRoNgNKBHA3oUjAb0aECPBvQoGA3o0YAeBaMBPRrQowE9CoZMQLOz6bJO3X2cuzuLm5OQ2rpVx7lXdUdy4eIPJOB2L+TYffIk98EdU7h1WNlYYeLRveu5KHUjCzUc+PPX5d/lm06y7IpfwOQ7N5Z9888fP7GpAznYQx4Yt/IFjMdOFnDDJdD5QHB0odO/0mlfv9M6cDnZ/dkXHKpikQXzHjG029n/weV+SgAjOaN3PLkTOHfFWBKZG74wLK/1+TtfvZ1xV4w0U7tdLIpHQCla5+Gk/2Gly78NZGoGBfiuh2VsXfLOv0DuA+XSvq2z2L6td/l3QXkJo/+/VQwbmcIYsm3+MKL7gaYpWl7wOZO7dtiPK79//SZKw64CBqvJQ6dMZXF0YVbje8Iwae7ff3xtDMwgsaXFgd+UgQmjZEEpy+bI5p90LzqIKfs2NEUwc+OMNcyig17FB7Lb5IGw8tBBlkqGRyxLlzz9x3bvEgMo5UYzMMDL586YtF/8q1tYc904OSbv+v5jUAX01539P1x39g/KlAtzG6j+6JL/w3DW1YupDijetOMm08ujhX+x1UfF/v6/Sc4h5Drwzr0n/8gt258+efIfn7r/99Yw0LPMBpXHVnoSjAwMigxBt04zSLfvYvjNfPXf4d0b/mGr0EHlNanuIyug/RXkGRnen2MgunxGK9vTbCJxlu3gyhEY1vRM1azpySzOX18y3WP4x9At3/Ur+lAMyxI7b5QK786jt/9AxUwCsDKcZLf+D83b0bDYf/nkzn+GYQBArY25MbpM1/Y/geQmhp0M4eahX5EDGVQJtt7SZtjQ5MO8qTbuLznNP5IDGlIbf2PAlq2GZI/NQYnx0dYp/6Jn7P6FS41nUS/HgjQlpknAVE5KBUh20QFKzV0lYcxs97YxkGshA58FQ/2K5aBeFyt2Bc/+0zOrgCrD0p2QlI0tgJOsFZhuH5j5LzR4F0V1BgvpqfkJQ49P9x9yLbxzYc2/xoii34OpjIZH8cNn/+7+Vfo7cW0zlxSQT40ApqhnOAoGaFBpFIwG9GhAjwb0KBgN6NGAHgWjAT0a0KMBPQpGA3oIA4AAAwAUEGI5e2B1agAAAABJRU5ErkJggg== + 1 + 0 + 35 + 90 + right + top + -100 + 5 + + + + 16 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFF0000 + 1 + false + 25 + center + right + top + -59 + 10 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjhDQTJFQTNGODNEMzExRTdBREE3RTJBMzExNUY5NTk0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjhDQTJFQTQwODNEMzExRTdBREE3RTJBMzExNUY5NTk0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OENBMkVBM0Q4M0QzMTFFN0FEQTdFMkEzMTE1Rjk1OTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OENBMkVBM0U4M0QzMTFFN0FEQTdFMkEzMTE1Rjk1OTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz49j/97AAAF2ElEQVR42uxX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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkE4MUYxRTdGODNEMzExRTc4ODY3RkE2Njc3MTQwREZEIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkE4MUYxRTgwODNEMzExRTc4ODY3RkE2Njc3MTQwREZEIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QTgxRjFFN0Q4M0QzMTFFNzg4NjdGQTY2NzcxNDBERkQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QTgxRjFFN0U4M0QzMTFFNzg4NjdGQTY2NzcxNDBERkQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5LQREtAAAFRElEQVR42uxXaWhcVRid+/Y3WyZptjYhS2NNQQW1roi41BWKtNQNkWBKK9jiQitK+ssFFKVYg0ttFYJiiz8UQlsoRUWtiIiiggtt05LGtM3SNLPmzduv55uslGkmL+2P/MiDgcm7894993znnO8LW1ZTkwktoEsILbBrEdAioEu9pKAP6AJnd8Zt8e64LV0XccVa2WeKwEOOHwoNOiL/Oy9536YV97uM4mU9xoO+n83V9io23ViVV9qr88pSgKB7Q47AT9uin/cZVxln9arHsFZg/RzWPh/R7N3DYScIsDkBuhZMvN2QVa/SXXEAG316TreJhROm6NucTdONr82qJ9wB9jZU5eVGfD+J33T0x8yfsrJ3WQBRefYsz+gRlGrnQNjagxNn5nBiEeCerjaUjmVjKv295VQ8fyCpupckamLmY4Dh2L7tZFl+x0DELgWmQvLZoZXJ8NVgc9dQ2H6kJ2GcdwX+flNGB3PivAGViZx90JTRNDCzqTeepxKV0hiVaxSbExNdLWk9IXH2S0722nEYlzPe2ZjVayb0FxjQllpDacIG76JMR+CYUierwAG+vDIVvr/Mkj4EM0fhtlfqcoVy/WlI3utnIlYVwGyvGy9hIEDVePApiLLPEv33BsN2MevTOrFCTNKHxP4GNn2nMatR2V76L2rdC3AtmlfYA0Zw/gKwdeWmPHlvzoAeTFgSibgLL5npIrood/Zekda3LjVUG+zfHHXE/a3JMIH6alRz/jBk7wWwS3Hw65jsPb7ElOk5Et4nw7pDYl9bbkqBAMFZEnIuRLq5p8yWHq4wZfq0gZXu1lSYQJC46eXf4DdnsHnHRCmoXPQ8HYO0dFtsWsg/ZBXXwiFujzlSoKRuBaWDtuBTGfauSKsNSnGKaVMCvmMgbO9uzmi6EGG/5SSPYYH09zsYelEylBjYo3CksOyFDCifAjFEGhhCG6AEtv3SYXYsL/kOSgsQjEqchNPqFY8NAwCBjovTSTHiCn5M5MFdFqQJ+TMYm2KPTd8P8t6igJKewMlpyCDkS2lArbonyMhLuJLLjDLMZ/34TgbwgQB6m/rtEskXjFmiqKiGevKifxfEjBATtvdHrQpx/A0UapRP5KiZp91WO6Z8j6waQ4lvheDpHmllPYyQgnYmmytJYTn08y8yKhCgI1nFWw1AGDFEsv7MNYwV7q7mTCGFXWxD7qNcea4vZtD65hpDwfOFVF9Tbkk/Z6dDFe4SifUfZ2m0RQtyMKk6Jkhpx7ghXcAuTuevP54w9o1oDgUjtYZ1+JuE/BAArAJDSHcbohYoHr44r00daCNGF9JV96jmBAI0SHbHLEMn34SOfeE6nMLfOhuxKBj7kUE0F92IzXcipbf1xUxqpm825NSv06rbg/GDnnkMAXl9xBGRTc7xiXuBXNaJlnEWWfQyxocbIo5YyokGdLK5N2YeSqkumJVpdnrtdMSitZW6K7xan1PT+A3aiz2v5kqnfL4vbnKYuaslo98SdWYdHf5BKQ+DkQfQdugQG9Dh6R3XhF3hM3R+CsetYI9ayqxzVCwa7bjYIsrBj5njbnkUlBtcCNHM7PGL21bFEukGv/OfrDTlj2CACokLVMrupFZyQJsVEF0nTAlNUvFuAkNryy15TcIqNMsU0h8fXqyfrMJg19mU1Z6oNBVqF8+eipv75zAtBhryEf/sGVi6rTIvk+XpHs3LJOocgi+CdlAHZ62AEWgR9zgxReMLmeCy/9cxeZUj3Fajm9+XsCUIV6Cwo3SmTKJp8SgYpSnhcEpxgwCZN6DFf6UXAS10QP8LMAAhFMkddrJ6ggAAAABJRU5ErkJggg== + right + top + -138 + 5 + actionScript->adMute + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkRBNUNDQUE4ODNEMzExRTdBNTJEOTExOTE3MkRDMjQ5IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkRBNUNDQUE5ODNEMzExRTdBNTJEOTExOTE3MkRDMjQ5Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6REE1Q0NBQTY4M0QzMTFFN0E1MkQ5MTE5MTcyREMyNDkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6REE1Q0NBQTc4M0QzMTFFN0E1MkQ5MTE5MTcyREMyNDkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4hmF1qAAAGW0lEQVR42uxX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 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAjCAYAAAD8BaggAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkNDOUJGRDQzODNEMzExRTc5RTRDQjhDNjREMkMwNDdCIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkNDOUJGRDQ0ODNEMzExRTc5RTRDQjhDNjREMkMwNDdCIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Q0M5QkZENDE4M0QzMTFFNzlFNENCOEM2NEQyQzA0N0IiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Q0M5QkZENDI4M0QzMTFFNzlFNENCOEM2NEQyQzA0N0IiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz5MlMisAAAF2UlEQVR42uxX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 + right + top + -138 + 5 + actionScript->escAdMute + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjRBMEFFNEU2ODNDODExRTc5ODQyQzk4N0I2NDlEOTFBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjRBMEFFNEU3ODNDODExRTc5ODQyQzk4N0I2NDlEOTFBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NEEwQUU0RTQ4M0M4MTFFNzk4NDJDOTg3QjY0OUQ5MUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NEEwQUU0RTU4M0M4MTFFNzk4NDJDOTg3QjY0OUQ5MUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7O8tDHAAAEmElEQVR42uyafUxbVRjGT8/t991IjJkbE+mAacgUE5cpW3VlioVFZbhZqugQEhNMYJg5LFs1NNoZpysW4gZRsk2ZkmaFZKDbMlpZVzZAgvtjc8YvxuyyDCMRkialH7f3XO/pqBRoK5giLDlP0qTnns/8znue+56mgtUrV7oB0YILEgQENAFNREAT0AQ0EQFNQBMR0AQ0AU10x4CWiLNEjfZ+um9gYPLTTVflyaS4zmDtp62mYvmyqgaZ8+xh+iGRWBTuR+e/KT3ZWS+PfBZrbFMFLfu3dUSbI5rwvPaBNrpAIpVEKy/piE5WIHhJnQefVQ9CVvEgLN5/nsKAcd3D96+iRJmPCtemp8AwfAzO01Xvax9aAxqP7xXHHzttTutkPjsa/CtdAw0fvBATtExSKDlmfImiQSrQ9ziFODDsfHmdYjMMl8OfuWzaXCVcmP1zgz9GgvDxkl0geTgNgD+natQNDmkuewblNHm8uNyuNzDr294XVeXlSzN171KPJM1mqkgCYFXpOdhXCmhm+BTIKd7vwZFuPt0sntV+3IWAaregb2A3PW0T+H55pR2BulP7hIKeBk6ps0xERvilFg08oMoNfuP3+ReCSAJBZ4Adv/4CdvDfXK4fkaPpIDtCY3CuqZOTtBE8n9GOKgs+CoR7+QM/MNWFhUyoYOuKah2Wq3bptZankG5ycyIjvbchIzjzeTxVqjcxi+HRCQN9/aezbGfTZaQ/lCMqf0IbuMoEGAwO28TLYWNwfwcqC/bcrpu0kK0KvAc3wAFVSfBbkA8arVsos2YvE26TSE3NN1tjLoCwdehnMGHGB6eteVFB347KMgYfQX28hnxEYz/mj35o0UbtJo+J90ybqya0FV5/p797qEyOPVarsyQcNJ7PuEhZR0JAY8AdRiX1laGPxTCbL14Q97Z8KJRvr4HYQ0e/P8a30oQi+vSt9ZzTUktjn402FvZsJe+9poqvZfOxhPlkSNjb73Hf4uK1uzcFCfApS5RnJ8w67lOshhsycyCG2aa+CTfad4HfTPVcf0k5eCyi3Zl9LzLSVicP0hwVJD4dNXVW6vOiCv6Mm2KnS4J0uCLJDRxDiJt/hpQGrzU8HdPbJ1+OoiUX0bP1DihT+YNePhpO6F6nR8/xjx6YfoTj9cZpn7ZrehZzYwZQqvxJSLkuo9+dHAfuACX0ZuhP5dix8WRUZLch42sUfKbaLA1cOY8MTV4f8/NgMNqFAW5JF6yIMtYrH5+U41zWceGI+O5hG3I4WDayfs/mbMgMXwELlY4tOY/GnnfwLS015oIoFVmBMtviCd/SbNosylL7HIvf2Msm51LLZNIvtmnAurtGwVpzt1i/wYcsnw4G9T1fCoGq5B9wrdXbJ1rj3AC3KiaApbaO/a/rXpN7XNCWC+Sx6pcvNdDYU2fmpqGr9c4siCEfsnl9+Bnb7EAXd76Nox0U8eXezhPccsUbgt6Wbeg93ivr+vkXapT0atbtj794dFPZ4GbPJ1x47PlqxHUdTXS/ysXz6I4UpSCRoAXkfx3k1zsCmoiAJqAJaCICmoAmIqAJaAKa6P/Q3wIMAHa1AtuR4kGHAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY0MzIwNzgwODNDODExRTdBQ0ZBRDJGOUVBRjgzMzYzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY0MzIwNzgxODNDODExRTdBQ0ZBRDJGOUVBRjgzMzYzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjQzMjA3N0U4M0M4MTFFN0FDRkFEMkY5RUFGODMzNjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjQzMjA3N0Y4M0M4MTFFN0FDRkFEMkY5RUFGODMzNjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7VRqLVAAAEpUlEQVR42uyaa0ybVRjHn/f0QmmlpC7EZFBKwC1syTLEuaDMZdyULM4ljLEMuQV0UwcLSLIvShmt24IJjmRgglzkGjLHtkQYKjdpgNmQfVi8FIcWVLqQ2RhCHdj1cl7fA62U0iIsRVhy/kmTnst7zunvPOf/PofAQGScCag2XIgioKApaCoKmoKmoKkoaAqaioKmoCloqicGtIwNEXRcb5Hoe9ocnxpJSeyMiLRV17ZIvimJEStyivzHrhZJ9rPzAudzIQfSRMMtBWLXOm9jN2T96f9f6/A0hyeReb/ruSh5A5v8PJW3dESHhJjR3YRD6PWEEQTyHSintJtHAJO258MDeU89u5sfGRaEnPAJOMPw5+YOfRg0fZonXH3s4DWt0/TZNdts2BFUroz3CvoZ/KJfq/IoTwIKUPV18klgaLjyHnkMcpadn7Vs2lrF35j9M4Hx/jw6lJ4HoRPBAH8stRy/0CaKx914V/O2v0m5qfSyNbq1WFAS+4No73vneM8FrGQaLgUIyvgK6TNAYpnsgl2n2+dIpNfeuCRc0X92GsPLBYy+p0DiWk2ee+nUkKX65rt8dugKG6HWzrtGuK42CSkTT9jakPTRsvEYMWwx0BGQMn4PUrhvE1M/41t1VXaDlICbXjo50hh4bUcnzk6rtzh/wAxjsGZlFlkXCiOZHq3jy9Fmka41Gec6Nsc10jXVe23u9V7FAKQey7Ruhkf7DPT4+KC9veYnrK6IEpxMKrSMMmIrAUdsItM5i0kL2WkXFtscFpKsIHvwGygT82198CrUte3jqTPKrc4+vtTSfCtlnAJMrEPlxsQyc2fZmjcV9GJUqqzkCKpX68hFNPFj7ugvLPrMW5lzxDNv38td8OgH6NtH/fpUMfHYOLXW56DJfI/1oA/swyegCeBuZRSvXnXXTmC2994Ualo/5kuPFiLiocbRBq5X6kJEd03vY8dqQEJ81tNYxLMPcN7bkHXLf82WsM4MiXj7038Z2VUzmO1mhpyyFZ692dYRJg9CB8OjEIF5I8GAXug/BWMVV9iRjDch1qXftdJ3rOK66xzIKo8gyekovNzJazl2GkFzh9f5hKwcBUlNMKlH7PozpGCkqz7s1dsdL0eBLzd4g7KO9+FEYoDtARcNg8V5EmMvV7XT/Qhv8/o0SfvihpdnMe5ARbkxCKZ0eGKIxz4J1y6fLvFhuJ/dOKvAKf2D+FKOFaW/XSya+/E2PtskMz/8RWfzdGEQHJQzQR7GKjxfISa57J3ecmHgrxr89bCf3bX9XGw0skx+D7462ls+6yCeV1l0hGecQjjUXg8Rr2jnFm9pH/oPpOzkNZZ9YB9lZFaFY67jeEbUmJwEewKNEHXxqlC1H+PGep1N1VfFh8T8f8FVni+er/TyQiI3wGTFPDSWfcLBlz2e1cU3MQPx4PUtF7DVQBNPdc9NScR2pkeixrI0u3pEZiZ15gYt1qTnk2hfyLUHu75gxaFnGE3rYXyW88qPtNwL1UN65S5y8RhA0fD7UDXrHHu9MhjuY9NANruaR3dvj2J8CZqh/9dB/3pHQVNR0BQ0BU1FQVPQVBQ0BU1BU/0f+keAAQCcB/OKy1CfxwAAAABJRU5ErkJggg== + right + top + -230 + 5 + javaScript->adjump + + + + 0xFF0000 + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAAAjCAYAAAB2BvMkAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY0MUIzQkU3ODNDODExRTdCNEQwRjdCMUM4NjE2MERFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY0MUIzQkU4ODNDODExRTdCNEQwRjdCMUM4NjE2MERFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RjQxQjNCRTU4M0M4MTFFN0I0RDBGN0IxQzg2MTYwREUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RjQxQjNCRTY4M0M4MTFFN0I0RDBGN0IxQzg2MTYwREUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6nC8/UAAAGy0lEQVR42uxb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 + 1 + 0 + 35 + 150 + right + top + -290 + 5 + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + 1 + false + 25 + right + right + top + -278 + 10 + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QTJBMDMyQzI4M0Q1MTFFN0FDNEZDMjY4QjhBQ0U3QUIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QTJBMDMyQzE4M0Q1MTFFN0FDNEZDMjY4QjhBQ0U3QUIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkFDRkEwOTM4M0QxMTFFN0I5NUREQzc5ODU5RkJCNjkiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkFDRkEwOTQ4M0QxMTFFN0I5NUREQzc5ODU5RkJCNjkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4eBamxAAAEPklEQVR42uxYW0gUURj+193cVEQUAy3zIc1CukEPZlJRUBk9dAGD8EkiulIUCFmIUZQEXSgwKR8s6E4FFT3UgxkmIRF0v98vUGmara661/5zbKad2ZkzM+6Z7cHzwcfqmdk5O998/3f+M44fZc4wCMSCx8gSpId1UoLQKWZMRq42OkkIzQdbkNlCaPuRg9wshI4P1iILhdD2Iw1ZKYSOD8qRs7kJnV7bBhkHHwlZozECuQ3pUB9w/c9flbJyN7iLyxRjIc9P+LWjhNscGYefQainS/OaaduvgzNzLHivHoD+5pO8plyEXI68FDno0NuwpG5ohBETioc0U/DrS+jet4TeJDjYRTPQeh56z9dEjY+cWwFJpesh8OEBeOpXK6rJ4U6KEkca79w6RVdord/jzMqH4Lc3vB/2PeQcZJ+h0HoOTF5WpRjzXtqjKZTRNfpvNSoE1BR6wVpwpKTJDy5SPAgGZLHl/68dAgiHFA9AEjr8u0NxDYJRFwL003N0FU9HS1iPrLcsdOrGE5CQPhoCr+5C4rRS6p6Be1fAlV8EoR/vwXNsjWaWE6GsQO0mqbz9b+8zK4w4k1YTujPywRChndkF9G/fgxt4Xp6ho/WqzCLeIYuQHaYyWio3/9Pb0L17AR0jQhP0nq2WH0LGkRcAAZ+idLuqiqIyMXHaQktV0L13sX4/9fd6BO0rXFHR58qdpMq0AHRumqh8iCi093KtHY4eh9yI3Ml0tCRw8Pt7SJw6H3yPm5hXTZw8758zUPDwQJ9lN8vA74PTJeepOjrMCC3FAoH/dRv4nzTR6ouqhFG5mvNzWiCJm2cg3+o6unNzoXwztJxaTutOTPKUCM1aRKQcVS9WLJDrpq5roEKzoog8YFpREaUfwKhx5U2Xx6TqizMykVuRG0y3d+5Z5ZRD7btpdXR9g7Tqm/o5m57FdJJWFOmVvntmGfju4/HR46M6qWD7J+ZvsGIGE6hAnjAttBlHsyLIKAupaDmF3O5Oqkg6v2rx01vsqCH4IwlZY9uGhYifvLSSxkWw4zO9wViqYtC9eZrHkpdXUZrNWFdBsWZlhbzd4HQn2SFHsW3RIYlMytBMzkvnWOk+hto1kBY1jo4mOGVK6OCXZ4bR4czM0SxdnjkfDgW4bM/j7GiyO7xgKDSrj5VAdnmEseS8lqOdWeMGP8dMGHTi8xYudx5nR5OJWl0sB8XSB2ut3FYdnZCRQ1s3Pwqst10n1cYLjuRUGncc8Z24mbkzVLdSscIofoij1aJ56ipirjatnlurK5KP4waNE8hGcD/yo+WXSgKW3+CRnreH6ejILexwhXpbb7XTkERmCh3jJMMdJJfrFOuN0MQWnCNxL4S2Fw3IqF5VCM0XvcjjSJ8Q2l6cQT7U3BMIbbiBvDTfhfQLoe3FNeQX3V2u0IcL7iBrma8ThEbc2rlOIbS9aEZeNDrpjwADAAupBWlakPJjAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAAAjCAYAAAAUhR0LAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUQ5RTU4QjA4M0Q1MTFFNzkwMzlDMkFBN0E4NjI2NjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUQ5RTU4QUY4M0Q1MTFFNzkwMzlDMkFBN0E4NjI2NjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RDU0NTExOEM4M0QxMTFFNzgxODhCOTA0RkI1RDY2QzIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RDU0NTExOEQ4M0QxMTFFNzgxODhCOTA0RkI1RDY2QzIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7zYQ9GAAAEPUlEQVR42uxYXUgUURQ+s6NZYZZlkD9FGRGaUSSUP2A/RBRhUPQQ9pKEphVEUSQ+pAhlDxG9hGVUFiEi9ZIp0UtGGUoEWWIUaWlJCWplpvgzM507u7M6uzN3Z9w724P3g4M4e+feme9+57vnjDB+fpYCHMHgHUZmWPHoH9ogF+cpaKzFyAs0iBPNBicnLkTEcqKdRwLGCU50aFCAqk7mRDuP+RhnONGhwUFUdRYzosXclyDmv+G0+iMcowjJFnx/CPufT+XaUgZC0n79xeE+kO5kMVtDLGgDGBkwnFM8UAcQtRSU5ssgv73LasldGPswHky9KJg1LGL2TTxL06e3VP8HkGr3ul9SoCeN0l4L8rNS/01YdwiE1AJQeltBrj+iyyYIn+tHjnZdqlxvSrTR8wjRK0H52cF6s19hbMYmZiQg0WYKdGWc1V2Tm8oNiQo0h9xapSPQkOgN+QCzF3g3TkeePOEl2/t/yxXcOVm/AR6iYaRfN4eazsWj7nd4lMdS0RqO4vwVtokW99wCiIwDpacZhMQdblV9fAhC3EZQfn0GuaHQ0MtVouzAR01aesP319QMI8pUM4Soc8rGEKKFhavcv3U+AfCMoynaLMtsohNjE5LdZ8mjtXRTup6BXL3TfY0QTZTQeM67CWJhO4A0pktd6XaGnyeSTbKTBVJNtvmzeeYjwAPI3/oWr9HfgKqXKpL1m0iIbrrohKITMY5jlNI9WvMzVKuwYjsoX55SZxWWb51UBhIO48P21exlF+93hU36qY91WCFaswVVoT0tKJRGNfv8q99lhuszOiCJmtPwWTpMFS1dS5ncdfKwbdWmC6t+ikTTDhHNR30PK6qf47yu3ddBQaJpVkQ2WM2oKamvoNUIsamTYvZkX4gRg3EK45jl8k5IyQERY7p1t6rOoR8g5jw2Hxi5hKokIysyS30Ry0blUwOAx591ldTvbuoz2BGDBeRitlVZJtqSoikWRA4dmeKFqg3EJAGrj+PejCTr+xx+sslhpwqCPeZglDjWsKjkp59W7QIGv6rKCyorPOo1zLbMIhAxrHqsEJ9mnFmjg2o15QDSHbMOjWSShlZ8Xhtjp/qYbtVAStQQKprgniWilb73Aa0DohIMU5epz5ONY9Ceh1jRpDusDUg0rY71nujY5QGJIHzeUNHRie6/i1a77+9+zuTNQ6zoEizvmsKoCgqiDjY6uW3bz7x4tXQjBJu16yTbmCEiyn2msEMvUTO1M/QtpYJWUQD7IYr2JU2qOxx0thnV3IaNmQZs0Fi9MsYlVHOX7Y9KHLa/4G1Dooeoip7aws5U+Lb1tisND8lUooNcZKaD+PJVXWXGOXEENahmiRPtLG5g1Pv1GpwXpviLUYlqHuNEO4tqjFbD7plzwwzko3kZqnmcE+0s6pDkb2Y/cqLZ4AVGOW0AJ5pdOTfAiXYWjRj3Aw36J8AA+lUMlmbVgFMAAAAASUVORK5CYII= + right + bottom + -100 + -40 + actionScript->openAdLink + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkI5QTZDNTc2NEQ3MDExRTJCOEM3ODA5RkNGRkIzNzYyIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkI5QTZDNTc3NEQ3MDExRTJCOEM3ODA5RkNGRkIzNzYyIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QjlBNkM1NzQ0RDcwMTFFMkI4Qzc4MDlGQ0ZGQjM3NjIiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QjlBNkM1NzU0RDcwMTFFMkI4Qzc4MDlGQ0ZGQjM3NjIiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz530M3/AAAEX0lEQVR42lRUXWyTVRh++n1fu/6u/+vWjbIVcT8MUOZkkDKNY4JMQwh6IRdEbzQmXmm8IUYvyIxonEE0LGbBhGBM8EajMwYMGqeyCyOD1jE7Nh2ydevvyvqztl9b3/dYFznJm3NyzvM+7+95NadHRsCrWq2KXSNJUBTFaTAaH3W73U+6XK7tZrPZy2+ZTCYSj8dvxGKxr9fz+R/UUilRLpeh0WiE8FJQW0xYqVR09SbTwfva21/r6uoKEOEGsLaaCLcrHos9d3N6+qdwOPxuOp3+Vpak4j2ENTKDu6Hh1cC+fSfa/H4D39Md2IMN70lJoggIxxLY5PP1TExMvBWLRt+jtzy/KzVFxeV2vzQwOHjS6/WiWCxClmUhJTr/fyl6vTDCwobr9PqT3126lEvE4x8QXpUYZDQa9z7U2/s6k+VyOWi1CqLRGP4Iz0JSFJTZUxI+8x2/MYaxrMO6zMFckkaWTc0tLcf9fr89k80Kr1ZX0zhzdgwn3hjGjWCIDBqE8Jnv+C1NGMayDusyB3PJR48c6ejs7HyHQjZUqxUkEkmc/mgMV38NIldQcevWPDratyCRTOL9D8cQWUnhTiSKhdu30d25FQZKgcSpKZX8lMsvFMp0j9PptOfyeXJXIwqgaHWw1NtgdzqRJKIzo+e5dEimc/C1+ZFKpUC5E9iSWkKhVAJx2AjUI12bmvJbbTasr69zn5HFOrz4/DEM9PehSnlzUUXjq1khDlcDtwQOPLYXLxCmjrCZTFboWq1WMJdCidULS1RN3tfImslgwLGnD1EoEn4LzcLusDMPCusF7OndgWcOPw5qakEmmppby2jkIuklin2tQGTcBmyJe0+l88LC36BfITwqV8Umwl5cWsLc3DzhKwLLOqzLHMylEGCGeghmi0U8MtmPv0ziy2+uEKiKeocDWkUWPVgoaBCanhOFOnxoALse2C5IdTodmIO5pGAweO361NSsyWwmRQWrlPDLVyYQja9CbzJDph918JGHhVAGYDBbEE2mcfn7CaSSKaHDulPEwVwy/YoMReMa3L+/nwdDlTxs3eyjiq4hm83hCSrAg91b4aYi6rRazITn0erz4uhTB+Cw1Qsy9nJkZOQskX4lUyHKkaWlCP3N/kAg4OGwzSYD3C4HfM0e7OzagjVKfp7uW5rcVE0Ldmy7H5tbGkXreDwefHrhQvCTc+fepKKsyPzZqQfjv4dCd5i0d/fu+kqlDH2dFh4izdL3UtVyrVgqNnkbYbOaYaGcO2kafX7x4uLw8PArK9Hoz9zH8n9jJ333bnhycvJmuVjs2dbd7fI0NdFs1BBRVUwYLYWr1xtgtdtEb2bWMvh4dHTm7VOnXl6KRMZF+/w7T8V8EB7w2WG3dxDh8aGhoWf7+vpaGxsbQQMWtQGL5eVlkOG/xsfHP6OozidTqRmhW3PsHkKa1EKZ2kBbVtU2h9O5p7m5eSfdOWuEicXFxevJROKqrCh/UkFLbERV1Q3CfwQYAGpDTIdVyPxeAAAAAElFTkSuQmCC + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAQXSURBVHjadFTfa1t1FD/3e+9Nc5OY3Pxq2mRJY2yZtMqoXV0dRWqZc6Vl/sIHX4Z/wJ6EvQk+SKEyEPogynQOimNupfowC4oP+uCwUKHpam1NN+zmkjTNj+Y2P5t7k3jOt0lRxg4c8r3nez6fc3LO+R7hk9lZIGk2m/yXCQJIkuS2KMqY1+ud8ng8z9tsNj/dFYvFZCaTuZtOp7+vVKu/6IaRrdfrICCGlESClhBho9EwWe32c8d7ey/19/ePIuGRY0u60e+FdCbz3p8bG7/GYrHLmqb9wESx1vYTX5uYaJMpnV7vpVfGxmYHBwefsVqt3E4ZkOI9/yYgZgzhnp6Q0+l8I5vJNDDzZYExg+44ITpLXo/n4tkzZ2ZCoZBcq9UOo4ki1HSdE/GgqLIs8wCGYQCWQ8YkxndSqVypXF5mjDUYAS0Wy+nhkyc/8Pv9UC6XsYYypNO7sBX7CyTGoEEZotKZbHRHPuRLGMISB++BKAjWY4HAhUgk4iwVizyr7ZQGr37TDe/cDsGnPyVAUSxc6Uw2uvsnvc99CUNY4iAuZrZYIsFg8C0qKVYIlu/l4fWbKsjVFDB9H76M9cD8nUdc6Uw2upu64YDl+xo0qcOIDQWDbyvIJeHHkNvtdlYwfSwsGI3Ddupm31FrP/r92NH5v3aqq17TQW8eAHKoaBpi0ZWViOpwQLVapTmDTrsMn51NgUUow5PELhTg6sQuqBYZSqUixzqQg7gYFtZMkaib1DmloUGvR4AvzlfBJhQfI3OLebj6pgFBRxNsoHFMexKIi+m6XqgdHPBRoEg0b9t7AD+u70OxaXuMMFtX4faqBg80gfsShrDEQVwsEY9vZrJZMJlM3KGOES//bMDcvfAT//Lc/TD3aQ88YYmDuNja2tpKdHV1y4YvQ8Kh3cvnIVb1g6TnjwhOOR5ybYtUO/TJ7eU4hrDRaHSLuFg+n3/43cLCLXzsYO7oAAUvx70PwJBVDu4zJ2GqX+JKZxLDpHIfi9XGMZVKBb5dWLhJXCIWs55IJpP4hF4eHR31UU0EhjvjIA9Sowrnj+vQi0TUWfUpBXbzFRhwZOF0mEHYxcDn88HX16+vfXXt2ofYlJSI7w9wBjN/rK8/ItJTw8N2b0cVTrgKMN5TBrWZw1oZvFadphKc6zPgxW4d+nwd4PW44db8fHx6evr93VTqDs2x2F47+5oWW1pa2qjV60PPDQx4/F1duBvxHTcbQEFpKSiKGZwOFTAwFIoF+PzKlc2PZ2YuJhOJRc5Dr4acSSgDOjtdrmeR8MLk5OS7IyMj4S4kpnXVWrCws7MDGHh7cXHxBv6rub1cbpOwQovnf4S4qTkYx0A26vWn3S7XS4FA4ATa3C3CbDweX83mcr9Jovg3rjmdgtBwtwn/FWAADXMqetJXpdYAAAAASUVORK5CYII= + right + top + -10 + -10 + actionScript->closePauseAd + + + + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjA0M0ZFMTZDOEI5NjExRTc5QzI5RDZBNTdDQzBCOUE0IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjA0M0ZFMTZEOEI5NjExRTc5QzI5RDZBNTdDQzBCOUE0Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MDQzRkUxNkE4Qjk2MTFFNzlDMjlENkE1N0NDMEI5QTQiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MDQzRkUxNkI4Qjk2MTFFNzlDMjlENkE1N0NDMEI5QTQiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz63VRFqAAAAjElEQVR42mI8yEBbwMQwPC2wunkTvwimAlyAEVccAI04pq6OycZUgGkZsmJGqkcymmtYiAkfTKehmYLVizgtIFInkYCFwtBAY2O6hoXU9INsBP5UgN0CNHXEBBH+JMtEMD3g10/QBUwEdeKxgxj/MRGjE5cduDIa4UjGdBfcDqxSeCKDcbS4JgQAAgwABj9c9c65XkcAAAAASUVORK5CYII= + data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAASCAIAAAC1qksFAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE1RkZBNjNGOEI5NjExRTdBNUVBQTkyQ0NFRjA4QURGIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE1RkZBNjQwOEI5NjExRTdBNUVBQTkyQ0NFRjA4QURGIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTVGRkE2M0Q4Qjk2MTFFN0E1RUFBOTJDQ0VGMDhBREYiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTVGRkE2M0U4Qjk2MTFFN0E1RUFBOTJDQ0VGMDhBREYiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz766zIBAAAAjElEQVR42uxUSQ6AIAykDY/hk3rhkzxHT4Z0uhklXpxTA21nugDtRGUluCzGRwTbGP4JOlggawZnit4a2uiAZLMzvT5koaZm+oPSRBa1RJMgGZlEfdgNYaOaend/5hT+FugEwi/TIn9lOdwHPz5UwGGkw5GpjzORFof10OIho66LQ71yhkH/dx3hEGAA31RctLVYOx4AAAAASUVORK5CYII= + right + top + -32 + 0 + + + + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + false + 0.8 + 0x333333 + 0.8 + 0 + 0x333333 + 3 + 15 + 2 + 15 + 4 + 5 + 15 + 10 + 0x333333 + 0 + 0xFFFFFF + 0.8 + 0 + 0 + + + + 0xFFFFFF + 1 + 5 + 5 + 5 + + + + 14 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + false + 1 + 0x000000 + 0.8 + 0 + 0x333333 + 0 + 15 + 2 + 15 + 4 + 0 + 150 + 0 + + + + 6 + 0x004eff + 1 + 39 + + + + 16 + Microsoft YaHei,\5FAE\8F6F\96C5\9ED1,微软雅黑 + 0xFFFFFF + true + 1 + 30 + 50 + + \ No newline at end of file diff --git a/demo/mask_detection/web/js/jquery.js b/demo/mask_detection/web/js/jquery.js new file mode 100644 index 0000000000000000000000000000000000000000..4603d460f06aa9eee6e33dcd57bd209de13ea78a --- /dev/null +++ b/demo/mask_detection/web/js/jquery.js @@ -0,0 +1,12 @@ + /*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license +*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="
t
",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; +return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="
",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("