lookShipin.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <view @click="goUpPage">
  3. 视频播放
  4. </view>
  5. <view ref="videoContent" id="wgy-player-test" :playAuth="playAuth" :change:playAuth="renderScript.receiveMsg"
  6. :progressMarkers="progressMarkers" :change:progressMarkers="renderScript.progressMarkersMsg"
  7. :seekTime="seekTime" :change:seekTime="renderScript.seekTimeFun">
  8. </view>
  9. <view>
  10. 第一节 时间的计算
  11. </view>
  12. <view>
  13. 第一单元 时、分、秒
  14. </view>
  15. <view v-for="(item,index) in progressMarkers" :key="index" @click="markersClick(item)">标点</view>
  16. </template>
  17. <script>
  18. import {
  19. onLoad,
  20. onReady
  21. } from '@dcloudio/uni-app';
  22. import {
  23. videoPolicy,
  24. getVideoAuth,
  25. getVideoRefresh
  26. } from "@/api/shipin.js"
  27. export default {
  28. data() {
  29. return {
  30. options: {}, //上个页面获取的视频参数(视频id)
  31. playAuth: "", //播放凭证
  32. progressMarkers: [],
  33. videoId: "", //阿里云视频id
  34. seekTime: ''
  35. }
  36. },
  37. onLoad(options) {
  38. let data = JSON.parse(options.studyData)
  39. this.videoId = data.videoId
  40. this.progressMarkers = data.progressMarkers
  41. this.getLive(); //获取播放凭证
  42. },
  43. methods: {
  44. getLive() {
  45. let req = {
  46. videoId: this.videoId
  47. }
  48. getVideoAuth(req).then(res => {
  49. this.playAuth = res.data
  50. })
  51. },
  52. markersClick(data) {
  53. console.log(data)
  54. this.seekTime = data.offset
  55. },
  56. goUpPage(){
  57. uni.navigateTo({
  58. // url: `/pages/study/index?xueqi=${data.activeXueqi}&nianji=${data.activeNianji}&flag=selectGrades`
  59. url: `/pages/study/index`
  60. })
  61. }
  62. },
  63. created() {
  64. // console.log("getLive")
  65. // this.getLive(); //获取播放凭证
  66. },
  67. }
  68. </script>
  69. <script module="renderScript" lang="renderjs">
  70. export default {
  71. mounted() {
  72. console.log("renderScript1")
  73. // 在适合的生命周期,通过script和link标签引入播放器sdk、css
  74. this.loadWebPlayerSDK()
  75. },
  76. data() {
  77. return {
  78. player: null,
  79. playAuth: '',
  80. progressMarkers: [],
  81. seekTime: ''
  82. }
  83. },
  84. methods: {
  85. receiveMsg(newValue, oldValue, ownerInstance, instance) {
  86. console.log('service层中的options发生变化')
  87. console.log('新值', newValue)
  88. console.log('旧值', oldValue)
  89. // ownerInstance和this.$ownerInstance一样,可用来向service层通信
  90. // instance和ownerInstance的区别是:
  91. // instance.$el指向的是触发事件的那个节点;ownerInstance.$el指向当前vue文件中的根节点;
  92. // instance的作用目前尚不明确,官方没有给出用法
  93. if (newValue) {
  94. this.playAuth = newValue
  95. this.playAli()
  96. }
  97. },
  98. progressMarkersMsg(newValue, oldValue, ownerInstance, instance) {
  99. console.log('service层中的options发生变化222222222222')
  100. console.log('新值', newValue)
  101. console.log('旧值', oldValue)
  102. // ownerInstance和this.$ownerInstance一样,可用来向service层通信
  103. // instance和ownerInstance的区别是:
  104. // instance.$el指向的是触发事件的那个节点;ownerInstance.$el指向当前vue文件中的根节点;
  105. // instance的作用目前尚不明确,官方没有给出用法
  106. if (newValue) {
  107. this.progressMarkers = newValue
  108. }
  109. },
  110. seekTimeFun(newValue, oldValue, ownerInstance, instance) {
  111. console.log('service层中的options发生变化3333333')
  112. console.log('新值', newValue)
  113. console.log('旧值', oldValue)
  114. // ownerInstance和this.$ownerInstance一样,可用来向service层通信
  115. // instance和ownerInstance的区别是:
  116. // instance.$el指向的是触发事件的那个节点;ownerInstance.$el指向当前vue文件中的根节点;
  117. // instance的作用目前尚不明确,官方没有给出用法
  118. if (newValue) {
  119. console.log(newValue, 'newValuenewValuenewValuenewValuenewValue')
  120. console.log(this.player.getStatus(), 'newValuenewValuenewValuenewValuenewValue')
  121. switch (this.player.getStatus()) {
  122. case 'init':
  123. break;
  124. case 'ready':
  125. break;
  126. case 'loading':
  127. this.player.play()
  128. this.player.seek(newValue)
  129. break;
  130. case 'play':
  131. this.player.seek(newValue)
  132. break;
  133. case 'pause':
  134. this.player.play()
  135. this.player.seek(newValue)
  136. break;
  137. case 'playing':
  138. this.player.seek(newValue)
  139. break;
  140. case 'waiting':
  141. break;
  142. case 'error':
  143. break;
  144. case 'ended':
  145. break;
  146. default:
  147. break;
  148. }
  149. // this.player.seek(newValue)
  150. }
  151. },
  152. playAli() {
  153. //配置播放器
  154. var player = new Aliplayer({
  155. id: "wgy-player-test",
  156. "vid": 'b997f16cb9cb474cb93526cff77d8801',
  157. "playauth": this.playAuth,
  158. // "playConfig": {
  159. // "EncryptType": 'AliyunVoDEncryption'
  160. // },
  161. "qualitySort": "asc",
  162. "format": "m3u8",
  163. "mediaType": "video",
  164. "encryptType": 1,
  165. "progressMarkers": this.progressMarkers,
  166. "width": '100%',
  167. "height": '500px',
  168. "autoplay": false,
  169. "isLive": false,
  170. "rePlay": false,
  171. "playsinline": true,
  172. "preload": false,
  173. "controlBarVisibility": "hover",
  174. "useH5Prism": true
  175. }, function(player) {});
  176. this.player = player;
  177. player.one('canplay', function() {
  178. console.log('canplay', this.player.tag);
  179. player.tag.play();
  180. });
  181. },
  182. loadWebPlayerSDK() {
  183. return new Promise((resolve, reject) => {
  184. const s_tag = document.createElement('script'); // 引入播放器js
  185. s_tag.type = 'text/javascript';
  186. s_tag.src = 'https://g.alicdn.com/de/prismplayer/2.9.6/aliplayer-min.js';
  187. s_tag.charset = 'utf-8';
  188. s_tag.onload = () => {
  189. // this.checkValue();
  190. resolve();
  191. }
  192. document.body.appendChild(s_tag);
  193. const l_tag = document.createElement('link'); // 引入播放器css
  194. l_tag.rel = 'stylesheet';
  195. l_tag.href =
  196. 'https://g.alicdn.com/de/prismplayer/2.9.6/skins/default/aliplayer-min.css';
  197. document.body.appendChild(l_tag);
  198. });
  199. },
  200. }
  201. }
  202. </script>