videoplayer-fixed.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697
  1. /**
  2. * 解密原生的videoplayer.js插件,主要解决微信无法播放全景视频的问题
  3. * @Author 720yun 133965799#qq.com
  4. */
  5. var krpanoplugin = function() {
  6. function R(a) {
  7. return "boolean" == typeof a ? a : 0 <= "yesontrue1".indexOf(String(a).toLowerCase())
  8. }
  9. function d(a, b, d, r, f) {
  10. 3 == a || 4 == a || 5 == a ? c[b] = d : c.registerattribute(b, d, r, f);
  11. I.push(b)
  12. }
  13. function l(a, c, b, d) {
  14. a.addEventListener(c, b, d);
  15. J.push({
  16. obj: a,
  17. eventname: c,
  18. callback: b,
  19. capture: d
  20. })
  21. }
  22. function D(a) {
  23. var c, b = J.length,
  24. d;
  25. for (c = 0; c < b; c++) if (d = J[c], null == a || d.obj === a) d.obj.removeEventListener(d.eventname, d.callback, d.capture), J.splice(c, 1), c--, b--
  26. }
  27. function la() {
  28. function a(a) {
  29. p = !0;
  30. 0 < n && (q.seek(n), n = -1)
  31. }
  32. function d(a) {
  33. f && e && (S(e.src + " - loading failed"), e = null)
  34. }
  35. function g(a) {
  36. 0 == x && (y(), q.paused = u = !0, E(null), 0 == c.iscomplete && (c.iscomplete = !0, h.call(c.onvideocomplete, c)))
  37. }
  38. function r() {
  39. if (f && b && !(2 > b.readyState)) {
  40. var a = h.timertick,
  41. d = 0,
  42. v = Number(b.duration);
  43. isNaN(v) || 0 >= v || (e ? (u && !e.paused ? e.pause() : !u && e.paused && e.play(), d = e.currentTime) : u ? d = w : (0 == z && (z = a), d = w + F * Math.max(0, (a - z) / 1E3)), d >= v - .02 ? (d = v, x ? (w = 0, z = a + .1, e && (e.currentTime = 0)) : (y(), q.paused = u = !0, E(null), 0 == c.iscomplete && (c.iscomplete = !0, h.call(c.onvideocomplete, c)))) : c.iscomplete = !1, A = d, .01 < Math.abs(b.currentTime - A) && (b.currentTime = Number(A.toFixed(2))), b.autoplay = !0)
  44. }
  45. }
  46. var q = this,
  47. u = q.paused = !0,
  48. m = null,
  49. e = null,
  50. k = null,
  51. p = !1,
  52. n = -1,
  53. z = 0,
  54. w = 0;
  55. (function() {
  56. if (!0 !== window.krpanoHideiPhoneMediaControlsStyle) {
  57. window.krpanoHideiPhoneMediaControlsStyle = !0;
  58. var a = document.createElement("style");
  59. a.type = "text/css";
  60. a.innerHTML = "*::-webkit-media-controls-panel{display: none!important;-webkit-appearance:none;} *::--webkit-media-controls-play-button{display: none!important;-webkit-appearance:none;} *::-webkit-media-controls-start-playback-button{display: none!important;-webkit-appearance:none;}";
  61. document.getElementsByTagName("head")[0].appendChild(a)
  62. }
  63. })();
  64. q.start = function() {
  65. c.iPhoneMode = !0;
  66. b.autoplay = !0;
  67. b.pause();
  68. b.style.webkitMediaControls = !1;
  69. var f = X(c.videourl, ["m4a", "mp3"]),
  70. f = h.parsePath(f);
  71. n = -1;
  72. f ? (null == e && (k ? (e = k, k = null) : e = document.createElement("audio")), D(e), l(e, "canplay", a, !0), l(e, "error", d, !0), l(e, "ended", g, !0), e.loop = x, p = e.autoplay = !1, e.src = f, e.load(), e.pause()) : e && (e.src && (e.pause(), k = e), e = null);
  73. z = w = 0;
  74. u = c.pausedonstart;
  75. q.paused = u;
  76. m = setInterval(r, 1E3 / 60);
  77. b.currentTime = 0
  78. };
  79. q.play_audio = function() {
  80. e && e.play()
  81. };
  82. q.play = function() {
  83. 1 == u && (u = q.paused = !1, c.iscomplete ? (c.iscomplete = !1, w = 0, e && (e.currentTime = 0)) : w = b.currentTime, z = h.timertick + .1, e && e.play(), E(null))
  84. };
  85. q.pause = function() {
  86. 0 == u && (e && e.pause(), w = b.currentTime, u = q.paused = !0, E(null))
  87. };
  88. q.seek = function(a) {
  89. e ? p ? (e.currentTime = a, n = -1) : n = a : (n = -1, z = 0, w = a)
  90. };
  91. q.remove = function() {
  92. m && (clearInterval(m), m = null);
  93. e && (e.src && (e.pause(), k = e), e = null)
  94. };
  95. q.setplaybackrate = function(a) {
  96. if (e) try {
  97. e.playbackRate = a
  98. } catch (c) {}
  99. };
  100. q.setloop = function(a) {
  101. e && (e.loop = a)
  102. };
  103. q.need_touchstart_play = function() {
  104. return null != e && e.paused
  105. };
  106. q.try_touchstart_play = function() {
  107. return e ? (e.play(), 0 == e.paused) : !0
  108. }
  109. }
  110. function S(a) {
  111. var b = c ? c.onerror : null;
  112. null != b && "" != b && "null" != ("" + b).toLowerCase() ? (c.videoerror = a, h.call(b, c)) : h.trace(3, a + "!")
  113. }
  114. function Y(a) {
  115. a = a.style;
  116. a.pointerEvents = "none";
  117. a.position = "absolute";
  118. a.width = "100%";
  119. a.height = "100%";
  120. a.left = 0;
  121. a.top = 0;
  122. a.opacity = 1;
  123. a.backgroundColor = "transparent";
  124. a[G] = "translateZ(0)";
  125. a[G + "Origin"] = "0 0"
  126. }
  127. /**
  128. * 创建video的DOM对象
  129. * @return {[type]} [description]
  130. */
  131. function createVideo() {
  132. var a = null,
  133. a = document.createElement("video");
  134. if (!a || !a.play) return null;
  135. Y(a);
  136. return a
  137. }
  138. function T(a) {
  139. c && (a = document.visibilityState, !0 === document.hidden || "hidden" == a || "prerender" == a || "unloaded" == a ? 0 == c.ispaused && c.autopause && 0 == c.isautopaused && (c.isautopaused = !0, y()) : c.autoresume && c.isautopaused && (c.isautopaused = !1, K()))
  140. }
  141. function aa(a, b) {
  142. c.registercontentsize(a, b);
  143. c.forceresize = !0;
  144. c.videowidth = a;
  145. c.videoheight = b;
  146. c.havevideosize = !0;
  147. // h.trace(2, "aa");
  148. c.isvideoready = !0;
  149. if (c.onvideoreadyCB) c.onvideoreadyCB();
  150. h.call(c.onvideoready, c)
  151. }
  152. function X(a, b) {
  153. B = null;
  154. var d = ("" + a).split("|");
  155. if (1 < d.length || b) {
  156. var f = p;
  157. b && (f = b);
  158. var g = f.length,
  159. l = d.length,
  160. h, e, k = [];
  161. for (h = 0; h < l; h++) if (e = d[h]) {
  162. var m = e;
  163. if (0 != e.indexOf("rtmp:")) {
  164. var n = e.indexOf("?");
  165. 0 < n && (e = e.slice(0, n));
  166. n = e.indexOf("#");
  167. 0 < n && (e = e.slice(0, n));
  168. n = e.lastIndexOf(".");
  169. if (1 < n) for (n = ("" + e.slice(n + 1)).toLowerCase(), e = 0; e < g; e++) if (n == f[e]) {
  170. if (b) return m;
  171. k.push({
  172. type: n,
  173. inorder: h,
  174. url: m,
  175. used: !1
  176. });
  177. break
  178. }
  179. }
  180. }
  181. if (b) return null;
  182. if (0 < k.length) return "" != c.preferredformat && k.sort(function(a, b) {
  183. var d = a.type,
  184. e = b.type,
  185. f = "m3u" == d || "m3u8" == d ? 0 : "mp4" == d || "m4v" == d ? 1 : "webm" == d ? 2 : 3,
  186. v = "m3u" == e || "m3u8" == e ? 0 : "mp4" == e || "m4v" == e ? 1 : "webm" == e ? 2 : 3,
  187. g = ("" + c.preferredformat).toLowerCase();
  188. "" != g && (d == g && (f = -1), e == g && (v = -1));
  189. return f > v ? 1 : f < v ? -1 : a.inorder > b.inorder ? 1 : a.inorder < b.inorder ? -1 : 0
  190. }), B = k, ba()
  191. }
  192. return a
  193. }
  194. function ba() {
  195. if (B) {
  196. var a, b;
  197. b = B.length;
  198. for (a = 0; a < b; a++) if (0 == B[a].used) return B[a].used = !0, B[a].url
  199. }
  200. return null
  201. }
  202. function U(a, b) {
  203. var c = !0;
  204. if (!m.android || !m.chrome) {
  205. var d = b.indexOf("://");
  206. if (0 < d) {
  207. var f = document.domain,
  208. d = b.slice(d + 3, b.indexOf("/", d + 3));
  209. f == d && (c = !1)
  210. }
  211. }
  212. c && ((c = h.security.cors) && "" != c || (c = "anonymous"), a.crossOrigin = c)
  213. }
  214. /**
  215. * playvideo(videourl, posturl, pausedonstart, starttime)
  216. * @param {String} a [description]
  217. * @param {String} d [description]
  218. * @param {Boolean} k [description]
  219. * @param {Number} r [description]
  220. * @return {[type]} [description]
  221. */
  222. function ca(a, d, k, r) {
  223. c.videourl = void 0 === a || null == a || "" == a || "null" == ("" + a).toLowerCase() ? null : a;
  224. c.posterurl = void 0 === d || null == d || "" == d || "null" == ("" + d).toLowerCase() ? null : d;
  225. c.pausedonstart = R(k);
  226. r = Number(r);
  227. if (isNaN(r) || 0 > r) r = 0;
  228. A = r;
  229. H = 0 < r ? r : -1;
  230. a = X(c.videourl);
  231. C = a = h.parsePath(a);
  232. // h.trace(2, "ca");
  233. c.isvideoready = !1;
  234. c.havevideosize = !1;
  235. c.isautopaused = !1;
  236. c.isseeking = 0 < H && null == f;
  237. c.iscomplete = !1;
  238. c.ispaused = !0;
  239. c.loadedbytes = 0;
  240. c.totalbytes = 0;
  241. c.totaltime = 0;
  242. c.videoerror = "";
  243. // a 为视频地址
  244. if(null != a){
  245. if(b && b.src){
  246. f ? f.pause() : b.pause()
  247. }else{
  248. null == b && (b = createVideo(), c.videoDOM = b)
  249. }
  250. if(c.posterurl && (c.pausedonstart || m.mobile || m.tablet)){
  251. if(null == g){
  252. g = document.createElement("img")
  253. l(g, "error", ma, !1)
  254. l(g, "load", na, !1)
  255. }
  256. a = c.posterurl
  257. V = a = h.parsePath(a)
  258. U(g, a)
  259. g.src = a
  260. }else{
  261. da()
  262. }
  263. }
  264. }
  265. function ma(a) {
  266. b && S(V + " - loading failed")
  267. }
  268. function na(a) {
  269. if (b) {
  270. a = g.naturalWidth;
  271. var d = g.naturalHeight;
  272. Y(g);
  273. c.sprite && (c.sprite.appendChild(g), Array.prototype.indexOf.call(g.parentNode.children, g));
  274. c.posterDOM = g;
  275. aa(a, d);
  276. da()
  277. }
  278. }
  279. function da() {
  280. D(b);
  281. t && (clearInterval(t), t = null);
  282. f && f.remove();
  283. l(b, "loadedmetadata", k, !1);
  284. l(b, "loadeddata", k, !1);
  285. l(b, "canplay", k, !1);
  286. l(b, "canplaythrough", k, !1);
  287. l(b, "play", k, !1);
  288. l(b, "pause", k, !1);
  289. l(b, "playing", k, !1);
  290. l(b, "seeking", k, !1);
  291. l(b, "waiting", k, !1);
  292. l(b, "seeked", k, !1);
  293. l(b, "stalled", k, !1);
  294. l(b, "suspend", k, !1);
  295. l(b, "ended", k, !1);
  296. l(b, "timeupdate", k, !1);
  297. l(b, "progress", L, !1);
  298. m.ios && (t = setInterval(L, 500));
  299. l(b, "error", oa, !1);
  300. b.loop = c.loop;
  301. b.autoplay = c.pausedonstart ? !1 : !0;
  302. b.preload = c.html5preload;
  303. b.controls = c.html5controls;
  304. b.setAttribute("playsinline", "");
  305. b.setAttribute("webkit-playsinline", "");
  306. // 安卓微信、QQ弹出播放问题
  307. b.setAttribute('x5-video-player-type', 'h5')
  308. ea(M);
  309. fa(N);
  310. ga(F);
  311. ha(O);
  312. U(b, C);
  313. b.src = C;
  314. b.load();
  315. f ? f.start() : c.pausedonstart ? b.pause() : b.play()
  316. }
  317. function oa(a) {
  318. if (b) {
  319. a = null;
  320. a = b.error ? b.error.code : 0;
  321. if (3 <= a) {
  322. var c = ba();
  323. if (c) {
  324. C = a = h.parsePath(c);
  325. U(b, C);
  326. b.src = C;
  327. b.load();
  328. return
  329. }
  330. }
  331. switch (a) {
  332. case 1:
  333. a = "video loading aborted";
  334. break;
  335. case 2:
  336. a = "network loading error";
  337. break;
  338. case 3:
  339. a = "video decoding failed (corrupted data or unsupported codec)";
  340. break;
  341. case 4:
  342. a = "loading video failed";
  343. break;
  344. default:
  345. a = "unknown error"
  346. }
  347. a && S(C + " - " + a)
  348. }
  349. }
  350. function L(a) {
  351. null != t && a && "progress" == a.type && (clearInterval(t), t = null);
  352. if (b && b.buffered) {
  353. var d, f;
  354. d = b.buffered.length;
  355. f = b.duration;
  356. if (0 < f && (c.totaltime = f, 0 < d)) {
  357. var g = 0;
  358. for (a = 0; a < d; a++) {
  359. var h = b.buffered.end(a);
  360. h > g && (g = h)
  361. }
  362. c.loadedbytes = 1048576 * g | 0;
  363. c.totalbytes = 1048576 * f | 0
  364. }
  365. }
  366. }
  367. /**
  368. * 事件回调
  369. * @param {[type]} a [description]
  370. * @return {[type]} [description]
  371. */
  372. function k(a) {
  373. // h.trace(0, a.type)
  374. if (b) switch (a.type) {
  375. case "loadedmetadata":
  376. case "loadeddata":
  377. // h.trace(2, "loadeddata")
  378. 0 < H && (P(H), H = -1);
  379. L();
  380. a = b.videoWidth;
  381. var d = b.videoHeight;
  382. 0 == c.havevideosize && 0 < a && 0 < d && aa(a, d);
  383. // h.trace(0, a)
  384. // 未读取到视频宽度,m3u8格式默认第一次读取不到
  385. if(! (a > 0)){
  386. // 继续读取
  387. setTimeout(function(){
  388. k({type: 'loadedmetadata'})
  389. }, 100)
  390. }
  391. break;
  392. case "canplay":
  393. case "canplaythrough":
  394. L();
  395. null == f ? 0 == c.pausedonstart && b.paused && (b.play(), W()) : 0 == c.pausedonstart && f.need_touchstart_play() && (f.play_audio(), W());
  396. break;
  397. case "seeking":
  398. case "seeked":
  399. c.isseeking = f ? !1 : "seeking" == a.type;
  400. case "play":
  401. case "pause":
  402. case "playing":
  403. case "waiting":
  404. case "stalled":
  405. case "suspend":
  406. case "ended":
  407. case "timeupdate":
  408. E(a)
  409. }
  410. }
  411. function E(a) {
  412. a = !1;
  413. g && 2 <= b.readyState && (0 == b.paused || f && 0 == f.paused) && (a = !0, m.chromemobile && 0 == b.currentTime && (a = !1));
  414. a && (D(g), g.parentNode && g.parentNode.removeChild(g), g = V = c.posterDOM = null);
  415. c.isvideoready && (a = f ? f : b, c.ispaused != a.paused && (0 == a.paused ? (c.ispaused = !1, h.call(c.onvideoplay, c)) : (c.ispaused = !0, h.call(c.onvideopaused, c))), null == f && c.iscomplete != b.ended && (1 == b.ended ? (y(), 0 == c.iscomplete && (c.iscomplete = !0, h.call(c.onvideocomplete, c))) : c.iscomplete = !1))
  416. }
  417. function W() {
  418. m.touch && (b.paused && !f || f && f.need_touchstart_play()) && 0 == Q && (Q = !0, c.touchworkarounds && (l(document.body, "touchstart", ia, !0), l(document.body, "touchend", ia, !0)), c.needtouch = !0, h.call(c.onneedtouch, c))
  419. }
  420. function ja() {
  421. Q && (Q = !1, D(document.body), c.needtouch = !1, h.call(c.ongottouch, c))
  422. }
  423. function ia(a) {
  424. b && (a = !1, f ? a = f.try_touchstart_play() : (b.play(), a = 0 == b.paused), a && ja())
  425. }
  426. function pa(a) {
  427. x = R(a);
  428. b && (b.loop = x);
  429. f && f.setloop(a)
  430. }
  431. function qa() {
  432. return x
  433. }
  434. function ra(a) {
  435. P(a)
  436. }
  437. function sa() {
  438. if (b) {
  439. var a = Number(b.currentTime);
  440. if (!isNaN(a)) return a
  441. }
  442. return A
  443. }
  444. function ea(a) {
  445. a = Number(a);
  446. isNaN(a) ? a = 1 : 0 > a ? a = 0 : 1 < a && (a = 1);
  447. M = a;
  448. b && (b.volume = a)
  449. }
  450. function ta() {
  451. return M
  452. }
  453. function fa(a) {
  454. N = a;
  455. b && (b.muted = a)
  456. }
  457. function ua() {
  458. return N
  459. }
  460. function ga(a) {
  461. a = Number(a);
  462. if (isNaN(a) || 0 == a) a = 1;
  463. F = a;
  464. if (b) try {
  465. b.playbackRate = a
  466. } catch (c) {}
  467. f && f.setplaybackrate(a)
  468. }
  469. function va() {
  470. return F
  471. }
  472. function ha(a) {
  473. O = a = R(a);
  474. b && m.safari && (b.airplay = b["x-webkit-airplay"] = a ? "allow" : "disallow")
  475. }
  476. function wa() {
  477. return O
  478. }
  479. function K() {
  480. f ? f.play() : b && b.play();
  481. c.pausedonstart = !1;
  482. W()
  483. }
  484. function y() {
  485. f ? f.pause() : b && b.pause();
  486. c.pausedonstart = !0;
  487. ja()
  488. }
  489. function xa() {
  490. b && (0 == b.paused || f && 0 == f.paused ? y() : K())
  491. }
  492. function P(a) {
  493. if (b && b.src) {
  494. var c = 0,
  495. c = 0 < ("" + a).indexOf("%") && 0 < b.duration ? parseFloat(a) / 100 * b.duration : Number(a);
  496. isNaN(c) || (f ? f.seek(c) : b.currentTime = c)
  497. }
  498. }
  499. function ya() {
  500. P(0);
  501. y()
  502. }
  503. function ka() {
  504. // h.trace(2, "ka")
  505. b && (b.pause(), f && f.remove(), D(b), g && g.parentNode && g.parentNode.removeChild(g), b && b.parentNode && b.parentNode.removeChild(b), c.videoDOM = null, c.posterDOM = null, c.iPhoneMode = !1, b = g = null, c.videourl = null, c.isvideoready = !1, c.ispaused = !0, c.iscomplete = !1, c.isseeking = !1, c.isautopaused = !1, c.havevideosize = !1, c.videowidth = 0, c.videoheight = 0, c.loadedbytes = 0, c.totalbytes = 0, c.totaltime = 0, c.videoerror = "", A = 0)
  506. }
  507. this.name = "Videoplayer";
  508. this.version = "1.19-pr7";
  509. this.build = "2016-09-09";
  510. var h = null, // krpanointerface
  511. m = null, // krpanointerface.devices
  512. c = null, // video对象
  513. b = null,
  514. g = null,
  515. V = null,
  516. C = null,
  517. B = null,
  518. p = [],
  519. G = "transform",
  520. f = null,
  521. H = -1,
  522. Q = !1,
  523. t = null,
  524. x = !1,
  525. M = 1,
  526. N = !1,
  527. F = 1,
  528. O = !1,
  529. A = 0,
  530. I = [],
  531. J = [];
  532. // krpanointerface, pluginpath, pluginobject
  533. this.registerplugin = function(krpanointerface, pluginpath, pluginobject) {
  534. h = krpanointerface;
  535. m = h.device;
  536. c = pluginobject;
  537. if("1.19" > h.version || "2015-03-01" > h.build){
  538. h.trace(3, "Videoplayer plugin - too old krpano version (min. 1.19)")
  539. }else{
  540. G = h.browser.css.transform
  541. if(b = createVideo()){
  542. if(void 0 !== b.canPlayType){
  543. //支持canPlayType判断可播放格式
  544. (b.canPlayType("video/mp4").match(/maybe|probably/i) && (p.push("mp4"), p.push("m4v"), p.push("mov"), p.push("3gp")), b.canPlayType("video/webm").match(/maybe|probably/i) && p.push("webm"), b.canPlayType("video/ogg").match(/maybe|probably/i) && (p.push("ogg"), p.push("ogv")), b.canPlayType("video/hls").match(/maybe|probably/i) && (p.push("m3u"), p.push("m3u8")))
  545. }else{
  546. // 默认允许mp4和mov
  547. (p.push("mp4"), p.push("mov"))
  548. }
  549. d(0, "videourl", null)
  550. d(0, "altvideourl", null)
  551. d(0, "posterurl", null)
  552. d(0, "panovideo", !1)
  553. d(0, "use_as_videopano", !1)
  554. d(0, "pausedonstart", !1)
  555. d(0, "autopause", !0)
  556. d(0, "autoresume", !1)
  557. d(0, "preferredformat", "")
  558. d(0, "iphoneworkarounds", !0)
  559. d(0, "touchworkarounds", !0)
  560. d(0, "html5controls", !1)
  561. d(0, "html5preload", "auto")
  562. d(1, "loop", x, pa, qa)
  563. d(1, "time", A, ra, sa)
  564. d(1, "volume", M, ea, ta)
  565. d(1, "muted", N, fa, ua)
  566. d(1, "playbackrate", F, ga, va)
  567. d(1, "airplay", O, ha, wa)
  568. d(2, "onvideoready", null)
  569. d(2, "onvideoplay", null)
  570. d(2, "onvideopaused", null)
  571. d(2, "onvideocomplete", null)
  572. d(2, "onerror", null)
  573. d(2, "onneedtouch", null)
  574. d(2, "ongottouch", null)
  575. d(3, "playvideo", ca)
  576. d(3, "play", K)
  577. d(3, "resume", K)
  578. d(3, "pause", y)
  579. d(3, "togglepause", xa)
  580. d(3, "seek", P)
  581. d(3, "stop", ya)
  582. d(3, "closevideo", ka)
  583. d(4, "isvideoready", !1)
  584. d(4, "iswaiting", !1)
  585. d(4, "ispaused", !0)
  586. d(4, "iscomplete", !1)
  587. d(4, "isseeking", !1)
  588. d(4, "isautopaused", !1)
  589. d(4, "havevideosize", !1)
  590. d(4, "needtouch", !1)
  591. d(4, "videowidth", 0)
  592. d(4, "videoheight", 0)
  593. d(4, "loadedbytes", 0)
  594. d(4, "totalbytes", 0)
  595. d(4, "totaltime", 0)
  596. d(4, "videoerror", "")
  597. d(5, "videoDOM", b)
  598. d(5, "posterDOM", g)
  599. d(5, "iPhoneMode", !1)
  600. l(window, "pagehide", T, !1)
  601. l(window, "pageshow", T, !1)
  602. l(document, "visibilitychange", T, !1)
  603. a = m.ios && 10 <= m.iosversion
  604. m.iphone && 1 == c.iphoneworkarounds && 0 == a && (f = new la)
  605. c.sprite && (0 == c.use_as_videopano && 0 == c.panovideo || !m.panovideosupport) && !0 !== c.renderToBitmap && (c.sprite.appendChild(b), Array.prototype.indexOf.call(b.parentNode.children, b))
  606. ca(c.altvideourl ? c.altvideourl : c.videourl, c.posterurl, c.pausedonstart, c.time)
  607. }else{
  608. h.trace(2, "Videoplayer plugin - HTML5 video is not supported by this browser!")
  609. }
  610. var canvas = document.getElementById("krpanoSWFObject").getElementsByTagName('canvas')[0];
  611. canvas.onresize = function(event){
  612. var intvalListener = setInterval(function(){
  613. if(canvas.parentElement.parentElement.parentElement.style.width == '100%'){
  614. clearInterval(intvalListener);
  615. }
  616. canvas.style.width = '100%';
  617. canvas.style.height = '100%';
  618. canvas.parentElement.parentElement.style.width = '100%';
  619. canvas.parentElement.parentElement.style.height = '100%';
  620. canvas.parentElement.parentElement.parentElement.style.width = '100%';
  621. canvas.parentElement.parentElement.parentElement.style.height = '100%';
  622. },50);
  623. }
  624. }
  625. };
  626. this.unloadplugin = function() {
  627. ka();
  628. var a, b = I.length;
  629. for (a = 0; a < b; a++) delete c[I[a]];
  630. I = null;
  631. D(null);
  632. t && (clearInterval(t), t = null);
  633. h = m = c = null
  634. };
  635. this.onresize = function(a, d) {
  636. if (b && c && !0 !== c.renderToBitmap) {
  637. var f = b.videoWidth,
  638. l = b.videoHeight;
  639. if (0 < f && 0 < l) {
  640. var k = f + "px",
  641. m = l + "px",
  642. p = "hotspot" == c._type && c.distorted ? 1 : h.stagescale,
  643. f = "translateZ(0) scale(" + a * p / f + "," + d * p / l + ")";
  644. g && (k != g.style.width && (g.style.width = k), m != g.style.width && (g.style.height = m), g.style[G] = f);
  645. k != b.style.width && (b.style.width = k);
  646. m != b.style.height && (b.style.height = m);
  647. b.style[G] = f
  648. }
  649. }
  650. return !1
  651. }
  652. };