关于videojs:vue3视频播放插件vue3videoplay的具体使用方法

之前的vue我的项目中用到视频播放器,然而UI不是很难看,索性就打算写一个视频播放器插件紧随着vue3的公布,vue3的生态还不是很残缺,就索性把这个视频播放器插件批改成了vue3版插件Github地址 vue-video-player 先看一下这个播放器(vue3-video-play)的界面吧 vue3-video-play视频播放插件基于原生的HTML5的 <video> 标签 开发,所以反对的视频格式和 <video> 统一,并且反对<video>标签的所有原生属性和办法 主页https://xdlumia.github.io 性能一览反对快捷键操作反对倍速播放设置反对镜像画面设置反对关灯模式设置反对画中画模式播放反对全屏播放反对网页全屏播放装置npm装置: npm i vue3-video-play --saveyarn装置: yarn add vue3-video-play --save开始应用全局应用import { createApp } from 'vue'import App from './App.vue'let app = createApp(App)import videoPlay from 'vue3-video-play' // 引入组件import 'vue3-video-play/dist/style.css' // 引入cssapp.use(videoPlay)app.mount('#app')组件内应用// require stylesimport 'vue3-video-play/dist/style.css'import { videoPlay } from 'vue-video-player'export default { components: { videoPlay }}SPA 单页面应用示例<template> <div> <videoPlay v-bind="options" @play="onPlay" @pause="onPause" @timeupdate="onTimeupdate" @canplay="onCanplay" /> </div></template><script setup lang="ts">import { reactive } from 'vue';import { videoPlay } from '../lib/index.js';const options = reactive({ width: '800px', //播放器高度 height: '450px', //播放器高度 color: "#409eff", //主题色 muted: false, //静音 webFullScreen: false, speedRate: ["0.75", "1.0", "1.25", "1.5", "2.0"], //播放倍速 autoPlay: false, //自动播放 loop: false, //循环播放 mirror: false, //镜像画面 ligthOff: false, //关灯模式 volume: 0.3, //默认音量大小 control: true, //是否显示控制器 title: '', //视频名称 src: "http://vjs.zencdn.net/v/oceans.mp4", //视频源 poster: '', //封面})const onPlay = (ev) => { console.log('播放')}const onPause = (ev) => { console.log(ev, '暂停')}const onTimeupdate = (ev) => { console.log(ev, '工夫更新')}const onCanplay = (ev) => { console.log(ev, '能够播放')}</script><style scoped></style>Propsvue3-video-play反对video原生所有属性 video默认属性 应用形式和props属性应用统一 ...

August 23, 2021 · 1 min · jiezi

记录一波video.js的使用及问题

