/* 软件名称: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 += '
' + me[0] + '
'; break; case 'link': if (me[3]) { me[3] = 'target="' + me[3] + '"'; } html += ''; break; case 'javaScript': html += ''; break; case 'actionScript': html += ''; 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 += ''; 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 += ''; } else { html += '