电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

瀏覽:3日期:2022-11-08 14:59:57

網(wǎng)頁放置視頻播放器,我一般都是用video.js和它的插件vue-video-player

一:Video.js

需求:對(duì)于簡(jiǎn)單的視頻播放需求來說,video.js足以勝任了。

它可是支持HTML5和Flash的視頻播放器呦。

1:安裝video.js

npm install -s video.js

2:在main.js文件中引入相關(guān)文件

import Video from ’video.js’import ’video.js/dist/video-js.css’Vue.prototype.$video = Video

3:在組件中使用

<template> <div class='video_text'> <video > <source :src='http://www.hdgsjgj.cn/bcjs/videoUrl' type='video/mp4' > </video> </div></template>

<script> export default { name: 'Video', data() { return { videoUrl:’...’,//視頻地址 }; }, mounted() { this.initVideo(); //初始化視頻播放器 }, methods: { initVideo() { //初始化視頻方法 let myPlayer = this.$video(myVideo, { //是否顯示控制欄 controls: true, //是否自動(dòng)播放,muted:靜音播放 autoplay: false, //是否靜音播放 muted:false, //是否流體自適應(yīng)容器寬高 fluid:true, //設(shè)置視頻播放器的顯示寬度(以像素為單位) width: '800px', //設(shè)置視頻播放器的顯示高度(以像素為單位) height: '400px' }); } } };</script>

<style lang='less'> .video_text{ width: 70%; margin: 0 auto; } video:focus{ outline: 0; //去掉選中藍(lán)框 } .video-js .vjs-big-play-button{ /*對(duì)播放按鈕的樣式進(jìn)行設(shè)置*/ width: 100px; height: 60px; position: absolute; top: 50%; left: 50%; transform: translate3d(-50%,-50%,0); }</style>

4:效果圖

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

5:附上video.js的一些基本方法

myPlayer.ready(function(){ //視頻播放器初始化完成后的回調(diào)函數(shù),this代表當(dāng)前播放器,可以在這進(jìn)行一系列的操作(myPlayer為我視頻播放器對(duì)象) myPlayer.play(); //播放 myPlayer.pause(); //暫停 var currentTime = myPlayer.currentTime(); //當(dāng)前播放進(jìn)度 myPlayer.currentTime(120); //自定義修改當(dāng)前進(jìn)度 var duration = myPlayer.duration(); //加載完成視頻后就可以獲取視頻總時(shí)長(zhǎng)了,注意:在flash情況下無效! var buffered = myPlayer.buffered(); //視頻緩沖,返回值為下載了多大文件 var bufferedPercent = myPlayer.bufferedPercent(); //視頻緩沖,返回值為下載了百分之幾 var volume = myPlayer.volume(); //獲取視頻音量大小,值在0-1之間 myPlayer.volume(0.2); //設(shè)置視頻音量大小 var width = myPlayer.width(); //獲取視頻的寬度 myPlayer.width(640); //設(shè)置視頻的寬度 var howTallIsIt = myPlayer.height(); //獲取視頻的高度 myPlayer.height(200); //設(shè)置視頻高度 myPlayer.size(640,480); //同時(shí)設(shè)置視頻高寬 myPlayer.enterFullScreen(); //視頻全屏顯示 myPlayer.enterFullScreen(); //視頻退出全屏顯示})

除此之外,我們還可以綁定監(jiān)聽事件:

//視頻播放完畢的回調(diào)事件myPlayer.on('ended', function(){ console.log('end', this.currentTime());});//視頻暫停的回調(diào)事件 myPlayer.on('pause', function(){ console.log('pause')});//視頻刪除事件myPlayer.removeEvent(“eventName”, function(){ console.log('delete')});二:vue-video-player

1:下載vue-video-player

npm install -s vue-video-player

2:在main.js中引入相關(guān)文件

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’//如果你需要自定義播放器的樣式,自己新建一個(gè)cssrequire(’./assets/css/video_css/myvideo.css’)Vue.use(VideoPlayer)

3:組件中使用(有點(diǎn)長(zhǎng),其實(shí)多數(shù)是列出的一些回調(diào)函數(shù)而已,不需要使用的話忽略掉即可)

<template> <div class='my_video'> <video-player ref='videoPlayer' :playsinline='true' :options='videoPlayerOptions' @play='onPlayerPlay($event)' @pause='onPlayerPause($event)' @ended='onPlayerEnded($event)' @waiting='onPlayerWaiting($event)' @playing='onPlayerPlaying($event)' @loadeddata='onPlayerLoadeddata($event)' @timeupdate='onPlayerTimeupdate($event)' @canplay='onPlayerCanplay($event)' @canplaythrough='onPlayerCanplaythrough($event)' @statechanged='playerStateChanged($event)' @ready='playerReadied' ></video-player> </div></template><script> // 導(dǎo)入組件 import {videoPlayer} from ’vue-video-player’ export default { name: ’VideoPlayer’, components: { videoPlayer }, data () { return { video:’’, //具體視頻 fileType: ’mp4’, // 資源的類型 videoUrl: ’’, // 資源的路徑地址 posterUrl:’’ //封面地址 } }, mounted(){ }, methods:{ // 播放回調(diào) onPlayerPlay(player) { //console.log(’player play!’, player) }, // 暫停回調(diào) onPlayerPause(player) { //console.log(’player pause!’, player) }, // 視頻播完回調(diào) onPlayerEnded($event) { this.$refs.videoPlayer.player.src(this.fileUrl) }, // DOM元素上的readyState更改導(dǎo)致播放停止 onPlayerWaiting($event) { //console.log(player) }, // 已開始播放回調(diào) onPlayerPlaying($event) { // console.log(player) }, // 當(dāng)播放器在當(dāng)前播放位置下載數(shù)據(jù)時(shí)觸發(fā) onPlayerLoadeddata($event) { // console.log(player) }, // 當(dāng)前播放位置發(fā)生變化時(shí)觸發(fā)。 onPlayerTimeupdate($event) { //console.log(player) }, //媒體的readyState為HAVE_FUTURE_DATA或更高 onPlayerCanplay(player) { // console.log(’player Canplay!’, player) }, //媒體的readyState為HAVE_ENOUGH_DATA或更高。這意味著可以在不緩沖的情況下播放整個(gè)媒體文件。 onPlayerCanplaythrough(player) { // console.log(’player Canplaythrough!’, player) }, //播放狀態(tài)改變回調(diào) playerStateChanged(playerCurrentState) { //console.log(’player current update state’, playerCurrentState) }, //將偵聽器綁定到組件的就緒狀態(tài)。與事件監(jiān)聽器的不同之處在于,如果ready事件已經(jīng)發(fā)生,它將立即觸發(fā)該函數(shù)。。 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, // 是否自動(dòng)播放。 muted: false, // 是否靜音播放,默認(rèn)情況下將會(huì)消除任何音頻。 loop: false, // 是否循環(huán)播放。 preload: ’auto’, // 建議瀏覽器在<video>加載元素后是否應(yīng)該開始下載視頻數(shù)據(jù)。auto瀏覽器選擇最佳行為,立即開始加載視頻(如果瀏覽器支持) language: ’zh-CN’, aspectRatio: ’3:1’, // 將播放器置于流暢模式,并在計(jì)算播放器的動(dòng)態(tài)大小時(shí)使用該值。值應(yīng)該代表一個(gè)比例 - 用冒號(hào)分隔的兩個(gè)數(shù)字(例如'16:9'或'4:3') fluid: true, // 是否流體從而按比例縮放以適應(yīng)其容器。 flash:{hls:{withCreadentials:false}},//可以播放rtmp視頻 html5:{hls:{withCreadentials:false}},//可以播放m3u8視頻 sources: [{ type: ’video/’ + this.fileType, src: this.videoUrl // 視頻url地址 }], poster: this.posterUrl, // 封面地址 width: ’100%’, notSupportedMessage: ’此視頻暫無法播放...’, // 當(dāng)無法播放時(shí)允許覆蓋Video.js,顯示的默認(rèn)信息。 controlBar: { timeDivider: true, durationDisplay: true, remainingTimeDisplay: false, fullscreenToggle: true } } return videoPlayerOptions } }, }</script><style scoped lang='less'> .my_video{ width: 100%; height: calc(100vh - 100px); background-color: white; } .video-js .vjs-big-play-button{ /*對(duì)播放按鈕的樣式進(jìn)行設(shè)置*/ width: 100%; height: 100%; border-radius: 50%; }</style>

4:效果圖

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

一些改進(jìn):

1:消除視頻兩邊留白,也就是實(shí)現(xiàn)視頻鋪滿父元素

通過添加樣式object-fit:fill;來實(shí)現(xiàn)視頻鋪滿

video{ width: 100% !important; height: calc(100vh - 95px) !important; object-fit:fill; //消除留白 }

效果圖:(視頻左右兩邊是沒有黑邊了的)

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

補(bǔ)充object-fit取值的相關(guān)知識(shí):

fill:此值為boject-fit的默認(rèn)值,替換內(nèi)容的大小被設(shè)置為填充元素的內(nèi)容框,也就是說,元素的內(nèi)容擴(kuò)大到完全填充容器的外形尺寸,即使這打破其內(nèi)在的寬高比。

contain:替換元素內(nèi)容大小保持長(zhǎng)寬比例填充元素內(nèi)容容器,其具體對(duì)象大小被解析為一個(gè)包含元素的寬度和高度。也就是說,如果你在替換元素上設(shè)置一個(gè)明確的高度和寬度,此值將導(dǎo)致內(nèi)容大小,完全在固定的比例顯示,但仍在元素尺寸內(nèi)顯示。

cover:替換元素內(nèi)容大小保持長(zhǎng)寬比例填充元素內(nèi)容容器,其具體對(duì)象大小被解析為覆蓋整個(gè)元素的寬度和高度。也就是說,替換元素內(nèi)容大小保持長(zhǎng)寬比,但改變寬度和高度,以便完全覆蓋內(nèi)容元素。

none:替換元素內(nèi)容不調(diào)整大小以適應(yīng)內(nèi)部元素的容器,內(nèi)容完全忽略設(shè)置在元素上的任何高度和權(quán)重,并且仍在元素尺寸內(nèi)顯示。 scale-down:當(dāng)內(nèi)容大小設(shè)置了none或contain,將導(dǎo)致具體對(duì)象變得更小。

2:實(shí)現(xiàn)自適應(yīng)高寬

通過上面設(shè)置的fluid:true雖然可以自適應(yīng)寬高,但有時(shí)候需求是規(guī)定視頻總高度的,如果只是靠fluid來自適應(yīng)是遠(yuǎn)遠(yuǎn)不夠的。

我的需求效果圖:

pc端:

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

移動(dòng)端:

vue video和vue-video-player實(shí)現(xiàn)視頻鋪滿教程

我遇到的問題:

設(shè)置video視頻高寬100%后,總高度卻超出了那個(gè)位置的高度,試了很多方法都不行,后來就才去了簡(jiǎn)單粗暴的方法去解決?修改css樣式。(覺得有用再用吧各位)

注意:這里我是去掉了之前在videoPlayerOptions中設(shè)置的fluid:true和aspectRatio: ’16:10’再改css樣式的

html代碼:

<div class='my_video'> <video-player ref='videoPlayer' :playsinline='true' :webkit-playsinline='true' :options='videoPlayerOptions' ></video-player> </div>

自定義css樣式:

@media screen and(min-width:768px){ //pc端視頻鋪滿且占據(jù)整個(gè)容器的高寬,而移動(dòng)端不需要視頻占據(jù)整個(gè)高度,因?yàn)闀?huì)拉長(zhǎng)視頻,很難看

video{ width: 100% !important; height: calc(100vh - 95px) !important; //我的容器高度設(shè)置的是100vh-95px,你們根據(jù)你們?nèi)萜鞲叨仍O(shè)置視頻高度即可 object-fit:fill; //消除兩邊留白 } } //為了填滿整個(gè)my_video的高度,設(shè)置video外層div高度(就是移動(dòng)端效果圖包含黑色部分和視頻部分的整個(gè)div),使之為容器高度 #videoDiv>div{ height: calc(100vh - 95px) !important; overflow: hidden; } .my_video{ //這是我放視頻播放器的容器 width: 100%; height: calc(100vh - 95px); background-color: white; }

補(bǔ)充知識(shí):vue中使用 vue-video-player的幾個(gè)問題

video.js 插件在vue中是 vue-video-player;

我們?cè)趘ue中播放視頻可以使用這個(gè)插件;

下面簡(jiǎn)單描述幾個(gè)使用中的問題,不涉及其他問題:

1、自定義播放處理 , 我們自己如何去觸發(fā)播放這個(gè)事件

2、播放,停止觸發(fā)的函數(shù)相關(guān)處理;

3、在安卓的微信中播放視頻不能播放的問題;

1、自定義播放,假設(shè)現(xiàn)在自己寫了一個(gè)button, 或者其他什么東西放在視頻上方,要求點(diǎn)擊這個(gè)玩意兒播放視頻,

你也可以理解為播放按鈕; 那么首先肯定得綁定事件,vue綁定事件就不說了,應(yīng)該都會(huì),那么在這個(gè)綁定的

事件函數(shù)中,我們?nèi)绾稳ゲシ乓曨l呢?:this.$refs.videoPlayer.player.play(); 就可以了

2、播放或者停止播放時(shí),我想怎加一些額外的處理,那么可以在 <video-player @play=... @pause...>

如下代碼,在相應(yīng)的函數(shù)中處理即可,還有其它的事件也都類似處理;

3、在<video-player :playsinline =....> 設(shè)置 playsinline 參數(shù)的時(shí)候,如果我們?cè)O(shè)置為true 或者 false 是會(huì)出問題的,

所以需要根據(jù)情況進(jìn)行處理,這里的情況一般是微信瀏覽器的 x5內(nèi)核,需要設(shè)置為 false, 其它的設(shè)置為 true 即可;

如果微信的 x5 設(shè)置為 true , 那么在安卓中微信環(huán)境下是無法播放的,是有問題的;

下面的代碼是部分代碼,僅供參考設(shè)置:

<template> <div class='video'> <video-player ref='videoPlayer' :options='playerOptions' :playsinline='playsinline' customEventName='customstatechangedeventname' @play='onPlayerPlay($event)' @pause='onPlayerPause($event)' > </video-player> </div></template> <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: ’此視頻暫無法播放,請(qǐng)稍后再試’,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-player實(shí)現(xiàn)視頻鋪滿教程就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 高考志愿规划师_高考规划师_高考培训师_高报师_升学规划师_高考志愿规划师培训认证机构「向阳生涯」 | 小青瓦丨古建筑瓦丨青瓦厂家-宜兴市徽派古典建筑材料有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备| 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 电子书导航网_电子书之家_电子书大全_最新电子书分享发布平台 | 苏州注册公司_苏州代理记账_苏州工商注册_苏州代办公司-恒佳财税 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 土壤养分检测仪_肥料养分检测仪_土壤水分检测仪-山东莱恩德仪器 大型多片锯,圆木多片锯,方木多片锯,板材多片锯-祥富机械有限公司 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 慢回弹测试仪-落球回弹测试仪-北京冠测精电仪器设备有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | 诺冠气动元件,诺冠电磁阀,海隆防爆阀,norgren气缸-山东锦隆自动化科技有限公司 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 武汉高温老化房,恒温恒湿试验箱,冷热冲击试验箱-武汉安德信检测设备有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 软装设计-提供软装装饰和软装配饰及软装陈设的软装设计公司 | 高精度-恒温冷水机-螺杆式冰水机-蒸发冷冷水机-北京蓝海神骏科技有限公司 | 代写标书-专业代做标书-商业计划书代写「深圳卓越创兴公司」 | PE拉伸缠绕膜,拉伸缠绕膜厂家,纳米缠绕膜-山东凯祥包装 | 玉米加工设备,玉米深加工机械,玉米糁加工设备.玉米脱皮制糁机 华豫万通粮机 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 冷却塔厂家_冷却塔维修_冷却塔改造_凉水塔配件填料公司- 广东康明节能空调有限公司 | 气动机械手-搬运机械手-气动助力机械手-山东精瑞自动化设备有限公司 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 次氯酸钠厂家,涉水级次氯酸钠,三氯化铁生产厂家-淄博吉灿化工 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 |