網頁放置視頻播放器,我一般都是用video.js和它的插件vue-video- 一:Video.js 需求:對于簡單的視頻播放需求來說,video.js足以勝任了。 它可是支持HTML5和Flash的視頻播放器呦。 1:安裝
網頁放置視頻播放器鋪滿網頁需要多大,我一般都是用video.js和它的插件vue-video-
一:Video.js
需求:對于簡單的視頻播放需求來說,video.js足以勝任了。
它可是支持HTML5和Flash的視頻播放器呦。
1:安裝video.js
npm -s video.js
2:在main.js文件中引入相關文件
import Video from 'video.js' import 'video.js/dist/video-js.css' Vue.prototype.$video = Video
3:在組件中使用
<script> export default { name: "Video", data() { return { videoUrl:'...',//視頻地址 }; }, mounted() { this.initVideo(); //初始化視頻播放器 }, methods: { initVideo() { //初始化視頻方法 let myPlayer = this.$video(myVideo, { //是否顯示控制欄 controls: true, //是否自動播放,muted:靜音播放 autoplay: false, //是否靜音播放 muted:false, //是否流體自適應容器寬高 fluid:true, //設置視頻播放器的顯示寬度(以像素為單位) width: "800px", //設置視頻播放器的顯示高度(以像素為單位) height: "400px" }); } } }; </script>
4:效果圖
5:附上video.js的一些基本方法
myPlayer.ready(function(){ //視頻播放器初始化完成后的回調函數,this代表當前播放器,可以在這進行一系列的操作(myPlayer為我視頻播放器對象) myPlayer.play(); //播放 myPlayer.pause(); //暫停 var currentTime = myPlayer.currentTime(); //當前播放進度 myPlayer.currentTime(120); //自定義修改當前進度 var duration = myPlayer.duration(); //加載完成視頻后就可以獲取視頻總時長了,注意:在flash情況下無效! var buffered = myPlayer.buffered(); //視頻緩沖,返回值為下載了多大文件 var bufferedPercent = myPlayer.bufferedPercent(); //視頻緩沖,返回值為下載了百分之幾 var volume = myPlayer.volume(); //獲取視頻音量大小,值在0-1之間 myPlayer.volume(0.2); //設置視頻音量大小 var width = myPlayer.width(); //獲取視頻的寬度 myPlayer.width(640); //設置視頻的寬度 var howTallIsIt = myPlayer.height(); //獲取視頻的高度 myPlayer.height(200); //設置視頻高度 myPlayer.size(640,480); //同時設置視頻高寬 myPlayer.enterFullScreen(); //視頻全屏顯示 myPlayer.enterFullScreen(); //視頻退出全屏顯示 })
除此之外,我們還可以綁定監聽事件:
//視頻播放完畢的回調事件 myPlayer.on("ended", function(){ console.log("end", this.currentTime()); }); //視頻暫停的回調事件 myPlayer.on("pause", function(){ console.log("pause") }); //視頻刪除事件 myPlayer.removeEvent(“eventName”, function(){ console.log("delete") });
二:vue-video-
1:下載vue-video-
npm -s vue-video-
2:在main.js中引入相關文件
import VideoPlayer from 'vue-video-player' require('video.js/dist/video-js.css') require('vue-video-player/src/custom-theme.css') //引入 hls,視頻直播(m3u8)必須引入的 import 'videojs-contrib-hls' //播放rtmp視頻 import 'videojs-flash' //如果你需要自定義播放器的樣式,自己新建一個css require('./assets/css/video_css/myvideo.css') Vue.use(VideoPlayer)
3:組件中使用(有點長,其實多數是列出的一些回調函數而已,不需要使用的話忽略掉即可)
<script> // 導入組件 import {videoPlayer} from 'vue-video-player' export default { name: 'VideoPlayer', components: { videoPlayer }, data () { return { video:'', //具體視頻 fileType: 'mp4', // 資源的類型 videoUrl: '', // 資源的路徑地址 posterUrl:'' //封面地址 } }, mounted(){ }, methods:{ // 播放回調 onPlayerPlay(player) { //console.log('player play!', player) }, // 暫停回調 onPlayerPause(player) { //console.log('player pause!', player) }, // 視頻播完回調 onPlayerEnded($event) { this.$refs.videoPlayer.player.src(this.fileUrl) }, // DOM元素上的readyState更改導致播放停止 onPlayerWaiting($event) { //console.log(player) }, // 已開始播放回調 onPlayerPlaying($event) { // console.log(player) }, // 當播放器在當前播放位置下載數據時觸發 onPlayerLoadeddata($event) { // console.log(player) }, // 當前播放位置發生變化時觸發。 onPlayerTimeupdate($event) { //console.log(player) }, //媒體的readyState為HAVE_FUTURE_DATA或更高 onPlayerCanplay(player) { // console.log('player Canplay!', player) }, //媒體的readyState為HAVE_ENOUGH_DATA或更高。這意味著可以在不緩沖的情況下播放整個媒體文件。 onPlayerCanplaythrough(player) { // console.log('player Canplaythrough!', player)@canplay="onPlayerCanplay($event)" @canplaythrough="onPlayerCanplaythrough($event)" @statechanged="playerStateChanged($event)" @ready="playerReadied" >
}, //播放狀態改變回調 playerStateChanged(playerCurrentState) { //console.log('player current update state', playerCurrentState) }, //將偵聽器綁定到組件的就緒狀態。與事件監聽器的不同之處在于,如果ready事件已經發生,它將立即觸發該函數。。 playerReadied(player) { //console.log('example player 1 readied', player); }, }, computed: { videoPlayerOptions () { const videoPlayerOptions = { playbackRates: [0.75, 1.0, 1.25, 1.5,2.0], //播放速度 autoplay: false, // 是否自動播放。 muted: false, // 是否靜音播放,默認情況下將會消除任何音頻。 loop: false, // 是否循環播放。 preload: 'auto', // 建議瀏覽器在
4:效果圖
一些改進:
1:消除視頻兩邊留白,也就是實現視頻鋪滿父元素
通過添加樣式-fit:fill;來實現視頻鋪滿
video{ width: 100% !important; height: calc(100vh - 95px) !important; object-fit:fill; //消除留白 }
效果圖:(視頻左右兩邊是沒有黑邊了的)
補充-fit取值的相關知識:
fill:此值為-fit的默認值,替換內容的大小被設置為填充元素的內容框,也就是說,元素的內容擴大到完全填充容器的外形尺寸,即使這打破其內在的寬高比。
:替換元素內容大小保持長寬比例填充元素內容容器,其具體對象大小被解析為一個包含元素的寬度和高度。也就是說,如果你在替換元素上設置一個明確的高度和寬度,此值將導致內容大小,完全在固定的比例顯示,但仍在元素尺寸內顯示。
cover:替換元素內容大小保持長寬比例填充元素內容容器,其具體對象大小被解析為覆蓋整個元素的寬度和高度。也就是說,替換元素內容大小保持長寬比,但改變寬度和高度,以便完全覆蓋內容元素。
none:替換元素內容不調整大小以適應內部元素的容器,內容完全忽略設置在元素上的任何高度和權重,并且仍在元素尺寸內顯示。 scale-down:當內容大小設置了none或,將導致具體對象變得更小。
2:實現自適應高寬
通過上面設置的fluid:true雖然可以自適應寬高,但有時候需求是規定視頻總高度的,如果只是靠fluid來自適應是遠遠不夠的。
我的需求效果圖:
pc端:
移動端:
我遇到的問題:
設置video視頻高寬100%后,總高度卻超出了那個位置的高度,試了很多方法都不行,后來就才去了簡單粗暴的方法去解決–修改css樣式。(覺得有用再用吧各位)
注意:這里我是去掉了之前在中設置的fluid:true和: '16:10'再改css樣式的
html代碼:
自定義css樣式:
@media and(min-width:768px){ //pc端視頻鋪滿且占據整個容器的高寬,而移動端不需要視頻占據整個高度,因為會拉長視頻,很難看
video{ width: 100% !important; height: calc(100vh - 95px) !important; //我的容器高度設置的是100vh-95px,你們根據你們容器高度設置視頻高度即可 object-fit:fill; //消除兩邊留白 } } //為了填滿整個my_video的高度,設置video外層div高度(就是移動端效果圖包含黑色部分和視頻部分的整個div),使之為容器高度 #videoDiv>div{ height: calc(100vh - 95px) !important; overflow: hidden; } .my_video{ //這是我放視頻播放器的容器 width: 100%; height: calc(100vh - 95px); background-color: white; }
補充知識:vue中使用 vue-video-的幾個問題
video.js 插件在vue中是 vue-video-;
我們在vue中播放視頻可以使用這個插件;
下面簡單描述幾個使用中的問題,不涉及其他問題:
1、自定義播放處理 , 我們自己如何去觸發播放這個事件
2、播放,停止觸發的函數相關處理;
3、在安卓的微信中播放視頻不能播放的問題;
1、自定義播放,假設現在自己寫了一個, 或者其他什么東西放在視頻上方,要求點擊這個玩意兒播放視頻,
你也可以理解為播放按鈕; 那么首先肯定得綁定事件,vue綁定事件就不說了,應該都會,那么在這個綁定的
事件函數中,我們如何去播放視頻呢?:this.$refs...play(); 就可以了
2、播放或者停止播放時鋪滿網頁需要多大,我想怎加一些額外的處理,那么可以在
如下代碼,在相應的函數中處理即可,還有其它的事件也都類似處理;
3、在 設置 參數的時候,如果我們設置為true 或者 false 是會出問題的,
所以需要根據情況進行處理,這里的情況一般是微信瀏覽器的 x5內核,需要設置為 false, 其它的設置為 true 即可;
如果微信的 x5 設置為 true , 那么在安卓中微信環境下是無法播放的,是有問題的;
下面的代碼是部分代碼,僅供參考設置:
<script> import 'video.js/dist/video-js.css' import { videoPlayer } from 'vue-video-player' export default { name: 'Video', props: { videoUrl: Object }, data() { return{ playerOptions: { playbackRates: [0.7, 1.0, 1.5, 2.0], autoplay: false, muted: false, loop: false, preload: 'auto', language: 'zh-CN', aspectRatio: '16:9', fluid: true, sources: [{ type: "video/mp4", src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm" }], poster: "http://localhost/547be638615da10.png", width: document.documentElement.clientWidth, notSupportedMessage: '此視頻暫無法播放,請稍后再試', controlBar: { timeDivider: true, durationDisplay: true, remainingTimeDisplay: false, fullscreenToggle: true //全屏按鈕 } }, videoButton: require("../video_player.png"), } }, components: { videoPlayer }, mounted() { this.playerOptions.sources[0].src = this.videoUrl.a; this.playerOptions.poster = this.videoUrl.b }, computed: { player() { return this.$refs.videoPlayer.player }, playsinline(){ var ua = navigator.userAgent.toLocaleLowerCase(); if (ua.match(/tencenttraveler/) != null || ua.match(/qqbrowse/) != null) { return false }else{ return true } } }, methods: { clickStartButton: function(){ this.$refs.videoPlayer.player.play(); }, onPlayerPlay(player) { this.videoPlayState = true; } } } </script>
以上這篇vue video和vue-video-實現視頻鋪滿教程就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持易盾網絡。