videoPlayer.js 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. var instances = [];
  2. function secondsToTime(secs) {
  3. var minutes = Math.floor(secs / 60);
  4. var seconds = Math.floor(secs % 60);
  5. if (isNaN(minutes)) minutes = 0;
  6. if (isNaN(seconds)) seconds = 0;
  7. if (minutes < 0) minutes = 0;
  8. if (seconds < 0) seconds = 0;
  9. if (seconds < 10) seconds = "0" + seconds;
  10. if (minutes < 10) minutes = "0" + minutes;
  11. var obj = {
  12. "m": minutes,
  13. "s": seconds,
  14. };
  15. return obj;
  16. }
  17. $(document).on("change", ".p5VideoPlayer_zakres", function(slideEvt) {
  18. //console.log("test");
  19. var player = $(this).closest(".p5VideoPlayer")
  20. var start = $(player).data("start")
  21. var end = $(player).find('.p5VideoPlayer_vid')[0].duration - $(player).data("end")
  22. $(player).find('.p5VideoPlayer_vid')[0].currentTime = slideEvt.value.newValue * ($(player).find('.p5VideoPlayer_vid')[0].duration - start - end) * 0.01 + start
  23. });
  24. function videoPlayer_updateProgress(player, id) {
  25. if(!jQuery.contains(document, $(player)[0])){
  26. clearInterval(instances[id]["INTERVAL"])
  27. return
  28. }
  29. var start = $(player).data("start")
  30. var end = $(player).data("end")
  31. var current = $(player).find('.p5VideoPlayer_vid')[0].currentTime - start;
  32. var video = $(player).find(".p5VideoPlayer_vid");
  33. end = $(player).find('.p5VideoPlayer_vid')[0].duration - end
  34. var duration = $(player).find('.p5VideoPlayer_vid')[0].duration - start - end;
  35. var result = (current / duration)
  36. $(player).find(".p5VideoPlayer_zakres").slider('setValue', result * 100)
  37. var currentObj = secondsToTime(current);
  38. var durationObj = secondsToTime(duration);
  39. $(player).find(".p5VideoPlayer_current").text(currentObj.m + ":" + currentObj.s);
  40. $(player).find(".p5VideoPlayer_duration").text(durationObj.m + ":" + durationObj.s);
  41. if (current < 0) {
  42. $(player).find('.p5VideoPlayer_vid')[0].currentTime = start;
  43. }
  44. if (current >= duration) {
  45. $(player).find('.p5VideoPlayer_vid')[0].currentTime = duration + start;
  46. var el = $(player).find(".p5VideoPlayer_play");
  47. $(video).trigger('pause');
  48. $(el).removeClass("glyphicon-pause")
  49. $(el).addClass("glyphicon-play")
  50. }
  51. $( player ).trigger( "videoProgress" );
  52. }
  53. function p5VideoPlayer_init(imgEl){
  54. if (!$(imgEl).parent().hasClass("p5VideoPlayer")) return false;
  55. var player = $(imgEl).parent();
  56. var id = $(player).data("videoid");
  57. var link = BASE_URL + "index.php?_route=UrlAction_ProcesEditor&_task=getVideoFileAjax&id=" + id;
  58. $.get(link, function(data) {
  59. if($(player).data("start") === true)
  60. $(player).data("start", data["VIDEO_START"]);
  61. if($(player).data("end") === true)
  62. $(player).data("end", data["VIDEO_END"]);
  63. $(player).append(`
  64. <video class="p5VideoPlayer_vid">
  65. <source src="` + data["src"] + `" type="video/mp4">
  66. Your browser does not support the video tag.
  67. </video>
  68. <div class="p5VideoPlayer_video-controls">
  69. <table>
  70. <tr>
  71. <td><span class="glyphicon glyphicon-play p5VideoPlayer_play ico"></span></td>
  72. <td style=width:100%;><input class="p5VideoPlayer_zakres" type="text" data-slider-handle="custom2"
  73. data-slider-min="0" data-slider-max="100" data-slider-step="0.01" data-slider-value="0"/>
  74. </td>
  75. <td class=only_fullscreen><span style=margin-top:15px;><span class=p5VideoPlayer_current>00:00</span>&nbsp/&nbsp<span class=p5VideoPlayer_duration>00:00</span> </span></td>
  76. <td class=only_fullscreen><input class="p5VideoPlayer_glosnosc" style=margin-top:10px;width:30px; type="text" data-slider-handle="custom2"
  77. data-slider-min="0" data-slider-max="100" data-slider-value="0"/>
  78. </td>
  79. <td><span class="glyphicon glyphicon-fullscreen ico p5VideoPlayer_fullscreen"></span></td>
  80. </tr>
  81. </table>
  82. </div>
  83. `)
  84. $(player).find(".img").hide()
  85. $(player).find('.p5VideoPlayer_vid')[0].currentTime = $(player).data("start");
  86. $('.p5VideoPlayer_zakres').slider({
  87. formatter: function(value) {
  88. return value + "%";
  89. }
  90. });
  91. $('.p5VideoPlayer_glosnosc').slider({
  92. formatter: function(value) {
  93. return value + "%";
  94. }
  95. });
  96. //videoPlayer_updateProgress(player);
  97. var temp = {}
  98. temp["vid"] = $(player).find('.p5VideoPlayer_vid');
  99. //console.log("instances ", instances.length)
  100. instances.push(temp);
  101. instances[instances.length-1]["INTERVAL"] = setInterval(function() {
  102. videoPlayer_updateProgress(player, instances.length-1);
  103. }, 500);
  104. });
  105. }
  106. $(document).on("click", ".img", function() {
  107. p5VideoPlayer_init(this);
  108. });
  109. function videoPlayer_play(el) {
  110. var player = $(el).closest(".p5VideoPlayer")
  111. var video = $(player).find(".p5VideoPlayer_vid");
  112. el = $(player).find(".p5VideoPlayer_play");
  113. if ($(video).prop("paused")) {
  114. $.each(instances, function(i,e){
  115. if(!$(e["vid"]).prop("paused")){
  116. videoPlayer_play(e["vid"]);
  117. }
  118. })
  119. $(video).trigger('play');
  120. $(el).removeClass("glyphicon-play")
  121. $(el).addClass("glyphicon-pause")
  122. } else {
  123. $(video).trigger('pause');
  124. $(el).removeClass("glyphicon-pause")
  125. $(el).addClass("glyphicon-play")
  126. }
  127. //videoPlayer_updateProgress(player);
  128. }
  129. $('.p5VideoPlayer_vid').on('canplay canplaythrough', function() {
  130. alert('canplay event fired');
  131. });
  132. $(document).on("click", ".p5VideoPlayer_play", function() {
  133. videoPlayer_play(this);
  134. })
  135. $(document).on("click", ".p5VideoPlayer_vid", function() {
  136. videoPlayer_play(this);
  137. })
  138. $(document).on('webkitfullscreenchange mozfullscreenchange fullscreenchange', ".p5VideoPlayer_vid", function() {
  139. var state = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
  140. var player = $(this).closest(".p5VideoPlayer")
  141. var video = $(player).find(".p5VideoPlayer_vid");
  142. if (state) {
  143. $(player).find(".p5VideoPlayer_video-controls").addClass("p5VideoPlayer_video-controls-fs");
  144. } else {
  145. $(player).find(".p5VideoPlayer_video-controls").removeClass("p5VideoPlayer_video-controls-fs");
  146. }
  147. });
  148. $(document).on("click", ".p5VideoPlayer_fullscreen", function() {
  149. var player = $(this).closest(".p5VideoPlayer")
  150. var video = $(player).find(".p5VideoPlayer_vid");
  151. var elem = video[0];
  152. $(player).find(".p5VideoPlayer_video-controls").addClass("p5VideoPlayer_video-controls-fs");
  153. var state = document.fullScreen || document.mozFullScreen || document.webkitIsFullScreen;
  154. if (!state) {
  155. if (elem.requestFullscreen) {
  156. elem.requestFullscreen();
  157. } else if (elem.mozRequestFullScreen) {
  158. elem.mozRequestFullScreen();
  159. } else if (elem.webkitRequestFullscreen) {
  160. elem.webkitRequestFullscreen();
  161. }
  162. } else {
  163. if (document.exitFullscreen) {
  164. document.exitFullscreen();
  165. } else if (document.webkitExitFullscreen) {
  166. document.webkitExitFullscreen();
  167. } else if (document.mozCancelFullScreen) {
  168. document.mozCancelFullScreen();
  169. } else if (document.msExitFullscreen) {
  170. document.msExitFullscreen();
  171. }
  172. }
  173. });