使用vue-video-player實(shí)現(xiàn)直播的方式
課前準(zhǔn)備:直播流協(xié)議https://www.cnblogs.com/yangchin9/p/14930874.html
摘要:在H5頁面實(shí)現(xiàn)觀看直播+視頻回放;在開發(fā)期間使用過video.js、mui-player等插件,發(fā)現(xiàn)這些video插件對(duì)移動(dòng)端的兼容性都不友好,最后發(fā)現(xiàn)一個(gè)在移動(dòng)端兼容不錯(cuò)的插件——vue-video-player
場(chǎng)景:
移動(dòng)端H5頁面,項(xiàng)目是vue搭建的,使用的是HLS協(xié)議以m3u8結(jié)尾的直播流
一、安裝vue-video-player
播放HLS視頻流需要安裝 videojs-contrib-hls插件,播放RTMP視頻流則安裝 videojs-flash插件,hls插件與flash插件同時(shí)使用時(shí)flash插件需要在hls插件之前引入;(資料上講安裝vue-video-player時(shí)會(huì)自動(dòng)安裝hls插件,實(shí)際操作中并沒有,還是自己手動(dòng)安裝吧?。?/p>
安裝方式1:
CDN方式,直接在html文件頭部引入文件: <link rel="stylesheet" href="path/to/video.js/dist/video-js.css"/> <script type="text/javascript" src="path/to/video.min.js"></script> <script type="text/javascript" src="path/to/vue.min.js"></script> <script type="text/javascript" src="path/to/dist/vue-video-player.js"> </script> <script type="text/javascript"> Vue.use(window.VueVideoPlayer) </script>
安裝方式2:
點(diǎn)擊查看代碼
NMP安裝插件: npm install vue-video-player --save npm install videojs-contrib-hls --save main.js中引入基礎(chǔ)樣式文件: // 引入videoPlayer樣式 import 'video.js/dist/video-js.css' 按需引入: import 'videojs-contrib-hls' import { videoPlayer } from 'vue-video-player' components: { videoPlayer }, 全局引入: import Vue from 'vue' import VueVideoPlayer from 'vue-video-player' // 自定義樣式引入,在<video-player>添加對(duì)應(yīng)類名,例如video-player-custom // import 'vue-video-player/src/custom-theme.css' Vue.use(VueVideoPlayer, /* { options: 全局默認(rèn)配置, events: 全局videojs事件 }*/)
二、使用 vue-video-player
<template> <!-- playsinline:設(shè)置播放器在移動(dòng)設(shè)備上不全屏[ Boolean, default: false ] --> <!-- customEventName:自定義狀態(tài)變更時(shí)的事件名[ String, default: 'statechanged' ] --> <video-player class="video-player-custom" ref="videoPlayer" :options="playerOptions" :playsinline="true" customEventName="customstatechangedeventname" @play="onPlayerPlay" @pause="onPlayerPause" @ended="onPlayerEnded" @ready="playerReadied" @statechanged="playerStateChanged" @playing="onPlayerPlaying" @waiting="onPlayerWaiting" @loadeddata="onPlayerLoadeddata" @timeupdate="timeupdate" @canplay="onPlayerCanplay" @canplaythrough="onPlayerCanplaythrough"> </video-player> </template> <script> import 'videojs-contrib-hls' import { videoPlayer } from 'vue-video-player' export default { components: { videoPlayer }, data() { return { playerOptions: { // 是否靜音 muted: true, // 默認(rèn)為英語,設(shè)置為中文 language: 'zh-CN', // 播放速度,指定后Video.js將顯示一個(gè)控件(vjs-playback-rate類的控件),允許用戶選擇播放速度 playbackRates: [0.5, 1.0, 1.5, 2.0], // 將播放器置于流暢模式,并在計(jì)算播放器的動(dòng)態(tài)大小時(shí)使用該值,表示長(zhǎng)寬比例 aspectRatio: '4:3', // 兼容順序,默認(rèn)值是['html5'],其他已注冊(cè)的技術(shù)將按其注冊(cè)的順序在該技術(shù)之后添加。 techOrder: ['html5'], // 等同于原生<video>標(biāo)簽中的一組<source>子標(biāo)簽,可實(shí)現(xiàn)優(yōu)雅降級(jí);type 屬性規(guī)定媒體資源的 MIME 類型 sources: [ //{ //type: "video/mp4", //src: "" //}, //{ //type: "rtmp/flv", //src: "" //}, { type: "application/x-mpegURL", src: "https://live.cgtn.com/1000/prog_index.m3u8" }, ], // 視頻封面 poster: require('./icon/cover.jpg'), } } }, computed: { //插件節(jié)點(diǎn) 用于添加自定義按鈕事件 player() { return this.$refs.videoPlayer.player } }, mounted() {}, methods: { // 播放回調(diào) onPlayerPlay(player) { }, // 暫?;卣{(diào) onPlayerPause(player) { //console.log(player) }, // 視頻播放結(jié)束回調(diào) onPlayerEnded(player) { //console.log(player) }, // DOM元素上的readyState更改導(dǎo)致播放停止 onPlayerWaiting(player) { //console.log(player) }, // 已開始播放回調(diào) onPlayerPlaying(player) { //console.log(player) }, // 當(dāng)播放器在當(dāng)前播放位置下載數(shù)據(jù)時(shí)觸發(fā) onPlayerLoadeddata($event) { //console.log($event) }, // 當(dāng)前播放位置發(fā)生變化時(shí)觸發(fā)。 onPlayerTimeupdate($event) { //console.log($event) }, //媒體的readyState為HAVE_FUTURE_DATA或更高 onPlayerCanplay($event) { //console.log($event) }, //媒體的readyState為HAVE_ENOUGH_DATA或更高。這意味著可以在不緩沖的情況下播放整個(gè)媒體文件。 onPlayerCanplaythrough($event) { //console.log($event) }, //播放狀態(tài)改變回調(diào) playerStateChanged($event) { //console.log($event) }, //將偵聽器綁定到組件的就緒狀態(tài)。與事件監(jiān)聽器的不同之處在于,如果ready事件已經(jīng)發(fā)生,它將立即觸發(fā)該函數(shù)。。 playerReadied($event) { //console.log($event) }, } } </script> <style lang="scss" scoped> .video-player-custom{ width: 100%; height: 180px; // vidoeUI重寫 /deep/ .video-js{ width: 100%; height: 100%; padding: 0; overflow: hidden; // 播放器 .vjs-tech{ object-fit: cover; } // 播放按鈕 .vjs-big-play-button { position: absolute; top: 50%; left: 50%; width: 2em; height: 2em; margin-top: -1em; margin-left: -1em; font-size: 2em; line-height: 2em; border-radius: 50%; background-color: rgba(0,0,0,0.45); outline: none; } // 封面 .vjs-poster{ width: 100%; height: 100%; background-size: cover; } } } </style>
到此這篇關(guān)于使用vue-video-player實(shí)現(xiàn)直播的文章就介紹到這了,更多相關(guān)vue-video-player直播內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue-resouce設(shè)置請(qǐng)求頭的三種方法
本篇文章主要介紹了vue-resouce設(shè)置請(qǐng)求頭的三種方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09npm如何更新VUE package.json文件中依賴的包版本
這篇文章主要介紹了npm如何更新VUE package.json文件中依賴的包版本問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06vue原理Compile從新建實(shí)例到結(jié)束流程源碼
這篇文章主要為大家介紹了vue原理Compile從新建實(shí)例到結(jié)束流程源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Vue零基礎(chǔ)入門之模板語法與數(shù)據(jù)綁定及Object.defineProperty方法詳解
這篇文章主要介紹了Vue初學(xué)基礎(chǔ)中的模板語法、數(shù)據(jù)綁定、Object.defineProperty方法等基礎(chǔ),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09VUE 實(shí)現(xiàn)一個(gè)簡(jiǎn)易老虎機(jī)的項(xiàng)目實(shí)踐
老虎機(jī)在很多地方都可以見到,可以設(shè)置中獎(jiǎng)位置,以及中獎(jiǎng)回調(diào),本文主要介紹了VUE 實(shí)現(xiàn)一個(gè)簡(jiǎn)易老虎機(jī)的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Vue3+Element?Plus實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁以及右鍵菜單功能
這篇文章主要給大家介紹了關(guān)于Vue3+Element?Plus實(shí)現(xiàn)動(dòng)態(tài)標(biāo)簽頁以及右鍵菜單功能的相關(guān)資料,Vue?3和Element?Plus提供了一種簡(jiǎn)單的方法來實(shí)現(xiàn)側(cè)邊菜單欄與標(biāo)簽頁之間的聯(lián)動(dòng),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09