最近的项目中需要播放视频,鉴于html5元素<video>的一些坑及不想自己造轮子,于是就找到了web端播放视频使用量最多的插件video.js,video.js是国外开发者开发的,英语本身就不好的我看英文文档简直是折磨,国内又没有中文文档,能搜的到的基本是简单的使用及最基本的api的介绍,想要实现一些自定义功能无从下手,所以我在这里整理一份我所遇到的问题及解决方法1、视频初始化video.js有两种初始化方式,一种是在video的html标签之中,一种是使用js来进行初始化1.1、在video中进行初始化<video id=“my-player” class=“video-js” controls preload=“auto” poster="//vjs.zencdn.net/v/oceans.png" width=“600” height=“400” data-setup=’{}’> <source src="//vjs.zencdn.net/v/oceans.mp4" type=“video/mp4”></source> <source src="//vjs.zencdn.net/v/oceans.webm" type=“video/webm”></source> <source src="//vjs.zencdn.net/v/oceans.ogv" type=“video/ogg”></source> <p class=“vjs-no-js”> To view this video please enable JavaScript, and consider upgrading to a web browser that <a href=“https://videojs.com/html5-video-support/" target="_blank”> supports HTML5 video </a> </p></video>效果1.2、使用js进行初始化<!– vjs-big-play-centered可使大的播放按钮居住,vjs-fluid可使视频占满容器 –><video id=“myVideo” class=“video-js vjs-big-play-centered vjs-fluid”> <p class=“vjs-no-js”> To view this video please enable JavaScript, and consider upgrading to a web browser that <a href=“https://videojs.com/html5-video-support/" target="_blank”> supports HTML5 video </a> </p></video><script>var player = videojs(document.getElementById(‘myVideo’), { controls: true, // 是否显示控制条 poster: ‘xxx’, // 视频封面图地址 preload: ‘auto’, autoplay: false, fluid: true, // 自适应宽高 language: ‘zh-CN’, // 设置语言 muted: false, // 是否静音 inactivityTimeout: false, controlBar: { // 设置控制条组件 /* 设置控制条里面组件的相关属性及显示与否 ‘currentTimeDisplay’:true, ’timeDivider’:true, ‘durationDisplay’:true, ‘remainingTimeDisplay’:false, volumePanel: { inline: false, } / / 使用children的形式可以控制每一个控件的位置,以及显示与否 / children: [ {name: ‘playToggle’}, // 播放按钮 {name: ‘currentTimeDisplay’}, // 当前已播放时间 {name: ‘progressControl’}, // 播放进度条 {name: ‘durationDisplay’}, // 总时间 { // 倍数播放 name: ‘playbackRateMenuButton’, ‘playbackRates’: [0.5, 1, 1.5, 2, 2.5] }, { name: ‘volumePanel’, // 音量控制 inline: false, // 不使用水平方式 }, {name: ‘FullscreenToggle’} // 全屏 ] }, sources:[ // 视频源 { src: ‘//vjs.zencdn.net/v/oceans.mp4’, type: ‘video/mp4’, poster: ‘//vjs.zencdn.net/v/oceans.png’ } ]}, function (){ console.log(‘视频可以播放了’,this);});</script>2、controlBar组件的说明playToggle, //播放暂停按钮volumeMenuButton,//音量控制currentTimeDisplay,//当前播放时间timeDivider, // ‘/’ 分隔符durationDisplay, //总时间progressControl, //点播流时,播放进度条,seek控制liveDisplay, //直播流时,显示LIVEremainingTimeDisplay, //当前播放时间playbackRateMenuButton, //播放速率,当前只有html5模式下才支持设置播放速率fullscreenToggle //全屏控制currentTimeDisplay,timeDivider,durationDisplay是相对于 remainingTimeDisplay的另一套组件,后者只显示当前播放时间,前者还显示总时间。若要显示成前者这种模式,即 ‘当前时间/总时间’,可以在初始化播放器选项中配置:var myPlayer = neplayer(‘my-video’, {controlBar:{ ‘currentTimeDisplay’:true, ’timeDivider’:true, ‘durationDisplay’:true, ‘remainingTimeDisplay’:false}}, function() { console.log(‘播放器初始化完成’);});3、video.js样式修改.video-js{ / 给.video-js设置字体大小以统一各浏览器样式表现,因为video.js采用的是em单位 / font-size: 14px;}.video-js button{ outline: none;}.video-js.vjs-fluid,.video-js.vjs-16-9,.video-js.vjs-4-3{ / 视频占满容器高度 / height: 100%; background-color: #161616;}.vjs-poster{ background-color: #161616;}.video-js .vjs-big-play-button{ / 中间大的播放按钮 / font-size: 2.5em; line-height: 2.3em; height: 2.5em; width: 2.5em; -webkit-border-radius: 2.5em; -moz-border-radius: 2.5em; border-radius: 2.5em; background-color: rgba(115,133,159,.5); border-width: 0.12em; margin-top: -1.25em; margin-left: -1.75em;}.video-js.vjs-paused .vjs-big-play-button{ / 视频暂停时显示播放按钮 / display: block;}.video-js.vjs-error .vjs-big-play-button{ / 视频加载出错时隐藏播放按钮 / display: none;}.vjs-loading-spinner { / 加载圆圈 / font-size: 2.5em; width: 2em; height: 2em; border-radius: 1em; margin-top: -1em; margin-left: -1.5em;}.video-js .vjs-control-bar{ / 控制条默认显示 / display: flex;}.video-js .vjs-time-control{display:block;}.video-js .vjs-remaining-time{display: none;}.vjs-button > .vjs-icon-placeholder:before{ / 控制条所有图标,图标字体大小最好使用px单位,如果使用em,各浏览器表现可能会不大一样 / font-size: 22px; line-height: 1.9;}.video-js .vjs-playback-rate .vjs-playback-rate-value{ line-height: 2.4; font-size: 18px;}/ 进度条背景色 /.video-js .vjs-play-progress{ color: #ffb845; background-color: #ffb845;}.video-js .vjs-progress-control .vjs-mouse-display{ background-color: #ffb845;}.vjs-mouse-display .vjs-time-tooltip{ padding-bottom: 6px; background-color: #ffb845;}.video-js .vjs-play-progress .vjs-time-tooltip{ display: none!important;}4、动态切换视频<script> var data = { src: ‘xxx.mp4’, type: ‘video/mp4’ }; var player = videojs(‘myVideo’, {…}); player.pause(); player.src(data); player.load(data); // 动态切换poster player.posterImage.setSrc(‘xxx.jpg’); player.play(); // 销毁videojs //player.dispose();</script>5、设置语言5.1传统形式开发对于使用<script>标签形式的方式引入video.js,只需要在页面中引入你需要的语言包即可<script src="//example.com/path/to/lang/es.js"></script><script src="//example.com/path/to/lang/zh-CN.js"></script><script src="//example.com/path/to/lang/zh-TW.js"></script><script>var player = videojs(‘myVideo’, { language: ‘zh-CN’ // 初始化时设置语言,立即生效});/ 动态切换语言 使用这种方式进行动态切换不会立即生效,必须有所操作后才会生效。如播放按钮,必须点击一次播放按钮后播放按钮的提示文字才会改变 ///player.language(‘zh-TW’);</script>5.2、vue开发import Video from ‘video.js’/ 不能直接引入js,否则会报错:videojs is not defined import ‘video.js/dist/lang/zh-CN.js’ */import video_zhCN from ‘video.js/dist/lang/zh-CN.json’import video_en from ‘video.js/dist/lang/en.json’import ‘video.js/dist/video-js.css’Video.addLanguage(‘zh-CN’, video_zhCN);Video.addLanguage(’en’, video_en);6、未解决的问题控制条的高级自定义,如图中的进度条及时间在上面,播放按钮、上一个视频、下一个视频,设置及音量在下面这种控件该如何实现?如有知道实现这种高级自定义控制条方式的大神请在评论区留下您的代码7、参考文章视频云web播放器样式和组件自定义Video.js 踩坑简单入门免费视频播放器videojs中文教程 ...

