国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - vue.js - vue-video-player 斷點續播的實現

vue-video-player 斷點續播的實現

2022-01-12 16:57liuxss123 vue.js

這篇文章主要介紹了vue-video-player 斷點續播的實現,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最近的項目中需要實現視頻斷點續播的功能,一聽到這個功能。內心方張了..但卻又有點小竊喜,小懵亂。抱著求學態度去挑戰一下。

1.安裝插件

?
1
npm install vue-video-player --save

2.Main.js 引入組件

?
1
2
3
4
import VideoPlayer from 'vue-video-player'
require('video.js/dist/video-js.css')
require('vue-video-player/src/custom-theme.css')
Vue.use(VideoPlayer)

3.頁面使用組件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<el-tree :data="ChapterOptions"
     :props="defaultProps"
     node-key='id'
     highlight-current
     :filter-node-method="filterNode"
     ref="tree"
     default-expand-all
     @node-click="handleNodeClick" />
<video-player ref="videoPlayer"
        class="video-player vjs-custom-skin"
        style="width: 1000px;height: 576px;display: inline-flex"
        :playsinline="true"
        :options="playerOptions"
        @pause="onPlayerPause($event)"
        @ended="onPlayerEnded($event)"
        @play="onPlayerPlay($event)"
        @timeupdate="onPlayerTimeupdate($event)"
        @ready="playerReadied"
    />
<script>
import { videoPlayer } from 'vue-video-player'
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
import { treeselect } from "@/api//driver/videoChapter";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
 name: "videoPlayer",
 components: { Treeselect,videoPlayer },
 data() {
 return {
  //用戶信息
  user:{},
  //===============================
  paused: true,
  learningDuration: {
  userId: '', //用戶id
  chapterId:'',//章節id
  timeLog: '', //視頻觀看時長
  },
 
  playerOptions: {
  playbackRates: [0.5, 1.0, 1.5, 2.0], //播放速度
  autoplay: false, // 如果true,瀏覽器準備好時開始回放。
  muted: false, // 默認情況下將會消除任何音頻。
  loop: false, // 導致視頻一結束就重新開始。
  preload: 'auto', // 建議瀏覽器在<video>加載元素后是否應該開始下載視頻數據。auto瀏覽器選擇最佳行為,立即開始加載視頻(如果瀏覽器支持)
  language: 'zh-CN',
  aspectRatio: '16:9', // 將播放器置于流暢模式,并在計算播放器的動態大小時使用該值。值應該代表一個比例 - 用冒號分隔的兩個數字(例如"16:9"或"4:3")
  fluid: true, // 當true時,Video.js player將擁有流體大小。換句話說,它將按比例縮放以適應其容器。
  sources: [
   {
   type: 'video/mp4', // 這里的種類支持很多種:基本視頻格式、直播、流媒體等,具體可以參看git網址項目
   src: ''// url地址
   }
  ],
  hls: true,
  poster: '', // 你的封面地址
  width: document.documentElement.clientWidth, // 播放器寬度
  notSupportedMessage: '此視頻暫無法播放,請稍后再試', // 允許覆蓋Video.js無法播放媒體源時顯示的默認信息。
  controlBar: {
   //當前時間和持續時間的分隔符
   timeDivider: true,
   //顯示持續時間
   durationDisplay: true,
   //是否顯示剩余時間功能
   remainingTimeDisplay: false,
   //全屏按鈕
   fullscreenToggle: true
  }
  }
 };
},
computed: {
 player() {
  return this.$refs.videoPlayer.player//自定義播放
 }
 },
mounted () {
 this.timer = setInterval(this.putLearningObj, 3000)
 },
destroyed () {
 // 如果定時器在運行則關閉
 if (this.timer) {
  clearInterval(this.timer)
  }
 },
methods: {
 //用戶信息
 getUser() {
  getUserProfile().then(response => {
  this.user = response.data;
  this.learningDuration.userId = this.user.userId
  });
 },
  //============================
 fullScreen() {
  const player = this.$refs.videoPlayer.player
  player.requestFullscreen()//調用全屏api方法
  player.isFullscreen(true)
  player.play()
 },
 onPlayerPlay(player) {
  this.paused = false
  // player.play()
 },
 onPlayerPause (player) {
  this.paused = true
  // console.log('onPlayerPause!', player)
 },
 onPlayerEnded (player) {
  this.paused = false;
  // clearInterval(this.timer);
 },
 //當前播放位置發生變化時觸發。
 onPlayerTimeupdate (player) {
  // console.log(' onPlayerTimeupdate!', this.timeLog)
 },
 /* 設置視頻進度 */
 playerReadied: function (player) {
 },
};
</script>

