playerToJs.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. // 前端js与webView的交互
  2. var player = {
  3. callbackCode: null, //客户端操作返回的code
  4. targetSeekTime: null, //快进快退跳转的目标时间
  5. seekTimeout: null, //快进快退的防抖延时器
  6. isAding: 0, //当前播放器播放广告的状态码(未来电视播放器)
  7. // 播放视频
  8. play: function (obj) {
  9. // 设置参数
  10. var playConfig = {
  11. type: obj.type ? obj.type : 1, //设置播放类型,默认为1
  12. url: obj.url ? obj.url : '', //通过url播放,type为1时必须填
  13. code: obj.code ? obj.code : '', //通过code播放,type为2时必须填
  14. seek_time: obj.seek_time ? obj.seek_time * 1000 : 0, //设置起始时间,默认为0,传入参数单位为秒
  15. x: obj.x ? obj.x : 0, //播放器位置,左(右)上角的x轴坐标点,默认为0
  16. y: obj.y ? obj.y : 0, //播放器位置,左(右)上角的y轴坐标点,默认为0
  17. width: obj.width ? obj.width : 1280, //播放器大小,宽度,默认为1280
  18. height: obj.height ? obj.height : 720, //播放器大小,高度,默认为720
  19. examine_id: obj.examine_id ? obj.examine_id : '', //未来电视专用审核ID; (对接未来电视播放的地区必填)
  20. examine_type: obj.examine_type ? obj.examine_type : '' //未来电视专用审核类型; (对接未来电视播放的地区必填)
  21. }
  22. // 播放类型为1时,url不能为空
  23. if (playConfig.url == '' && playConfig.type == 1) {
  24. console.log('播放类型为1,请设置url');
  25. return
  26. }
  27. // 播放类型为2是,code不能为空
  28. else if (playConfig.code == '' && playConfig.type == 2) {
  29. console.log('播放类型为2,请设置code');
  30. return
  31. }
  32. // 播放视频,并记录操作返回的code
  33. player.callbackCode = PlayerToJS.play(JSON.stringify(playConfig));
  34. //code == 6, 执行成功
  35. //code == -1, 执行过程中发生异常,中止执行
  36. //code == 7, 参数有误,中止执行
  37. //code == 8, 播放对象为空,中止执行
  38. },
  39. // 播放器尺寸改变
  40. changePlayerSize: function (obj) {
  41. // 设置参数
  42. var changeConfig = {
  43. x: obj.x ? obj.x : 0,
  44. y: obj.y ? obj.y : 0,
  45. width: obj.width ? obj.width : 1280,
  46. height: obj.height ? obj.height : 720,
  47. }
  48. // 更改播放器尺寸,并记录操作返回的code
  49. player.callbackCode = PlayerToJS.change(JSON.stringify(changeConfig));
  50. //code == 6, 执行成功
  51. //code == -1, 执行过程中发生异常,中止执行
  52. //code == 7, 参数有误,中止执行
  53. //code == 8, 播放对象为空,中止执行
  54. // code == 9, 播放对象为初始化,中止执行
  55. },
  56. // 暂停播放
  57. pause: function () {
  58. player.callbackCode = PlayerToJS.pause();
  59. },
  60. // 恢复播放
  61. resume: function () {
  62. player.callbackCode = PlayerToJS.resume();
  63. },
  64. // 结束播放
  65. stop: function () {
  66. player.callbackCode = PlayerToJS.stop();
  67. },
  68. // 快进(秒)
  69. forward: function (second) {
  70. var _this = this
  71. var durationTime = _this.getDurationTime()
  72. // 获取当前时长,若用户500毫秒内按过快进快退,则会获取到之前的目标时间
  73. var currentTime = _this.targetSeekTime != null ? _this.targetSeekTime : _this.getCurrentTime()
  74. // 若没有传入参数,则默认设置跳跃时间为总时长的20分之1
  75. var time = second ? second : durationTime * 0.05;
  76. // 计算要跳跃到的目标时间
  77. var targetTime = Math.floor(currentTime + time)
  78. // 判断目标时间是否超越视频总时长,是则跳到倒数第二秒,否则跳到目标时间
  79. if (targetTime >= durationTime) {
  80. targetTime = durationTime - 2
  81. }
  82. // 记录下目标时间并调用防抖跳转方法
  83. _this.targetSeekTime = targetTime
  84. _this.playTo()
  85. },
  86. // 快退(秒)
  87. backward: function (second) {
  88. var _this = this
  89. var durationTime = _this.getDurationTime()
  90. // 获取当前时长,若用户500毫秒内按过快进快退,则会获取到之前的目标时间
  91. var currentTime = _this.targetSeekTime != null ? _this.targetSeekTime : _this.getCurrentTime()
  92. $.Debuglog(currentTime)
  93. // 若没有传入参数,则默认设置跳跃时间为总时长的20分之1
  94. var time = second ? second : durationTime * 0.05;
  95. // 计算要跳跃到的目标时间
  96. var targetTime = Math.floor(currentTime - time)
  97. // 判断目标时间是否低于0,是则跳到倒数第二秒,否则跳到目标时间
  98. if (targetTime <= 0) {
  99. targetTime = 0
  100. }
  101. // 记录下目标时间并调用防抖跳转方法
  102. _this.targetSeekTime = targetTime
  103. _this.playTo()
  104. },
  105. // 进度跳转(秒→毫秒)
  106. seek: function (time) {
  107. var paramJson = { time : time * 1000 }
  108. player.callbackCode = PlayerToJS.seek(JSON.stringify(paramJson));
  109. },
  110. // 快进快退防抖跳转
  111. playTo: function () {
  112. var _this = this
  113. // 设置500毫秒的防抖
  114. clearTimeout(_this.seekTimeout)
  115. _this.seekTimeout = setTimeout(function() {
  116. // 500毫秒内没有快进快退操作,则正式跳转到目标时间,并清除目标时间
  117. _this.seek(_this.targetSeekTime)
  118. _this.targetSeekTime = null
  119. }, 500)
  120. },
  121. // 获取视频总时长(毫秒→秒)
  122. getDurationTime: function () {
  123. return PlayerToJS.getDuration() / 1000
  124. },
  125. // 获取视频当前时长(毫秒→秒)
  126. getCurrentTime: function () {
  127. var _this = this
  128. // 若快进快退的目标时间存在,则当前时长应为目标时长
  129. var currentTime = _this.targetSeekTime ? _this.targetSeekTime : PlayerToJS.getCurrentPlayTime() / 1000
  130. return currentTime
  131. },
  132. // 获取视频当前进度(小数)
  133. getProgress: function () {
  134. var _this = this
  135. var durationTime = _this.getDurationTime()
  136. var currentTime = _this.getCurrentTime()
  137. return currentTime / durationTime
  138. },
  139. // 获取视频当前进度(百分比字符串)
  140. getProgressString: function () {
  141. var _this = this
  142. var progress = _this.getProgress()
  143. return Number(progress * 100).toFixed(3) + '%'
  144. },
  145. // 获取当前播放状态
  146. getPlayerStatus: function () {
  147. return PlayerToJS.getPlayerStatus()
  148. // 1,视频准备中;
  149. // 2,播放;
  150. // 3,暂停;
  151. // 4,缓冲;
  152. // 5,播放完成停止播放;
  153. // 6,未播放;
  154. },
  155. // VR视角旋转(仅限江苏移动VR大厅项目)
  156. rotate: function (x, y) {
  157. var rotateConfig = {
  158. x: x,
  159. y: y
  160. }
  161. player.callbackCode = PlayerToJS.rotate(JSON.stringify(rotateConfig));
  162. },
  163. // 判断当前播放器是否正在播放广告(仅限未来电视播放器)
  164. getCNTVPlayerAding: function () {
  165. var _this = this
  166. _this.isAding= PlayerToJS. getCNTVPlayerAding ()
  167. }
  168. }