lookShipin.vue 6.0 KB

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