April 18, 2019 · 2 min · jiezi

VideoJs使用总结

VideoJs简介VideoJs是用于视频播放的javascript的库。官方文档使用方法<div class=“video”> <video id=“player” class=“video-js vjs-styles-defaults”> <!–<source src="//vjs.zencdn.net/v/oceans.mp4">–> </video> <div id=“playList”></div></div>var player = videojs(‘player’, { controls: true, //控制条:boolean controlBar: { playToggle: { replay: false }, progressControl: false }}, function onPlayerReady() { // 修改this指向 var vdthis = this; videojs.log(‘播放器已经准备好了!’); //this.play(); this.on(’ended’, function() { videojs.log(‘播放结束了!’); });});常用配置Player├── MediaLoader (has no DOM element)├── PosterImage├── TextTrackDisplay├── LoadingSpinner├── BigPlayButton├─┬ ControlBar│ ├── PlayToggle│ ├── VolumePanel│ ├── CurrentTimeDisplay (hidden by default)│ ├── TimeDivider (hidden by default)│ ├── DurationDisplay (hidden by default)│ ├─┬ ProgressControl (hidden during live playback)│ │ └─┬ SeekBar│ │ ├── LoadProgressBar│ │ ├── MouseTimeDisplay│ │ └── PlayProgressBar│ ├── LiveDisplay (hidden during VOD playback)│ ├── RemainingTimeDisplay│ ├── CustomControlSpacer (has no UI)│ ├── PlaybackRateMenuButton (hidden, unless playback tech supports rate changes)│ ├── ChaptersButton (hidden, unless there are relevant tracks)│ ├── DescriptionsButton (hidden, unless there are relevant tracks)│ ├── SubtitlesButton (hidden, unless there are relevant tracks)│ ├── CaptionsButton (hidden, unless there are relevant tracks)│ ├── AudioTrackButton (hidden, unless there are relevant tracks)│ └── FullscreenToggle├── ErrorDisplay (hidden, until there is an error)├── TextTrackSettings└── ResizeManager (hidden)示例let player = videojs(‘myplayer’, { controls: true, //启用控制条:boolean controlBar: { // 隐藏重播图标 playToggle: { replay: false }, // 竖直的音量控制 volumePanel: { inline: false }, // 隐藏播放进度控制 progressControl: false }});事件监控// 播放结束this.on(’ended’, function(e) {}// 播放中this.on(’timeupdate’, function(e) {}扩展插件视频列表管理 videojs-playlistplayer.playlist([{ name: ‘01’, sources: [{ src: ‘http://media.w3.org/2010/05/sintel/trailer.mp4’, type: ‘video/mp4’ }], poster: ‘http://media.w3.org/2010/05/sintel/poster.png’}, { name: ‘02’, sources: [{ src: ‘http://media.w3.org/2010/05/bunny/trailer.mp4’, type: ‘video/mp4’ }], poster: ‘http://media.w3.org/2010/05/bunny/poster.png’}, { ….}]视频列表UI显示 videojs-playlist-uiplayer.playlistUi({ el: document.getElementById(‘playList’)}); ...

January 22, 2019 · 2 min · jiezi