├── data └── 001.png ├── ckplayer ├── style.swf ├── ckplayer.swf ├── share │ ├── qq.png │ ├── rr.png │ ├── msn.png │ ├── qq2.png │ ├── sina.png │ ├── sohu.png │ ├── feixin.png │ ├── google.png │ ├── qzone.png │ ├── tianya.png │ └── kaixin001.png ├── share.xml ├── language.xml ├── related.xml ├── ckplayer.xml └── ckplayer.js ├── README.md ├── .gitignore ├── htmltest └── index.html └── index.js /data/001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/data/001.png -------------------------------------------------------------------------------- /ckplayer/style.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/style.swf -------------------------------------------------------------------------------- /ckplayer/ckplayer.swf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/ckplayer.swf -------------------------------------------------------------------------------- /ckplayer/share/qq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/qq.png -------------------------------------------------------------------------------- /ckplayer/share/rr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/rr.png -------------------------------------------------------------------------------- /ckplayer/share/msn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/msn.png -------------------------------------------------------------------------------- /ckplayer/share/qq2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/qq2.png -------------------------------------------------------------------------------- /ckplayer/share/sina.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/sina.png -------------------------------------------------------------------------------- /ckplayer/share/sohu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/sohu.png -------------------------------------------------------------------------------- /ckplayer/share/feixin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/feixin.png -------------------------------------------------------------------------------- /ckplayer/share/google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/google.png -------------------------------------------------------------------------------- /ckplayer/share/qzone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/qzone.png -------------------------------------------------------------------------------- /ckplayer/share/tianya.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/tianya.png -------------------------------------------------------------------------------- /ckplayer/share/kaixin001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/xinshangshangxin/youkuvod/HEAD/ckplayer/share/kaixin001.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # youkuvod5 2 | 3 | # 硕鼠已经无法解析优酷, 更换为[舒克解析](http://www.shokdown.com/index.php)舒克仅支持高清和标清解析 4 | 5 | ## [github地址](https://github.com/xinshangshangxin/youkuvod) / [greasyfork地址](https://greasyfork.org/zh-CN/scripts/2837-youkuvod) 6 | ## 第三方服务解析视频,ckplayer播放视频,去掉优酷广告 7 | 8 | ### 1. 第一次使用 请在视频播放页面 刷新2次!!!!!!(载入swf播放器) 9 | 10 | > 如果刷新3次都没有, 请反馈~~ 11 | 12 | ###2. 第一次使用请允点击许"访问域名", 如下图所示: 13 | ![](https://raw.githubusercontent.com/xinshangshangxin/youkuvod/master/data/001.png) 14 | ~~###3. 设置按钮在左边,详细设置在右边~~ 15 | ~~###4. 设置内容包括: 默认清晰度;播放器服务器~~ 16 | ###5. 偶尔会遇到拖动失败(因为视频是分割的) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Windows image file caches 2 | Thumbs.db 3 | ehthumbs.db 4 | 5 | # Folder config file 6 | Desktop.ini 7 | 8 | # Recycle Bin used on file shares 9 | $RECYCLE.BIN/ 10 | 11 | # Windows Installer files 12 | *.cab 13 | *.msi 14 | *.msm 15 | *.msp 16 | 17 | # Windows shortcuts 18 | *.lnk 19 | 20 | # ========================= 21 | # Operating System Files 22 | # ========================= 23 | 24 | # OSX 25 | # ========================= 26 | 27 | .DS_Store 28 | .AppleDouble 29 | .LSOverride 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear on external disk 35 | .Spotlight-V100 36 | .Trashes 37 | 38 | # Directories potentially created on remote AFP share 39 | .AppleDB 40 | .AppleDesktop 41 | Network Trash Folder 42 | Temporary Items 43 | .apdisk 44 | 45 | # node_modules 46 | *node_modules* 47 | 48 | # user 49 | .git 50 | .idea 51 | 52 | deploy 53 | -------------------------------------------------------------------------------- /ckplayer/share.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {embed src="贵站网址,在ckplayer/share.xml里修改/ckplayer/ckplayer.swf" flashvars="[$share]" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" allowFullscreen="true" type="application/x-shockwave-flash"}{/embed} 5 | 6 | 7 | 贵站网址/ckplayer/ckplayer.swf?[$share] 8 | 9 | 10 | f,my_url,my_pic,a 11 | 12 | ckplayer/share/ 13 | 14 | 15 | 0 16 | 17 | c25cf02c-1705-412d-bd4b-77a10b380f08 18 | 19 | 20 | 21 | qqmb 22 | qq.png 23 | 20,50 24 | 25 | 26 | sinaminiblog 27 | sina.png 28 | 101,50 29 | 30 | 31 | qzone 32 | qzone.png 33 | 182,50 34 | 35 | 36 | renren 37 | rr.png 38 | 263,50 39 | 40 | 41 | kaixin001 42 | kaixin001.png 43 | 20,85 44 | 45 | 46 | tianya 47 | tianya.png 48 | 101,85 49 | 50 | 51 | feixin 52 | feixin.png 53 | 182,85 54 | 55 | 56 | msn 57 | msn.png 58 | 263,85 59 | 60 | 61 | -------------------------------------------------------------------------------- /ckplayer/language.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 73 | -------------------------------------------------------------------------------- /ckplayer/related.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {font color="#FFDD00" face="新宋体"}精彩视频推荐{/font} 4 | 5 | 600,400,0xFFDD00,20 6 | 14 | 120,90 15 | 16 | 150,175,100 17 | 23 | {a href="[url]" target="_blank"}{font color="#FFFFFF" face="新宋体"}[title]{/font}{/a} 24 | 25 | 26 | 27 | 120,42,3 28 | 29 | 30 | 31 | temp/1.jpg 32 | http://www.ckplayer.com/index.php?id=1 33 | 1:这里调用的文件配置在ckplayer/related.xml里 34 | 35 | 36 | temp/2.jpg 37 | http://www.ckplayer.com/index.php?id=2 38 | 2:支持多页调用 39 | 40 | 41 | temp/3.jpg 42 | http://www.ckplayer.com/index.php?id=3 43 | 3:文本请保持在二行,不能多于三行,多于三行将不显示 44 | 45 | 46 | temp/4.jpg 47 | http://www.ckplayer.com/index.php?id=3 48 | 4:支持多行调用,多页调用 49 | 50 | 51 | temp/5.jpg 52 | http://www.ckplayer.com/index.php?id=2 53 | 5:感谢对ckplayer的支持 54 | 55 | 56 | temp/6.jpg 57 | http://www.ckplayer.com/index.php?id=1 58 | 6:最多两行,请不要超过二行 59 | 60 | 61 | temp/3.jpg 62 | http://www.ckplayer.com/index.php?id=1 63 | 7:这里调用的文件配置在ckplayer/related.xml里 64 | 65 | 66 | temp/5.jpg 67 | http://www.ckplayer.com/index.php?id=2 68 | 8:支持多页调用 69 | 70 | 71 | temp/4.jpg 72 | http://www.ckplayer.com/index.php?id=3 73 | 9:文本请保持在二行,不能多于三行,多于三行将不显示 74 | 75 | 76 | temp/1.jpg 77 | http://www.ckplayer.com/index.php?id=3 78 | 10:支持多行调用,多页调用 79 | 80 | 81 | temp/2.jpg 82 | http://www.ckplayer.com/index.php?id=2 83 | 11:感谢对ckplayer的支持 84 | 85 | 86 | temp/6.jpg 87 | http://www.ckplayer.com/index.php?id=1 88 | 12:最多两行,请不要超过二行 89 | 90 | 91 | temp/5.jpg 92 | http://www.ckplayer.com/index.php?id=1 93 | 13:这里调用的文件配置在ckplayer/related.xml里 94 | 95 | 96 | temp/4.jpg 97 | http://www.ckplayer.com/index.php?id=2 98 | 14:支持多页调用 99 | 100 | 101 | temp/6.jpg 102 | http://www.ckplayer.com/index.php?id=3 103 | 15:文本请保持在二行,不能多于三行,多于三行将不显示 104 | 105 | 106 | temp/3.jpg 107 | http://www.ckplayer.com/index.php?id=3 108 | 16:支持多行调用,多页调用 109 | 110 | 111 | temp/1.jpg 112 | http://www.ckplayer.com/index.php?id=2 113 | 17:感谢对ckplayer的支持 114 | 115 | 116 | temp/2.jpg 117 | http://www.ckplayer.com/index.php?id=1 118 | 18:最多两行,请不要超过二行 119 | 120 | 121 | -------------------------------------------------------------------------------- /htmltest/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | TEST 8 | 42 | 43 | 44 | 45 |
46 | 47 |
48 |
49 |
50 | 解析服务器 51 | 55 |
56 |
57 | 默认清晰度 58 | 64 |
65 |
66 | 播放器服务器 67 | 72 |
73 |
74 | 港剧语言 75 | 粤语 76 |
77 |
78 | 注意 79 | 点击确定产生 80 |
刷新页面应用设置 81 | 82 |
83 |
84 | 85 | 86 | 87 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /ckplayer/ckplayer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 277 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name youkuvod 3 | // @version 16.12.25.01 4 | // @description 第三方服务解析视频,ckplayer播放视频,去掉优酷广告 5 | // @icon http://upload.xinshangshangxin.com/o_19pbo74ug1egh1d4tt818hb14b49.ico 6 | // @include http://v.youku.com/v_show/id* 7 | // @grant GM_xmlhttpRequest 8 | // @auther SHANG殇 9 | // @namespace SHANG 10 | // ==/UserScript== 11 | 12 | 13 | //全局变量 14 | var currentHref = window.location.href; 15 | var isLog = false; 16 | var timeout = 15 * 1000; 17 | var definitions = ['1080', '超清', '高清', '标清']; //清晰度 18 | var playId = 'player'; //播放替换的 id 19 | 20 | var ckSwf = 'http://youkuvod.coding.me/youkuvod/ckplayer/ckplayer.swf'; 21 | var ckJs = 'https://greasyfork.org/scripts/17997-ckplayer6-6/code/ckplayer66.js?version=113417'; 22 | 23 | var definitionDiv = document.createElement('div'); 24 | 25 | // 载入需要的ckJs 26 | loadCkJs(); 27 | 28 | // polyfill 29 | polyfill(); 30 | 31 | // 界面设置 32 | pageSetting(); 33 | 34 | // 用户设置 35 | var option = { 36 | definition: 1 //清晰度 37 | }; 38 | 39 | if(localStorage.getItem('shang_youkuvod')) { 40 | var userOption = JSON.parse(localStorage.getItem('shang_youkuvod')); 41 | option.definition = userOption.definition === undefined ? option.definition : parseInt(userOption.definition); 42 | } 43 | // 用户设置结束 44 | 45 | 46 | // 开始查询 播放URL; 47 | if(isMatch(currentHref)) { 48 | startParse(); 49 | } 50 | 51 | function startParse() { 52 | var nu = 0; 53 | var targetNu = 1; 54 | var results = []; 55 | var isPlaying = false; 56 | // addressXML(currentHref, function(err, data) { 57 | // nu++; 58 | // if(err) { 59 | // log(err); 60 | // tryPlay(results, nu); 61 | // return; 62 | // } 63 | // results.push.apply(results, data); 64 | // tryPlay(results, nu); 65 | // }); 66 | 67 | address(currentHref, function(err, data) { 68 | nu++; 69 | if(err) { 70 | log(err); 71 | tryPlay(results, nu); 72 | return; 73 | } 74 | results.push.apply(results, data.filter(function(item) { 75 | return haveUrls(item); 76 | }).reverse()); 77 | tryPlay(results, nu); 78 | }); 79 | 80 | 81 | function tryPlay() { 82 | log('nu: ', nu, 'results: ', results); 83 | if(!results.length) { 84 | if(nu === targetNu) { 85 | throwError(null, nu === targetNu); 86 | } 87 | return; 88 | } 89 | 90 | addButton(results); 91 | 92 | var matchObj = results.filter(function(item) { 93 | return item.name === definitions[option.definition]; 94 | })[0]; 95 | 96 | if(haveUrls(matchObj)) { 97 | isPlaying = true; 98 | log('matchObj.data: ', matchObj.data); 99 | log('all results:', results); 100 | startPlay(matchObj.data.join('|')); 101 | } 102 | 103 | if(!isPlaying && nu === targetNu) { 104 | matchObj = results[results.length - 1]; 105 | 106 | log('matchObj.data: ', matchObj.data); 107 | log('all results:', results); 108 | startPlay(matchObj.data.join('|')); 109 | } 110 | 111 | } 112 | } 113 | 114 | function haveUrls(matchObj) { 115 | return matchObj && matchObj.data && matchObj.data.length; 116 | } 117 | 118 | 119 | //检测匹配(待完善) 120 | function isMatch(url) { 121 | return /v\.youku\.com\/v_show\/id/.test(url); 122 | } 123 | 124 | //未解析到视频抛出异常 125 | function throwError(e, isAlert) { 126 | definitionDiv.innerHTML = '
解析失败
'; 127 | if(isAlert) { 128 | alert('没有解析到视频'); 129 | } 130 | } 131 | 132 | function addressXML(url, done) { 133 | log('start addressXML'); 134 | //noinspection JSUnresolvedFunction 135 | GM_xmlhttpRequest({ 136 | method: 'GET', 137 | timeout: timeout, 138 | url: 'http://api.btjson.com/video.php?v=' + url, 139 | headers: { 140 | 'cache-control': 'no-cache', 141 | 'user-agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36' 142 | }, 143 | onload: function(jdata) { 144 | var data = parseXML(jdata.responseText); 145 | log('end addressXML: ', data); 146 | done(null, data); 147 | }, 148 | onerror: function(res) { 149 | log('error addressXML'); 150 | done(res); 151 | }, 152 | ontimeout: function(res) { 153 | log('timeout addressXML'); 154 | done(res); 155 | } 156 | }); 157 | } 158 | 159 | //地址解析 160 | function address(url, done) { 161 | log('start address'); 162 | //noinspection JSUnresolvedFunction 163 | GM_xmlhttpRequest({ 164 | method: 'POST', 165 | timeout: timeout, 166 | url: 'http://www.shokdown.com/parse.php', 167 | data: 'url=' + url, 168 | headers: { 169 | 'cache-control': 'no-cache', 170 | 'accept-language': 'zh-CN,zh;q=0.8,en;q=0.6', 171 | referer: 'http://www.shokdown.com/', 172 | dnt: '1', 173 | accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 174 | 'content-type': 'application/x-www-form-urlencoded', 175 | 'user-agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36', 176 | 'upgrade-insecure-requests': '1', 177 | 'x-devtools-emulate-network-conditions-client-id': 'D045B439-DA29-4CDF-8A2C-B9DE2769D7DD', 178 | origin: 'http://www.shokdown.com' 179 | }, 180 | onload: function(jdata) { 181 | var data = parseHtml(jdata.responseText); 182 | log('end address, ', data); 183 | done(null, data); 184 | }, 185 | onerror: function(res) { 186 | log('error address'); 187 | done(res); 188 | }, 189 | ontimeout: function(res) { 190 | log('timeout address'); 191 | done(res); 192 | } 193 | }); 194 | } 195 | 196 | function parseXML(str) { 197 | var urls = str.match(/http[^><"' ]+(?=[\r\n]?]]>)/gi); 198 | 199 | if(!urls) { 200 | return []; 201 | } 202 | 203 | return [{ 204 | name: '超清', 205 | len: urls.length, 206 | data: urls 207 | }]; 208 | } 209 | 210 | function parseHtml(str) { 211 | var info = str.match(/.*?(?=<\/font>)/gi).map(function(item) { 212 | return item.replace(//i, ''); 213 | }); 214 | var allA = str.match(/a href=["']?(http[^>"' ]+)(?=["']?)/gi).map(function(item) { 215 | return item.replace(/a href=["']?/i, ''); 216 | }); 217 | 218 | var len; 219 | var result = []; 220 | for(var i = 0, l = info.length; i < l - 1; i += 2) { 221 | if(!/\d+/.test(info[i + 1])) { 222 | break; 223 | } 224 | 225 | len = parseInt(info[i + 1]); 226 | result.push({ 227 | name: info[i], 228 | len: len, 229 | data: allA.splice(0, len) 230 | }); 231 | } 232 | 233 | return result; 234 | } 235 | 236 | //播放视频 237 | function startPlay(u, ss, nu) { 238 | if(!CKobject) { 239 | if(nu > 2) { 240 | throwError(new Error('CKobject 不存在!!'), true); 241 | return; 242 | } 243 | 244 | setTimeout(function() { 245 | startPlay(u, ss, (nu || 1) + 1); 246 | }, 1000); 247 | } 248 | ss = ss || 0; 249 | if(CKobject.getObjectById('syplayer') !== null) { 250 | CKobject.getObjectById('syplayer').ckplayer_newaddress('{f->' + u + '}{s->' + ss + '}'); 251 | return; 252 | } 253 | 254 | var loadJs = document.createElement('script'); 255 | loadJs.type = 'text/javascript'; 256 | loadJs.innerHTML = "var flashvars={f:'" + u + "',c:0,v:80,e:0,s:'" + ss + "',p:1,g:'" + 0 + "'};var params={bgcolor:'#FFF',allowFullScreen:true,allowScriptAccess:'always'};CKobject.embedSWF('" + ckSwf + "','" + playId + "','syplayer','100%','100%',flashvars,params);"; 257 | 258 | document.getElementsByTagName('body')[0].appendChild(loadJs); 259 | } 260 | 261 | //显示悬浮按钮 262 | function addButton(arr) { 263 | var setting = ''; 264 | //''; 265 | definitionDiv.innerHTML = setting + arr.map(function(item) { 266 | return ''; 269 | }).join(''); 270 | } 271 | 272 | function log() { 273 | if(isLog) { 274 | console.log.apply(console, arguments); 275 | } 276 | } 277 | 278 | function loadCkJs() { 279 | // 载入 ckJs 280 | var loadCkJsEle = document.createElement('script'); 281 | loadCkJsEle.type = 'text/javascript'; 282 | loadCkJsEle.src = ckJs; 283 | document.getElementsByTagName('body')[0].appendChild(loadCkJsEle); 284 | } 285 | 286 | function pageSetting() { 287 | var optionShowHtml = document.createElement('div'); 288 | optionShowHtml.innerHTML = '
' + '
' + '解析服务器' + '' + '
' + '
' + '默认清晰度' + '' + '
' + '
' + '注意' + '点击确定产生
' + '刷新页面应用设置' + '' + '
' + '
'; 289 | 290 | var optionShowStyle = document.createElement('style'); 291 | optionShowStyle.type = 'text/css'; 292 | optionShowStyle.innerHTML = '#content_shang{z-index: 99999;position:fixed;top:50%;margin-top:-150px;right:50px;background:#fbfbfb;display:none}#content_shang fieldset{padding:6px;margin:3px}#content_shang ul{margin:0;padding:0}#content_shang li{list-style:none}input[type=checkbox]:hover{cursor:pointer}'; 293 | 294 | var optionShowScript = document.createElement('script'); 295 | optionShowScript.innerHTML = '!function(){function a(){var a={qingxidu:1,isgy:!1,flv:"ss",which:3};localStorage["shang_youkuvod"]&&(a=e(a,JSON.parse(localStorage["shang_youkuvod"]))),b(document.getElementById("flv_shang").options,a.flv),b(document.getElementById("qxd_shang").options,a.qingxidu),b(document.getElementById("which_shang").options,a.which),document.getElementById("isgy_shang").checked=!a.isgy,document.getElementById("confirm_shang").onclick=function(){c(),location.href=location.href},document.getElementById("content_shang").onmouseover=function(){clearTimeout(this.timer),this.style.display="block"},document.getElementById("content_shang").onmouseleave=function(){var a=this;this.timer=setTimeout(function(){a.style.display="none"},1e3)}}function b(a,b){for(var c=0;c>> 0; 332 | if(typeof fun !== 'function') { 333 | throw new TypeError(); 334 | } 335 | 336 | var res = []; 337 | var thisArg = arguments.length >= 2 ? arguments[1] : void 0; 338 | for(var i = 0; i < len; i++) { 339 | if(i in t) { 340 | var val = t[i]; 341 | if(fun.call(thisArg, val, i, t)) { 342 | res.push(val); 343 | } 344 | } 345 | } 346 | return res; 347 | }; 348 | } 349 | } 350 | 351 | 352 | /* 353 | * 161225 修复进度条不显示问题 354 | * 160627 btjson停止解析 355 | * 160607 使用btjson.com解析超清视频 356 | * 160605 使用舒克解析代替硕鼠 357 | * 160316 配合greasyfork "External Script: Please submit script as library." 358 | * 160102 突破硕鼠20s限制 359 | * 151204 修正因硕鼠改版导致的解析失效 360 | * 150414 修正因硕鼠改版导致的解析失效,修正清晰度按钮失效 361 | * 150322 飞驴api接口关闭;屏蔽相关代码 362 | * 150219 azure免费到期;域名转coding.net;修改/添加coding.net演示所需要文件 363 | * 150211 修正在已经设置硕鼠解析清晰度下标清失效问题 364 | * 150130 使用二级域名,本来域名即将调整 365 | * 150121 根据jshint修正各种警告 366 | * 150102 修正/更改 设置按钮 显示位置;修正飞驴1080P解析略过问题;去除京东服务器 367 | * 141230 图形化设置页面移动至清晰度按钮上方 368 | * 141229 去除代码设置;添加图形化设置;版本号书写方式变化 369 | * 141227 默认选择官方原版播放器; 京东太渣了~~~, onerr函数无用 370 | * 141221 添加飞驴解析; 添加清晰度1080P; 精简部分代码 371 | * 141219 添加服务器切换设置, 添加服务器挂掉弹窗,移动至github 372 | * 141217 清晰度选择恢复 373 | * 141216 更新ckplayer; 暂时去除 清晰度选择(现在只可以选择默认清晰度) 374 | * 140927 全面去除 飞驴 (┬_┬); 添加清晰度自动隐藏 375 | * 140923 因为飞驴解析需要token, 所以默认为 硕鼠,也因此去除 爱奇艺解析(硕鼠不支持) 修正硕鼠下 高清不显示问题 376 | * 140811 添加更换服务器选项 377 | * 140725 更新服务器文件(swf文件) 378 | * 140724 添加爱奇艺解析; 添加更多清晰度(飞驴解析下) 379 | * 140701 修正视频解析显示错误, 发现某些未能修正错误,暂时只保留基本功能 380 | * 140628 整合飞驴解析, 添加视频大小选择(顶部栏其他信息显示) 添加设置 381 | * 140627 图标更改, 修正视频清晰度显示不正确 382 | * 140626 create 383 | **/ 384 | -------------------------------------------------------------------------------- /ckplayer/ckplayer.js: -------------------------------------------------------------------------------- 1 | /* 2 | ------------------------------------------------------------------------- 3 | 说明: 4 | 正式使用时可以把该文件的注释全部去掉,节省加载时间 5 | ckplayer6.6,有问题请访问http://www.ckplayer.com 6 | 请注意,该文件为UTF-8编码,不需要改变编码即可使用于各种编码形式的网站内 7 | ------------------------------------------------------------------------- 8 | 第一部分,加载插件 9 | 以下为加载的插件部份 10 | 插件的设置参数说明: 11 | 1、插件名称 12 | 2、水平对齐方式(0左,1中,2右) 13 | 3、垂直对齐方式(0上,1中,2下) 14 | 4、水平方向位置偏移量 15 | 5、垂直方向位置偏移量 16 | 6、插件的等级,0=普通图片插件且跟随控制栏隐藏而隐藏,显示而显示,1=普通图片插件且永久显示,2=swf插件,默认显示,3=swf插件,默认隐藏,swf插件都可以交互 17 | 7、插件是否绑定在控制栏上,0不绑定,1绑定,当值是1的时候该插件将会随着控制栏一起隐藏或缓动 18 | 8、插件为swf并且可交互时,默认调用的类所在的包名称,详细说明可以到帮助手册里查看,默认无 19 | 插件名称不能相同,对此的详细说明请到网站查看 20 | */ 21 | function ckcpt() { 22 | var cpt = ''; 23 | //cpt += 'right.swf,2,1,0,0,2,0|'; //右边开关灯,调整,分享按钮的插件 24 | // cpt += 'share.swf,1,1,-180,-100,3,0|'; //分享插件 25 | cpt += 'adjustment.swf,1,1,-180,-100,3,0|'; //调整大小和颜色的插件 26 | return cpt; 27 | } 28 | /* 29 | 插件的定义结束 30 | 以下是对播放器功能进行配置 31 | */ 32 | function ckstyle() { //定义总的风格 33 | var ck = { 34 | cpath: '', 35 | /* 36 | 播放器风格压缩包文件的路径,默认的是style.swf 37 | 如果调用不出来可以试着设置成绝对路径试试 38 | 如果不知道路径并且使用的是默认配置,可以直接留空,播放器会 39 | */ 40 | language: '', 41 | /*播放器所使用的语言配置文件,需要和播放器在同目录下,默认是language.xml*/ 42 | flashvars: '', 43 | /* 44 | 这里是用来做为对flashvars值的补充,除了c和x二个参数以外的设置都可以在这里进行配置 45 | 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 4 4 4 46 | 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2*/ 47 | setup: '1,1,1,1,1,2,0,1,0,0,0,1,200,0,2,1,0,1,1,1,2,10,3,0,1,2,3000,0,0,0,0,1,1,1,1,1,1,250,0,90,0,0', 48 | /* 49 | 这是配置文件里比较重要的一个参数,共有N个功能控制参数,并且以后会继续的增加,各控制参数以英文逗号(,)隔开。下面列出各参数的说明: 50 | 1、鼠标经过按钮是否使用手型,0普通鼠标,1手型鼠标,2是只有按钮手型,3是控制栏手型 51 | 2、是否支持单击暂停,0不支持,1是支持 52 | 3、是否支持双击全屏,0不支持,1是支持 53 | 4、在播放前置广告时是否同时加载视频,0不加载,1加载 54 | 5、广告显示的参考对象,0是参考视频区域,1是参考播放器区域 55 | 6、广告大小的调整方式,只针对swf和图片有效,视频是自动缩放的 56 | =0是自动调整大小,意思是说大的话就变小,小的话就变大 57 | =1是大的化变小,小的话不变 58 | =2是什么也不变,就这么大 59 | =3是跟参考对像(第5个控制)参数设置的一样宽高 60 | 7、前置广告播放顺序,0是顺序播放,1是随机播放,>1则随机取所有广告中的(N-1)个进行播放 61 | 8、对于视频广告是否采用修正,0是不使用,1是使用,如果是1,则用户在网速慢的情况下会按设定的倒计时进行播放广告,计时结束则放正片(比较人性化),设置成0的话,则强制播放完广告才能播放正片 62 | 9、是否开启滚动文字广告,0是不开启,1是开启且不使用关闭按钮,2是开启并且使用关闭按钮,开启后将在加载视频的时候加载滚动文字广告 63 | 10、视频的调整方式 64 | =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 65 | =1是大的化变小,小的话不变 66 | =2是什么也不变,就这么大 67 | =3是跟参考对像(pm_video的设置)参数设置的一样宽高 68 | 11、是否在多视频时分段加载,0不是,1是 69 | 12、缩放视频时是否进行平滑处理,0不是,1是 70 | 13、视频缓冲时间,单位:毫秒,建议不超过300 71 | 14、初始图片调整方式( 72 | =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 73 | =1是大的化变小,小的话不变 74 | =2是什么也不变,就这么大 75 | =3是跟pm_video参数设置的一样宽高 76 | 15、暂停广告调整方式( 77 | =0是自动调整大小,意思是说大的话就变小,小的话就变大,同时保持长宽比例不变 78 | =1是大的化变小,小的话不变 79 | =2是什么也不变,就这么大 80 | =3是跟pm_video参数设置的一样宽 81 | 16、暂停广告是否使用关闭广告设置,0不使用,1使用 82 | 17、缓冲时是否播放广告,0是不显示,1是显示并同时隐藏掉缓冲图标和进度,2是显示并不隐藏缓冲图标 83 | 18、是否支持键盘空格键控制播放和暂停0不支持,1支持 84 | 19、是否支持键盘左右方向键控制快进快退0不支持,1支持 85 | 20、是否支持键盘上下方向键控制音量0不支持,1支持 86 | 21、播放器返回js交互函数的等级,0-2,等级越高,返回的参数越多 87 | 0是返回少量常用交互 88 | 1返回播放器在播放的时候的参数,不返回广告之类的参数 89 | 2返回全部参数 90 | 3返回全部参数,并且在参数前加上"播放器ID->",用于多播放器的监听 91 | 22、快进和快退的秒数 92 | 23、界面上图片元素加载失败重新加载次数 93 | 24、开启加载皮肤压缩文件包的加载进度提示 94 | 25、使用隐藏控制栏时显示简单进度条的功能,0是不使用,1是使用,2是只在普通状态下使用 95 | 26、控制栏隐藏设置(0不隐藏,1全屏时隐藏,2都隐藏 96 | 27、控制栏隐藏延时时间,即在鼠标离开控制栏后多少毫秒后隐藏控制栏 97 | 28、左右滚动时是否采用无缝,默认0采用,1是不采用 98 | 29、0是正常状态,1是控制栏默认隐藏,播放状态下鼠标经过播放器显示控制栏,2是一直隐藏控制栏 99 | 30、在播放rtmp视频时暂停后点击播放是否采用重新链接的方式,这里一共分0-2三个等级 100 | 31、当采用网址形式(flashvars里s=1/2时)读取视频地址时是采用默认0=get方法,1=post方式 101 | 32、是否启用播放按钮和暂停按钮 102 | 33、是否启用中间暂停按钮 103 | 34、是否启用静音按钮 104 | 35、是否启用全屏按钮 105 | 36、是否启用进度调节栏,0不启用,1是启用,2是只能前进(向右拖动),3是只能后退,4是只能前进但能回到第一次拖动时的位置,5是看过的地方可以随意拖动, 106 | 37、是否启用调节音量 107 | 38、计算时间的间隔,毫秒 108 | 39、前置logo至少显示的时间,单位:毫秒 109 | 40、前置视频广告的默认音量 110 | 41、当s=3/4时加载插件是否从压缩包里加载,0不是,1是 111 | 42、加载风格是否采用加密方式传送,该功能普通用户不能使用 112 | */ 113 | pm_bg: '0x000000,100,230,180', 114 | /*播放器整体的背景配置,请注意,这里只是一个初始化的设置,如果需要真正的改动播放器的背景和最小宽高,需要在风格文件里找到相同的参数进行更改。 115 | 1、整体背景颜色 116 | 2、背景透明度 117 | 3、播放器最小宽度 118 | 4、播放器最小高度 119 | 这里只是初始化时的设置,最终加载完播放器后显示的效果需要在style.swf/style.xml里设置该参数 120 | */ 121 | mylogo: 'logo.swf', 122 | /* 123 | 视频加载前显示的logo文件,不使用设置成null,即mylogo='null'; 124 | */ 125 | pm_mylogo: '1,1,-100,-55', 126 | /* 127 | 视频加载前显示的logo文件(mylogo参数的)的位置 128 | 本软件所有的四个参数控制位置的方式全部都是统一的意思,如下 129 | 1、水平对齐方式,0是左,1是中,2是右 130 | 2、垂直对齐方式,0是上,1是中,2是下 131 | 3、水平偏移量,举例说明,如果第1个参数设置成0左对齐,第3个偏移量设置成10,就是离左边10个像素,第一个参数设置成2,偏移量如果设置的是正值就会移到播放器外面,只有设置成负值才行,设置成-1,按钮就会跑到播放器外面 132 | 4、垂直偏移量 133 | */ 134 | logo: 'cklogo.png', 135 | /* 136 | 默认右上角一直显示的logo,不使用设置成null,即logo='null'; 137 | */ 138 | pm_logo: '2,0,-100,20', 139 | /* 140 | 播放器右上角的logo的位置 141 | 1、水平对齐方式,0是左,1是中,2是右 142 | 2、垂直对齐方式,0是上,1是中,2是下 143 | 3、水平偏移量 144 | 4、垂直偏移量 145 | 以下是播放器自带的二个插件 146 | */ 147 | control_rel: 'related.swf,ckplayer/related.xml,0', 148 | /* 149 | 视频结束显示精彩视频的插件 150 | 1、视频播放结束后显示相关精彩视频的插件文件(注意,视频结束动作设置成3时(即var flashvars={e:3})有效), 151 | 2、xml文件是调用精彩视频的示例文件,可以自定义文件类型(比如asp,php,jsp,.net只要输出的是xml格式就行),实际使用中一定要注意第二个参数的路径要正确 152 | 3、第三个参数是设置配置文件的编码,0是默认的utf-8,1是gbk2312 153 | */ 154 | control_pv: 'Preview.swf,105,2000', 155 | /* 156 | 视频预览插件 157 | 1、插件文件名称(该插件和上面的精彩视频的插件都是放在风格压缩包里的) 158 | 2、离进度栏的高(指的是插件的顶部离进度栏的位置) 159 | 3、延迟时间(该处设置鼠标经过进度栏停顿多少毫秒后才显示插件) 160 | 建议一定要设置延时时间,不然当鼠标在进度栏上划过的时候就会读取视频地址进行预览,很占资源 161 | */ 162 | pm_repc: '', 163 | /* 164 | 视频地址替换符,该功能主要是用来做简单加密的功能,使用方法很简单,请注意,只针对f值是视频地址的时候有效,其它地方不能使用。具体的请查看http://www.ckplayer.com/manual.php?id=4#title_25 165 | */ 166 | pm_spac: '|', 167 | /* 168 | 视频地址间隔符,这里主要是播放多段视频时使用普通调用方式或网址调用方式时使用的。默认使用|,如果视频地址里本身存在|的话需要另外设置一个间隔符,注意,即使只有一个视频也需要设置。另外在使用rtmp协议播放视频的时候,如果视频存在多级目录的话,这里要改成其它的符号,因为rtmp协议的视频地址多级的话也需要用到|隔开流地址和实例地址 169 | */ 170 | pm_fpac: 'file->f', 171 | /* 172 | 该参数的功能是把自定义的flashvars里的变量替换成ckplayer里对应的变量,默认的参数的意思是把flashvars里的file值替换成f值,因为ckplayer里只认f值,多个替换之间用竖线隔开 173 | */ 174 | pm_advtime: '2,0,-110,10,0,300,0', 175 | /* 176 | 前置广告倒计时文本位置,播放前置 广告时有个倒计时的显示文本框,这里是设置该文本框的位置和宽高,对齐方式的。一共7个参数,分别表示: 177 | 1、水平对齐方式,0是左对齐,1是中间对齐,2是右对齐 178 | 2、垂直对齐方式,0是上对齐,1是中间对齐,2是低部对齐 179 | 3、水平位置偏移量 180 | 4、垂直位置偏移量 181 | 5、文字对齐方式,0是左对齐,1是中间对齐,2是右对齐,3是默认对齐 182 | 6、文本框宽席 183 | 7、文本框高度 184 | */ 185 | pm_advstatus: '1,2,2,-200,-40', 186 | /* 187 | 前置广告静音按钮,静音按钮只在是视频广告时显示,当然也可以控制不显示 188 | 1、是否显示0不显示,1显示 189 | 2、水平对齐方式 190 | 3、垂直对齐方式 191 | 4、水平偏移量 192 | 5、垂直偏移量 193 | */ 194 | pm_advjp: '1,1,2,2,-100,-40', 195 | /* 196 | 前置广告跳过广告按钮的位置 197 | 1、是否显示0不显示,1是显示 198 | 2、跳过按钮触发对象(值0/1,0是直接跳转,1是触发js:function ckadjump(){}) 199 | 3、水平对齐方式 200 | 4、垂直对齐方式 201 | 5、水平偏移量 202 | 6、垂直偏移量 203 | */ 204 | pm_padvc: '2,0,-10,-10', 205 | /* 206 | 暂停广告的关闭按钮的位置 207 | 1、水平对齐方式 208 | 2、垂直对齐方式 209 | 3、水平偏移量 210 | 4、垂直偏移量 211 | */ 212 | pm_advms: '2,2,-46,-56', 213 | /* 214 | 滚动广告关闭按钮位置 215 | 1、水平对齐方式 216 | 2、垂直对齐方式 217 | 3、水平偏移量 218 | 4、垂直偏移量 219 | */ 220 | pm_zip: '1,1,-20,-8,1,0,0', 221 | /* 222 | 加载皮肤压缩包时提示文字的位置 223 | 1、水平对齐方式,0是左对齐,1是中间对齐,2是右对齐 224 | 2、垂直对齐方式,0是上对齐,1是中间对齐,2是低部对齐 225 | 3、水平位置偏移量 226 | 4、垂直位置偏移量 227 | 5、文字对齐方式,0是左对齐,1是中间对齐,2是右对齐,3是默认对齐 228 | 6、文本框宽席 229 | 7、文本框高度 230 | */ 231 | //pm_advmarquee: '1,2,50,-60,50,18,0,0x000000,50,0,20,1,15,2000', 232 | pm_advmarquee: '1,2,50,-60,50,20,0,0x000000,50,0,20,1,30,2000', 233 | /* 234 | 滚动广告的控制,要使用的话需要在setup里的第9个参数设置成1 235 | 这里分二种情况,前六个参数是定位控制,第7个参数是设置定位方式(0:相对定位,1:绝对定位) 236 | 第一种情况:第7个参数是0的时候,相对定位,就是播放器长宽变化的时候,控制栏也跟着变 237 | 1、默认1:中间对齐 238 | 2、上中下对齐(0是上,1是中,2是下) 239 | 3、离左边的距离 240 | 4、Y轴偏移量 241 | 5、离右边的距离 242 | 6、高度 243 | 7、定位方式 244 | 第二种情况:第7个参数是1的时候,绝对定位,就是播放器长宽变化的时候,控制栏不跟着变,这种方式一般使用在控制栏大小不变的时候 245 | 1、左中右对齐方式(0是左,1是中间,2是右) 246 | 2、上中下对齐(0是上,1是中,2是下) 247 | 3、x偏移量 248 | 4、y偏移量 249 | 5、宽度 250 | 6、高度 251 | 7、定位方式 252 | 以上是前7个参数的作用 253 | 8、是文字广告的背景色 254 | 9、置背景色的透明度 255 | 10、控制滚动方向,0是水平滚动(包括左右),1是上下滚动(包括向上和向下) 256 | 11、移动的单位时长,即移动单位像素所需要的时长,毫秒 257 | 12、移动的单位像素,正数同左/上,负数向右/下 258 | 13、是行高,这个在设置向上或向下滚动的时候有用处 259 | 14、控制向上或向下滚动时每次停止的时间 260 | */ 261 | pm_glowfilter:'1,0x01485d, 100, 6, 3, 10, 1, 0, 0', 262 | /*滚动文字广告是否采用发光滤镜 263 | 1、是否使用发光滤镜,0是不采用,1是使用 264 | 2、(default = 0xFF0000) — 光晕颜色,采用十六进制格式 0xRRGGBB。 默认值为 0xFF0000 265 | 3、(default = 100) — 颜色的 Alpha 透明度值。 有效值为 0 到 100。 例如,25 设置透明度为 25% 266 | 4、(default = 6.0) — 水平模糊量。 有效值为 0 到 255(浮点)。 2 的乘方值(如 2、4、8、16 和 32)经过优化,呈现速度比其它值更快 267 | 5、(default = 6.0) — 垂直模糊量。 有效值为 0 到 255(浮点)。 2 的乘方值(如 2、4、8、16 和 32)经过优化,呈现速度比其它值更快 268 | 6、(default = 2) — 印记或跨页的强度。 该值越高,压印的颜色越深,而且发光与背景之间的对比度也越强。 有效值为 0 到 255 269 | 7、(default = 1) — 应用滤镜的次数 270 | 8、(default = 0) — 指定发光是否为内侧发光。 值 1 指定发光是内侧发光。 值 0 指定发光是外侧发光(对象外缘周围的发光) 271 | 9、(default = 0) — 指定对象是否具有挖空效果。 值为 1 将使对象的填充变为透明,并显示文档的背景颜色 272 | */ 273 | advmarquee: '', 274 | /* 275 | 该处是滚动文字广告的内容,如果不想在这里设置,就把这里清空并且在页面中使用js的函数定义function ckmarqueeadv(){return '广告内容'} 276 | */ 277 | mainfuntion:'', 278 | /* 279 | 当flashvars里s=3/4时,调用的函数包名称,默认为空,调用时间轴上的函数setAppObj 280 | */ 281 | flashplayer:'', 282 | /* 283 | 当flashvars里的s=3/4时,也可以把swf文件放在这里 284 | */ 285 | calljs:'ckplayer_status,ckadjump,playerstop,ckmarqueeadv', 286 | /* 287 | 跳过广告和播放结束时调用的js函数 288 | */ 289 | myweb: escape(''), 290 | /* 291 | ------------------------------------------------------------------------------------------------------------------ 292 | 以下内容部份是和插件相关的配置,请注意,自定义插件以及其配置的命名方式要注意,不要和系统的相重复,不然就会替换掉系统的相关设置,删除相关插件的话也可以同时删除相关的配置 293 | ------------------------------------------------------------------------------------------------------------------ 294 | 以下内容定义自定义插件的相关配置,这里也可以自定义任何自己的插件需要配置的内容,当然,如果你某个插件不使用的话,也可以删除相关的配置 295 | ------------------------------------------------------------------------------------------------------------------ 296 | */ 297 | cpt_lights: '0', 298 | /* 299 | 该处定义是否使用开关灯,和right.swf插件配合作用,使用开灯效果时调用页面的js函数function closelights(){}; 300 | */ 301 | cpt_share: 'ckplayer/share.xml', 302 | /* 303 | 分享插件调用的配置文件地址 304 | 调用插件开始 305 | */ 306 | cpt_list: ckcpt() 307 | /* 308 | ckcpt()是本文件最上方的定义插件的函数 309 | */ 310 | } 311 | return ck; 312 | } 313 | /* 314 | html5部分开始 315 | 以下代码是支持html5的,如果你不需要,可以删除。 316 | html5代码块的代码可以随意更改以适合你的应用,欢迎到论坛交流更改心得 317 | */ 318 | (function() { 319 | var CKobject = { 320 | _K_: function(d){return document.getElementById(d);}, 321 | _T_: false, 322 | _M_: false, 323 | _G_: false, 324 | _Y_: false, 325 | _I_: null, 326 | _J_: 0, 327 | _O_: {}, 328 | uaMatch:function(u,rMsie,rFirefox,rOpera,rChrome,rSafari,rSafari2,mozilla,mobile){ 329 | var match = rMsie.exec(u); 330 | if (match != null) { 331 | return { 332 | b: 'IE', 333 | v: match[2] || '0' 334 | } 335 | } 336 | match = rFirefox.exec(u); 337 | if (match != null) { 338 | return { 339 | b: match[1] || '', 340 | v: match[2] || '0' 341 | } 342 | } 343 | match = rOpera.exec(u); 344 | if (match != null) { 345 | return { 346 | b: match[1] || '', 347 | v: match[2] || '0' 348 | } 349 | } 350 | match = rChrome.exec(u); 351 | if (match != null) { 352 | return { 353 | b: match[1] || '', 354 | v: match[2] || '0' 355 | } 356 | } 357 | match = rSafari.exec(u); 358 | if (match != null) { 359 | return { 360 | b: match[2] || '', 361 | v: match[1] || '0' 362 | } 363 | } 364 | match = rSafari2.exec(u); 365 | if (match != null) { 366 | return { 367 | b: match[1] || '', 368 | v: match[2] || '0' 369 | } 370 | } 371 | match = mozilla.exec(u); 372 | if (match != null) { 373 | return { 374 | b: match[1] || '', 375 | v: match[2] || '0' 376 | } 377 | } 378 | match = mobile.exec(u); 379 | if (match != null) { 380 | return { 381 | b: match[1] || '', 382 | v: match[2] || '0' 383 | } 384 | } 385 | else { 386 | return { 387 | b: 'unknown', 388 | v: '0' 389 | } 390 | } 391 | }, 392 | browser: function() { 393 | var u = navigator.userAgent, 394 | rMsie = /(msie\s|trident.*rv:)([\w.]+)/, 395 | rFirefox = /(firefox)\/([\w.]+)/, 396 | rOpera = /(opera).+version\/([\w.]+)/, 397 | rChrome = /(chrome)\/([\w.]+)/, 398 | rSafari = /version\/([\w.]+).*(safari)/, 399 | rSafari2 = /(safari)\/([\w.]+)/, 400 | mozilla = /(mozilla)\/([\w.]+)/, 401 | mobile = /(mobile)\/([\w.]+)/; 402 | var c = u.toLowerCase(); 403 | var d = this.uaMatch(c,rMsie,rFirefox,rOpera,rChrome,rSafari,rSafari2,mozilla,mobile); 404 | if (d.b) { 405 | b = d.b; 406 | v = d.v; 407 | } 408 | return {B: b, V: v}; 409 | }, 410 | Platform: function() { 411 | var w = ''; 412 | var u = navigator.userAgent, 413 | app = navigator.appVersion; 414 | var b = { 415 | iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, 416 | iPad: u.indexOf('iPad') > -1, 417 | ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), 418 | android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, 419 | webKit: u.indexOf('AppleWebKit') > -1, 420 | trident: u.indexOf('Trident') > -1, 421 | gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, 422 | presto: u.indexOf('Presto') > -1, 423 | mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), 424 | webApp: u.indexOf('Safari') == -1 425 | }; 426 | for (var k in b) { 427 | if (b[k]) { 428 | w = k; 429 | break; 430 | } 431 | } 432 | return w; 433 | }, 434 | isHTML5:function(){ 435 | return !!document.createElement('video').canPlayType; 436 | }, 437 | getType:function(){ 438 | return this._T_; 439 | }, 440 | getVideo: function() { 441 | var v = ''; 442 | var s = this._E_['v']; 443 | if (s && s.length>1) { 444 | for (var i = 0; i < s.length; i++) { 445 | var a = s[i].split('->'); 446 | if (a.length >= 1 && a[0] != '') { 447 | v += '= 2 && a[1] != '') { 450 | v += ' type="' + a[1] + '"'; 451 | } 452 | v += '>'; 453 | } 454 | } 455 | return v; 456 | }, 457 | getVars: function(k) { 458 | var o=this._A_; 459 | if (typeof(o) == 'undefined') { 460 | return null; 461 | } 462 | if (k in o) { 463 | return o[k]; 464 | } else { 465 | return null; 466 | } 467 | }, 468 | getParams: function() { 469 | var p = ''; 470 | if (this._A_) { 471 | if (parseInt(this.getVars('p')) == 1) { 472 | p += ' autoplay="autoplay"'; 473 | } 474 | if (parseInt(this.getVars('e')) == 1) { 475 | p += ' loop="loop"'; 476 | } 477 | if (parseInt(this.getVars('p')) == 2) { 478 | p += ' preload="metadata"'; 479 | } 480 | if (this.getVars('i')) { 481 | p += ' poster="' + this.getVars('i') + '"'; 482 | } 483 | } 484 | return p; 485 | }, 486 | getpath: function(z) { 487 | var f='CDEFGHIJKLMNOPQRSTUVWXYZcdefghijklmnopqrstuvwxyz'; 488 | var w=z.substr(0,1); 489 | if(f.indexOf(w)>-1 && (z.substr(0,4)==w+'://' || z.substr(0,4)==w+':\\')){ 490 | return z; 491 | } 492 | var d = unescape(window.location.href).replace('file:///', ''); 493 | var k = parseInt(document.location.port); 494 | var u = document.location.protocol + '//' + document.location.hostname; 495 | var l = '', 496 | e = '', 497 | t = ''; 498 | var s = 0; 499 | var r = unescape(z).split('//'); 500 | if (r.length > 0) { 501 | l = r[0] + '//' 502 | } 503 | var h = 'http|https|ftp|rtsp|mms|ftp|rtmp|file'; 504 | var a = h.split('|'); 505 | if (k != 80 && k) { 506 | u += ':' + k; 507 | } 508 | for (i = 0; i < a.length; i++) { 509 | if ((a[i] + '://') == l) { 510 | s = 1; 511 | break; 512 | } 513 | } 514 | if (s == 0) { 515 | if (z.substr(0, 1) == '/') { 516 | t = u + z; 517 | } else { 518 | e = d.substring(0, d.lastIndexOf('/') + 1).replace('\\', '/'); 519 | var w = z.replace('../', './'); 520 | var u = w.split('./'); 521 | var n = u.length; 522 | var r = w.replace('./', ''); 523 | var q = e.split('/'); 524 | var j = q.length - n; 525 | for (i = 0; i < j; i++) { 526 | t += q[i] + '/'; 527 | } 528 | t += r; 529 | } 530 | } else { 531 | t = z; 532 | } 533 | return t; 534 | }, 535 | getXhr: function() { 536 | var x; 537 | try { 538 | x = new ActiveXObject('Msxml2.XMLHTTP'); 539 | } catch(e) { 540 | try { 541 | x = new ActiveXObject('Microsoft.XMLHTTP'); 542 | } catch(e) { 543 | x = false; 544 | } 545 | } 546 | if (!x && typeof XMLHttpRequest != 'undefined') { 547 | x = new XMLHttpRequest(); 548 | } 549 | return x; 550 | }, 551 | getX: function(){ 552 | var f='ckstyle()'; 553 | if (this.getVars('x') && parseInt(this.getVars('c'))!=1 ) { 554 | f=this.getVars('x')+'()'; 555 | } 556 | try { 557 | if (typeof(eval(f)) == 'object') { 558 | this._X_ = eval(f); 559 | } 560 | } catch(e) { 561 | try { 562 | if (typeof(eval(ckstyle)) == 'object') { 563 | this._X_ = ckstyle(); 564 | } 565 | } catch(e) { 566 | this._X_ = ckstyle(); 567 | } 568 | } 569 | }, 570 | getSn: function(s, n) { 571 | if(n>=0){ 572 | return this._X_[s].split(',')[n]; 573 | } 574 | else{ 575 | return this._X_[s]; 576 | } 577 | }, 578 | getUrl: function(L, B) { 579 | var b = ['get', 'utf-8']; 580 | if (L && L.length == 2) { 581 | var a = L[0]; 582 | var c = L[1].split('/'); 583 | if (c.length >= 2) { 584 | b[0] = c[1]; 585 | } 586 | if (c.length >= 3) { 587 | b[1] = c[2]; 588 | } 589 | this.ajax(b[0], b[1], a, 590 | function(s) { 591 | var C = CKobject; 592 | if (s && s != 'error') { 593 | var d = '', 594 | e = s; 595 | if (s.indexOf('}') > -1) { 596 | var f = s.split('}'); 597 | for (var i = 0; i < f.length - 1; i++) { 598 | d += f[i] + '}'; 599 | var h = f[i].replace('{', '').split('->'); 600 | if (h.length == 2) { 601 | C._A_[h[0]] = h[1]; 602 | } 603 | } 604 | e = f[f.length - 1]; 605 | } 606 | C._E_['v'] = e.split(','); 607 | if (B) { 608 | C.showHtml5(); 609 | } else { 610 | C.changeParams(d); 611 | C.newAdr(); 612 | } 613 | } 614 | }); 615 | } 616 | }, 617 | getflashvars: function(s) { 618 | var v = '', 619 | i = 0; 620 | if (s) { 621 | for (var k in s) { 622 | if (i > 0) { 623 | v += '&'; 624 | } 625 | if (k == 'f' && s[k] && ! this.getSn('pm_repc',-1)) { 626 | s[k] = this.getpath(s[k]); 627 | if (s[k].indexOf('&') > -1) { 628 | s[k] = encodeURIComponent(s[k]); 629 | } 630 | } 631 | if (k == 'y' && s[k]) { 632 | s[k] = this.getpath(s[k]); 633 | } 634 | v += k + '=' + s[k]; 635 | i++; 636 | } 637 | } 638 | return v; 639 | }, 640 | getparam: function(s) { 641 | var w = '', 642 | v = '', 643 | o = { 644 | allowScriptAccess: 'always', 645 | allowFullScreen: true, 646 | quality: 'high', 647 | bgcolor: '#000' 648 | }; 649 | if (s) { 650 | for (var k in s) { 651 | o[k] = s[k]; 652 | } 653 | } 654 | for (var e in o) { 655 | w += e + '="' + o[e] + '" '; 656 | v += ''; 657 | } 658 | w = w.replace('movie=', 'src='); 659 | return { 660 | w: w, 661 | v: v 662 | }; 663 | }, 664 | getObjectById: function(s) { 665 | if (this._T_) { 666 | return this; 667 | } 668 | var x = null, 669 | y = this._K_(s), 670 | r = 'embed'; 671 | if (y && y.nodeName == 'OBJECT') { 672 | if (typeof y.SetVariable != 'undefined') { 673 | x= y; 674 | } else { 675 | var z = y.getElementsByTagName(r)[0]; 676 | if (z) { 677 | x= z; 678 | } 679 | } 680 | } 681 | return x; 682 | }, 683 | ajax: function(b, u, s, f) { 684 | var x = this.getXhr(); 685 | var a = [], 686 | m = ''; 687 | if (b == 'get') { 688 | if (s.indexOf('?') > -1) { 689 | m = s + '&t=' + new Date().getTime(); 690 | } else { 691 | m = s + '?t=' + new Date().getTime(); 692 | } 693 | x.open('get', m); 694 | } else { 695 | a = s.split('?'); 696 | s = a[0], 697 | m = a[1]; 698 | x.open('post', s, true); 699 | } 700 | x.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 701 | x.setRequestHeader('charset', u); 702 | if (b == 'post') { 703 | x.send(m); 704 | } else { 705 | x.send(null); 706 | } 707 | x.onreadystatechange = function() { 708 | if (x.readyState == 4) { 709 | var g = x.responseText; 710 | if (g != '') { 711 | f(g); 712 | } else { 713 | f(null); 714 | } 715 | } 716 | } 717 | }, 718 | addListener: function(e, f) { 719 | var o=CKobject._V_; 720 | if (o.addEventListener) { 721 | try{ 722 | o.addEventListener(e, f, false); 723 | } 724 | catch (e) { 725 | this.getNot(); 726 | } 727 | } 728 | else if (o.attachEvent) { 729 | try{ 730 | o.attachEvent('on' + e, f); 731 | } 732 | catch(e){ 733 | this.getNot(); 734 | } 735 | } 736 | else { 737 | o['on' + e] = f; 738 | } 739 | }, 740 | removeListener: function( e, f) { 741 | var o=CKobject._V_; 742 | if (o.removeEventListener) { 743 | try{ 744 | o.removeEventListener(e, f, false); 745 | } 746 | catch(e){ 747 | this.getNot(); 748 | } 749 | } 750 | else if (o.detachEvent) { 751 | try{ 752 | o.detachEvent('on' + e, f); 753 | } 754 | catch(e){ 755 | this.getNot(); 756 | } 757 | } 758 | else { 759 | o['on' + e] = null; 760 | } 761 | }, 762 | Flash: function() { 763 | var f = false,v = 0; 764 | if (document.all || this.browser()['B'].toLowerCase().indexOf('ie')>-1) { 765 | try { 766 | var s = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); 767 | f = true; 768 | var z = s.GetVariable('$version'); 769 | v = parseInt(z.split(' ')[1].split(',')[0]); 770 | } catch(e) {} 771 | } else { 772 | if (navigator.plugins && navigator.plugins.length > 0) { 773 | var s = navigator.plugins['Shockwave Flash']; 774 | if (s) { 775 | f = true; 776 | var w = s.description.split(' '); 777 | for (var i = 0; i < w.length; ++i) { 778 | if (isNaN(parseInt(w[i]))) continue; 779 | v = parseInt(w[i]); 780 | } 781 | } 782 | } 783 | } 784 | return { 785 | f: f, 786 | v: v 787 | }; 788 | }, 789 | embed:function(f,d,i,w,h,b,v,e,p){ 790 | var s=['all']; 791 | if(b){ 792 | if(this.isHTML5()){ 793 | this.embedHTML5(d,i,w,h,e,v,s); 794 | } 795 | else{ 796 | this.embedSWF(f,d,i,w,h,v,p); 797 | } 798 | } 799 | else{ 800 | if(this.Flash()['f'] && parseInt(this.Flash()['v'])>10){ 801 | this.embedSWF(f,d,i,w,h,v,p); 802 | } 803 | else if(this.isHTML5()){ 804 | this.embedHTML5(d,i,w,h,e,v,s); 805 | } 806 | else{ 807 | this.embedSWF(f,d,i,w,h,v,p); 808 | } 809 | } 810 | }, 811 | embedSWF: function(C, D, N, W, H, V, P) { 812 | if (!N) { 813 | N = 'ckplayer_a1' 814 | } 815 | if (!P) { 816 | P = { 817 | bgcolor: '#FFF', 818 | allowFullScreen: true, 819 | allowScriptAccess: 'always', 820 | wmode:'transparent' 821 | }; 822 | } 823 | this._A_=V; 824 | this.getX(); 825 | var u = 'undefined', 826 | g = false, 827 | j = document, 828 | r = 'http://www.macromedia.com/go/getflashplayer', 829 | t = '请点击此处下载安装最新的flash插件', 830 | error = { 831 | w: '您的网页不符合w3c标准,无法显示播放器', 832 | f: '您没有安装flash插件,无法播放视频,' + t, 833 | v: '您的flash插件版本过低,无法播放视频,' + t 834 | }, 835 | w3c = typeof j.getElementById != u && typeof j.getElementsByTagName != u && typeof j.createElement != u, 836 | i = 'id="' + N + '" name="' + N + '" ', 837 | s = '', 838 | l = ''; 839 | P['movie'] = C; 840 | P['flashvars'] = this.getflashvars(V); 841 | if(W==-1){ 842 | d=true; 843 | this._K_(D).style.width='100%'; 844 | W='100%'; 845 | } 846 | s += ''; 858 | s += ''; 859 | if (!w3c) { 860 | l = error['w']; 861 | g = true; 862 | } else { 863 | if (!this.Flash()['f']) { 864 | l = error['f']; 865 | g = true; 866 | } else { 867 | if (this.Flash()['v'] < 10) { 868 | l = error['v']; 869 | g = true; 870 | } else { 871 | l = s; 872 | this._T_=false; 873 | } 874 | } 875 | } 876 | if (l) { 877 | this._K_(D).innerHTML = l; 878 | } 879 | if (g){ 880 | this._K_(D).style.color = '#0066cc'; 881 | this._K_(D).style.lineHeight = this._K_(D).style.height; 882 | this._K_(D).style.textAlign= 'center'; 883 | } 884 | }, 885 | embedHTML5: function(C, P, W, H, V, A, S) { 886 | this._E_ = { 887 | c: C, 888 | p: P, 889 | w: W, 890 | h: H, 891 | v: V, 892 | s: S 893 | }; 894 | this._A_ = A; 895 | this.getX(); 896 | b = this.browser()['B'], 897 | v = this.browser()['V'], 898 | x = v.split('.'), 899 | t = x[0], 900 | m = b + v, 901 | n = b + t, 902 | w = '', 903 | s = false, 904 | f = this.Flash()['f'], 905 | a = false; 906 | if (!S) { 907 | S = ['iPad', 'iPhone', 'ios']; 908 | } 909 | for (var i = 0; i < S.length; i++) { 910 | w = S[i]; 911 | if (w.toLowerCase() == 'all') { 912 | s = true; 913 | break; 914 | } 915 | if (w.toLowerCase() == 'all+false' && !f) { 916 | s = true; 917 | break; 918 | } 919 | if (w.indexOf('+') > -1) { 920 | w = w.split('+')[0]; 921 | a = true; 922 | } else { 923 | a = false; 924 | } 925 | if (this.Platform() == w || m == w || n == w || b == w) { 926 | if (a) { 927 | if (!f) { 928 | s = true; 929 | break; 930 | } 931 | }else { 932 | s = true; 933 | break; 934 | } 935 | } 936 | } 937 | if (s) { 938 | if (V) { 939 | var l = V[0].split('->'); 940 | if (l && l.length == 2 && l[1].indexOf('ajax') > -1) { 941 | this.getUrl(l, true); 942 | return; 943 | } 944 | } 945 | this.showHtml5(); 946 | } 947 | }, 948 | status: function() { 949 | this._H_ = parseInt(this.getSn('setup', 20)); 950 | var f='ckplayer_status'; 951 | if (this.getSn('calljs', 0)!='') { 952 | f=this.getSn('calljs', 0); 953 | } 954 | try { 955 | if (typeof(eval(f)) == 'function') { 956 | this._L_=eval(f); 957 | this._M_=true; 958 | return true; 959 | } 960 | } catch(e) { 961 | try { 962 | if (typeof(eval(ckplayer_status)) == 'function') { 963 | this._L_=ckplayer_status; 964 | this._M_=true; 965 | return true; 966 | } 967 | } catch(e) { 968 | return false; 969 | } 970 | } 971 | return false; 972 | }, 973 | showHtml5: function() { 974 | var C = CKobject; 975 | var p = C._E_['p'], 976 | a = C._E_['v'], 977 | c = C._E_['c'], 978 | b = false; 979 | var s = this._E_['v']; 980 | var w=C._E_['w'],h=C._E_['h']; 981 | var d=false; 982 | var r=''; 983 | if(s.length==1){ 984 | r=' src="'+s[0].split('->')[0]+'"'; 985 | } 986 | if(w==-1){ 987 | d=true; 988 | C._K_(c).style.width='100%'; 989 | w='100%'; 990 | } 991 | if(w.toString().indexOf('%')>-1){ 992 | w='100%'; 993 | } 994 | if(h.toString().indexOf('%')>-1){ 995 | h='100%'; 996 | } 997 | var v = ''; 998 | C._K_(c).innerHTML = v; 999 | 1000 | C._K_(c).style.backgroundColor = '#000'; 1001 | C._V_ = this._K_(p); 1002 | if(!d){ 1003 | C._K_(c).style.width=this._E_['w'].toString().indexOf('%')>-1?(C._K_(c).offsetWidth*parseInt(this._E_['w'])*0.01)+'px':C._V_.width+'px'; 1004 | C._K_(c).style.height=this._E_['h'].toString().indexOf('%')>-1?(C._K_(c).offsetHeight*parseInt(this._E_['h'])*0.01)+'px':C._V_.height+'px'; 1005 | } 1006 | C._P_ = false; 1007 | C._T_ = true; 1008 | if (C.getVars('loaded')!='') { 1009 | var f=C.getVars('loaded')+'()'; 1010 | try { 1011 | if (typeof(eval(f)) == 'function') { 1012 | eval(f); 1013 | } 1014 | } catch(e) { 1015 | try { 1016 | if (typeof(eval(loadedHandler)) == 'function') { 1017 | loadedHandler(); 1018 | } 1019 | } catch(e) { 1020 | } 1021 | } 1022 | } 1023 | C.status(); 1024 | C.addListener('play', C.playHandler); 1025 | C.addListener('pause', C.playHandler); 1026 | C.addListener('error', C.errorHandler); 1027 | C.addListener('emptied', C.errorHandler); 1028 | C.addListener('loadedmetadata', C.loadedMetadataHandler); 1029 | C.addListener('ended', C.endedHandler); 1030 | C.addListener('volumechange', C.volumeChangeHandler); 1031 | }, 1032 | videoPlay: function() { 1033 | if (this._T_) { 1034 | this._V_.play(); 1035 | } 1036 | }, 1037 | videoPause: function() { 1038 | if (this._T_) { 1039 | this._V_.pause(); 1040 | } 1041 | }, 1042 | playOrPause: function() { 1043 | if (this._T_) { 1044 | if (this._V_.paused) { 1045 | this._V_.play(); 1046 | } else { 1047 | this._V_.pause(); 1048 | } 1049 | } 1050 | }, 1051 | fastNext: function() { 1052 | if (this._T_) { 1053 | this._V_['currentTime'] = this._V_['currentTime'] + 10; 1054 | } 1055 | }, 1056 | fastBack: function() { 1057 | if (this._T_) { 1058 | this._V_['currentTime'] = this._V_['currentTime'] - 10; 1059 | } 1060 | }, 1061 | changeVolume: function(n) { 1062 | if (this._T_) { 1063 | this._V_['volume'] = n * 0.01; 1064 | } 1065 | }, 1066 | videoSeek: function(t) { 1067 | if (this._T_) { 1068 | this._V_['currentTime'] = t; 1069 | } 1070 | }, 1071 | newAddress: function(u) { 1072 | var s = []; 1073 | if (u) { 1074 | s = this.isHtml5New(u); 1075 | } else { 1076 | return; 1077 | } 1078 | if (s && this._T_) { 1079 | this.changeParams(u); 1080 | var l = s[0].split('->'); 1081 | if (l && l.length == 2 && l[1].indexOf('ajax') > -1) { 1082 | this.getUrl(l, false); 1083 | return; 1084 | } 1085 | this._E_['v'] = s; 1086 | this.newAdr(); 1087 | } 1088 | }, 1089 | quitFullScreen:function() { 1090 | if(document.cancelFullScreen) { 1091 | document.cancelFullScreen(); 1092 | } 1093 | else if(document.mozCancelFullScreen) { 1094 | document.mozCancelFullScreen(); 1095 | } else if(document.webkitCancelFullScreen) { 1096 | document.webkitCancelFullScreen(); 1097 | } 1098 | 1099 | }, 1100 | changeStatus:function(n){ 1101 | this._H_=n; 1102 | }, 1103 | newAdr: function() { 1104 | var s = this._E_['v']; 1105 | this._V_.pause(); 1106 | if(s.length==1){ 1107 | this._V_.src=s[0].split('->')[0]; 1108 | } 1109 | else{ 1110 | this._V_['innerHTML'] = this.getVideo(); 1111 | } 1112 | this._V_.load(); 1113 | }, 1114 | isHtml5New: function(s) { 1115 | if (s.indexOf('html5') == -1) { 1116 | return false; 1117 | } 1118 | var a = s.replace(/{/g, ''); 1119 | var b = a.split('}'); 1120 | var c = ''; 1121 | for (var i = 0; i < b.length; i++) { 1122 | if (b[i].indexOf('html5') > -1) { 1123 | c = b[i].replace('html5->', '').split(','); 1124 | break; 1125 | } 1126 | } 1127 | return c; 1128 | }, 1129 | changeParams: function(f) { 1130 | if (f) { 1131 | var a = f.replace(/{/g, ''); 1132 | var b = a.split('}'); 1133 | var c = ''; 1134 | for (var i = 0; i < b.length; i++) { 1135 | var d = b[i].split('->'); 1136 | if(d.length == 2){ 1137 | switch(d[0]){ 1138 | case 'p': 1139 | if(parseInt(d[1]) == 1){ 1140 | this._V_.autoplay = true; 1141 | } 1142 | else if(parseInt(d[1]) == 2){ 1143 | this._V_.preload = 'metadata'; 1144 | } 1145 | else{ 1146 | this._V_.autoplay = false; 1147 | if(this._I_!=null){ 1148 | clearInterval(this._I_); 1149 | this._I_=null; 1150 | } 1151 | } 1152 | break; 1153 | case 'e': 1154 | if(parseInt(d[1]) == 1){ 1155 | this._V_.loop = true; 1156 | } 1157 | else{ 1158 | this._V_.loop = false; 1159 | } 1160 | break; 1161 | case 'i': 1162 | this._V_.poster = d[1]; 1163 | break; 1164 | default: 1165 | break; 1166 | } 1167 | } 1168 | } 1169 | } 1170 | }, 1171 | frontAdPause: function(s) { 1172 | this.getNot(); 1173 | }, 1174 | frontAdUnload: function() { 1175 | this.getNot(); 1176 | }, 1177 | changeFace: function(s) { 1178 | this.getNot(); 1179 | }, 1180 | plugin: function(a, b, c, d, e, f, g) { 1181 | this.getNot(); 1182 | }, 1183 | videoClear: function() { 1184 | this.getNot(); 1185 | }, 1186 | videoBrightness: function(s) { 1187 | this.getNot(); 1188 | }, 1189 | videoContrast: function(s) { 1190 | this.getNot(); 1191 | }, 1192 | videoSaturation: function(s) { 1193 | this.getNot(); 1194 | }, 1195 | videoSetHue: function(s) { 1196 | this.getNot(); 1197 | }, 1198 | videoWAndH: function(a, b) { 1199 | this.getNot(); 1200 | }, 1201 | videoWHXY: function(a, b, c, d) { 1202 | this.getNot(); 1203 | }, 1204 | changeFlashvars: function(a) { 1205 | this.getNot(); 1206 | }, 1207 | changeMyObject: function(a, b) { 1208 | this.getNot(); 1209 | }, 1210 | getMyObject: function(a, b) { 1211 | this.getNot(); 1212 | }, 1213 | changeeFace: function() { 1214 | this.getNot(); 1215 | }, 1216 | changeStyle: function(a, b) { 1217 | this.getNot(); 1218 | }, 1219 | promptLoad: function() { 1220 | this.getNot(); 1221 | }, 1222 | promptUnload: function() { 1223 | this.getNot(); 1224 | }, 1225 | marqueeLoad: function(a,b) { 1226 | this.getNot(); 1227 | }, 1228 | marqueeClose: function(s) { 1229 | this.getNot(); 1230 | }, 1231 | getNot: function() { 1232 | var s='The ckplayer\'s API for HTML5 does not exist'; 1233 | return s; 1234 | }, 1235 | volumeChangeHandler: function() { 1236 | var C = CKobject; 1237 | if (C._V_.muted) { 1238 | C.returnStatus('volumechange:0', 1); 1239 | C._O_['volume'] = 0; 1240 | C._O_['mute'] = true; 1241 | } else { 1242 | C._O_['mute'] = false; 1243 | C._O_['volume'] = C._V_['volume'] * 100; 1244 | C.returnStatus('volumechange:'+C._V_['volume'] * 100, 1); 1245 | } 1246 | }, 1247 | endedHandler: function() { 1248 | var C = CKobject; 1249 | var e=parseInt(C.getVars('e')); 1250 | C.returnStatus('ended', 1); 1251 | if(C._I_){ 1252 | clearInterval(C._I_); 1253 | C._I_=null; 1254 | } 1255 | if ( e!= 0 && e !=4 && e !=6) { 1256 | return; 1257 | } 1258 | if(e==6){ 1259 | this.quitFullScreen(); 1260 | } 1261 | var f='playerstop()'; 1262 | if (C.getSn('calljs', 2)!='') { 1263 | f=C.getSn('calljs', 2)+'()'; 1264 | } 1265 | try { 1266 | if (typeof(eval(f)) == 'function') { 1267 | eval(f); 1268 | return; 1269 | } 1270 | } catch(e) { 1271 | try { 1272 | if (typeof(eval(playerstop)) == 'function') { 1273 | playerstop(); 1274 | return; 1275 | } 1276 | } catch(e) { 1277 | return; 1278 | } 1279 | } 1280 | }, 1281 | loadedMetadataHandler: function() { 1282 | var C = CKobject; 1283 | C.returnStatus('loadedmetadata', 1); 1284 | C._O_['totaltime'] = C._V_['duration']; 1285 | C._O_['width'] = C._V_['width']; 1286 | C._O_['height'] = C._V_['height']; 1287 | C._O_['awidth'] = C._V_['videoWidth']; 1288 | C._O_['aheight'] = C._V_['videoHeight']; 1289 | if (C._V_.defaultMuted) { 1290 | C.returnStatus('volumechange:0', 1); 1291 | C._O_['mute'] = true; 1292 | C._O_['volume'] = 0; 1293 | } else { 1294 | C._O_['mute'] = false; 1295 | C._O_['volume'] = C._V_['volume'] * 100; 1296 | C.returnStatus('volumechange:'+C._V_['volume'] * 100, 1); 1297 | } 1298 | }, 1299 | errorHandler: function() { 1300 | CKobject.returnStatus('error', 1); 1301 | }, 1302 | playHandler: function() { 1303 | var C = CKobject; 1304 | if (C._V_.paused) { 1305 | C.returnStatus('pause', 1); 1306 | C.addO('play', false); 1307 | if(C._I_!=null){ 1308 | clearInterval(C._I_); 1309 | C._I_=null; 1310 | } 1311 | } else { 1312 | C.returnStatus('play', 1); 1313 | C.addO('play', true); 1314 | if (!C._P_) { 1315 | C.returnStatus('play', 1); 1316 | C._P_ = true; 1317 | } 1318 | C._I_ = setInterval(C.playTime, parseInt( C.getSn('setup', 37))); 1319 | if(!C._G_){ 1320 | C._G_=true; 1321 | for(var k in C._A_){ 1322 | if(k=='g' && C._A_[k]){ 1323 | var g=parseInt(C._A_[k]); 1324 | C.videoSeek(g); 1325 | } 1326 | } 1327 | } 1328 | if(!C._Y_){ 1329 | C._Y_=true; 1330 | for(var k in C._A_){ 1331 | if(k=='j' && C._A_[k]){ 1332 | var j=parseInt(C._A_[k]); 1333 | if(j>0){ 1334 | C._J_=j; 1335 | } 1336 | else{ 1337 | C._J_=parseInt(C._O_['totaltime'])+j; 1338 | } 1339 | } 1340 | } 1341 | } 1342 | } 1343 | }, 1344 | returnStatus: function(s, j) { 1345 | var h = s; 1346 | if (this._H_ == 3) { 1347 | h = this._E_['p'] +'->'+ h; 1348 | } 1349 | if (this._M_ && j <= this._H_ ) { 1350 | this._L_(h); 1351 | } 1352 | }, 1353 | addO: function(s, z) { 1354 | this._O_[s] = z; 1355 | }, 1356 | getStatus: function() { 1357 | return this._O_; 1358 | }, 1359 | playTime: function() { 1360 | var C = CKobject; 1361 | var t = C._V_['currentTime']; 1362 | C._O_['time'] = t; 1363 | if(C._J_>0 && t>C._J_){ 1364 | C._J_=0; 1365 | C.videoSeek(C._O_['totaltime']); 1366 | } 1367 | C.returnStatus('time:' + t, 1); 1368 | } 1369 | } 1370 | window.CKobject = CKobject; 1371 | })(); --------------------------------------------------------------------------------