上面的 src視頻地址可以換成具體的地址串,也能換成后臺的地址串,因為我的是章節樹所以我和章節id進行了關聯

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/** 查詢部門下拉樹結構 */
getTreeselect() {
 treeselect().then((response) => {
 //封面
 var img = '';
 this.ChapterOptions = response.data;
 for (let i = 0; i <this.ChapterOptions.length ; i++) {
  this.videoName = this.ChapterOptions[0].children[0].chapterName
  this.videoIntroduce = this.ChapterOptions[0].children[0].chapterIntroduce
  this.VideoUrl = JSON.parse(this.ChapterOptions[0].children[0].videoAddress)
  img = JSON.parse(this.ChapterOptions[0].children[0].imageAddress)
  //初始化封面
  for (let j = 0; j <img.length ; j++) {
  this.playerOptions.poster =img[0];
  }
  //初始化第一個章節視頻
  for (let j = 0; j <this.VideoUrl.length ; j++) {
  this.playerOptions.sources[0].src = this.VideoUrl[0]
  }
  //初始化章節
  this.learningDuration.chapterId = this.ChapterOptions[0].children[0].id;
  //默認高亮第一個章節節點
  this.$nextTick(()=>{
  this.$refs.tree.setCurrentKey(this.ChapterOptions[0].children[0].id);
  })
 }
 });
},
// 篩選節點
filterNode(value, data) {
 if (!value) return true;
 return data.label.indexOf(value) !== -1;
},
// 節點單擊事件
handleNodeClick(data) {
 // console.log(data)
 var img = '';
 //刷新原視頻, 原封面
 this.playerOptions.sources[0].src = '';
 this.playerOptions.poster = '';
 //轉換視頻
 this.VideoUrl= JSON.parse(data.videoAddress);
 // console.log("this.VideoUrl")
 for (let i = 0; i <this.VideoUrl.length ; i++) {
 this.playerOptions.sources[0].src = this.VideoUrl[0];
 }
 img = JSON.parse(data.imageAddress);
 for (let i = 0; i <img.length ; i++) {
 this.playerOptions.poster = img[0];
 }
 // console.log("this.playerOptions.sources[0].src")
 // console.log(this.playerOptions.sources[0].src)
 //章節介紹
 this.videoIntroduce = data.chapterIntroduce;
 //章節名稱
 this.videoName = data.chapterName;
 //章節id
 this.learningDuration.chapterId = data.id
 // console.log(this.videoIntroduce)
},

4.進度保存

接下來就是 保存視頻的進度條了,通過打印發現onPlayerTimeupdate可獲取到視頻的進度,故采用定時器 每3秒觸發一次數據交互

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
computed: {
 player() {
  return this.$refs.videoPlayer.player//自定義播放
 }
 },
 mounted () {
 this.timer = setInterval(this.putLearningObj, 3000)
 },
 destroyed () {
 // 如果定時器在運行則關閉
 if (this.timer) {
  clearInterval(this.timer)
  }
 },
methods: { 
putLearningObj () {
  if (!this.paused) {
  //保存視頻進度
  saveTime(this.learningDuration)
  console.log('putLearningObj ~~~~~~~~~')
  }
 },
//當前播放位置發生變化時觸發。
onPlayerTimeupdate (player) {
 this.learningDuration.timeLog = player.cache_.currentTime
  // console.log(' onPlayerTimeupdate!', this.timeLog)
 },
},

saveTime是我自定義的與后端交互的方法。(可自行定義)

?
1
2
3
4
5
6
7
8
// 保存視頻進度
export function saveTime(data) {
 return request({
 url: '/***/****/***/',
 method: 'put',
 data: data
 })
}

那么到了這一步 進度就能保存下來了

4.進度恢復

想要恢復進度,就必須在視頻播放前把 保存進度下來的設置到視頻當中,通過打印可以看出playerReadied 可以設置

?
1
2
3
4
5
6
/* 設置視頻進度 */
playerReadied: function (player) {
//可在此調用后臺交互方法
...
player.currentTime(this.learningDuration.timeLog)
},

到此 進度可以 恢復了 大功告成!。至于后臺交互數據 需求不一樣,代碼也就沒有貼出來。

vue-video-player 斷點續播的實現

到此這篇關于vue-video-player 斷點續播的文章就介紹到這了,更多相關vue video player 斷點續播內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_45676325/article/details/113371747

延伸 · 閱讀

精彩推薦
  • vue.jsVue項目中實現帶參跳轉功能

    Vue項目中實現帶參跳轉功能

    最近做了一個手機端系統,其中遇到了父頁面需要攜帶參數跳轉至子頁面的問題,現已解決,下面分享一下實現過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學的同學,可能js的基礎也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術團隊7992021-12-22
  • vue.jsVue2.x-使用防抖以及節流的示例

    Vue2.x-使用防抖以及節流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節流的示例,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue中引入svg圖標的兩種方式

    Vue中引入svg圖標的兩種方式

    這篇文章主要給大家介紹了關于Vue中引入svg圖標的兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的...

    十里不故夢10222021-12-31
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學可以研究下...

    yukiwu6752022-01-25
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關資料,幫助大家更好的理解和學習使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.js用vite搭建vue3應用的實現方法

    用vite搭建vue3應用的實現方法

    這篇文章主要介紹了用vite搭建vue3應用的實現方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue2.x 項目性能優化之代碼優化的實現

    Vue2.x 項目性能優化之代碼優化的實現

    這篇文章主要介紹了Vue2.x 項目性能優化之代碼優化的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋...

    優小U9632022-02-21
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产高清一级片 | 91免费影视| 久久99精品国产麻豆婷婷 | 中文字幕在线电影 | 国内精品久久久久久久影视红豆 | 免费在线黄色电影 | 国产日韩久久 | 国产一区精品电影 | 久久精品亚洲 | 久草视频网站 | 日韩精品www | 日韩欧美国产综合 | 成人在线免费观看视频 | 久久成人免费视频 | 日韩欧美一区二区三区 | 欧美亚洲免费 | 大象视频成人在线观看 | a资源在线观看 | 久久国产电影 | 夜夜夜操| 成人免费观看cn | 欧美一区二区免费在线观看 | 在线免费日韩 | 国产一区二区三区久久久久久久久 | 亚洲午夜在线 | 婷婷综合色 | 一级做a爰片久久高潮 | 日韩一区在线视频 | 亚洲国产综合在线 | 91人人| 亚洲久草 | 在线日韩| 亚洲精品免费看 | 久久亚洲国产精品 | 欧美激情一区二区三区 | 欧美精品在线观看 | 国产成人免费视频网站视频社区 | 欧美国产精品一区二区三区 | 精品久草| 久久毛片| 亚洲国产精品成人女人久久久 |