和
- 和 直播播放flv视频
和 直播播放flv视频
H5 的video标签并不支持flv格式的视频,毕竟flash马上就要废弃了,记录使用和的坑
官网文档: /
videojs最新版本已经将核心库和辅助库已经剥离开来, 低版本包含flash插件,比较新的版本我们要播放rtmp流和hls流需要另外安装它的两个插件videojs-flash和videojs-contrib-hls
我的使用背景: 用vue-cli 搭的脚手架,vue项目
- 安装
npm install video.js -S
- 1
- 安装两个插件videojs-flash和videojs-contrib-hls
npm install videojs-flash videojs-contrib-hls -S
- 1
- Vue工程中的主入口进行引入
// src/ => 主入口文件
import Vue from 'vue';
...
// 引入videojs
import Video from '';
import '/dist/';
Vue.prototype.$video = video; // 在原型上注册
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 同样我们需要在主入口文件中引入
// src/ => 主入口文件
import Vue from 'vue';
...
// 引入videojs
import Video from '';
import '/dist/';
Vue.prototype.$video = video;
import 'videojs-flash'; // 要播放rtmp流, 必须引入
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 现在就可以在项目中使用了
可以在js中注册使用的容器,也可以在html模板中定义。
html模板中定义
<div class="content">
<video id='video_1' class="video-js vjs-default-skin vjs-big-play-centered"/>
</div>
- 1
- 2
- 3
这里面可以添加你需要的设置选项,比如控件、是否自动播放以及是否静音等。
js中定义,这里用了jQuery和ES6的模板字符串
$('.content').append(`<video id='video_1' class="video-js vjs-default-skin vjs-big-play-centered"/>`)
- 1
一般在js中定义比较方便:
$('.content').append(`<video id='video_1' class="video-js vjs-default-skin vjs-big-play-centered"/>`)
let myvideo = this.$video(document.querySelector('#video_1'), {
autoplay: true, // 是否自动播放
controls: true, // 是否显示控件
muted: true, // 是否静音
fill: true // 是否适应容器进行缩放
})
myvideo.src({
src: this.nowPlayVideoUrl,
type: 'rtmp/flv'
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
这里一定注意,创建新的(比如更换地址)之前先销毁之前的,不然会控制台一直会报TypeError: this.el_.vjs_getProperty is not a function错误, 而且这个错误是累加的。
创建新的销毁旧的
let oldvideo = $this.$video(document.querySelector('#video_1')) // 找到之前容器内的video
oldvideo.dispose() // 销毁
// 销毁后容器也一并销毁了,所以新建前再次初始化容器
$('.content').append(`<video id='video_1' class="video-js vjs-default-skin vjs-big-play-centered"/>`)
let myvideo = this.$video(document.querySelector('#video_1'), {
autoplay: true, // 是否自动播放
controls: true, // 是否显示控件
muted: true, // 是否静音
fill: true // 是否适应容器进行缩放
})
myvideo.src({
src: this.nowPlayVideoUrl,
type: 'rtmp/flv'
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
最后beforeDestroy中销毁最后的
beforeDestroy () {
this.myvideo.dispose()
- 1
- 2
是哔哩哔哩一个员工写的,具体介绍见网址:/bilibili/
- 安装
npm install --save flv.js
- 1
- 主入口文件中引入
import flv from ''
- 1
依然可以在HTML或js中初始化,这里采用html中初始化容器,不再累述
let myvideo = flv.createPlayer({
type: 'flv/mp4',
url: url,
isLive: true
})
let videodocument = document.querySelector('#video_1')
myvideo.attachMediaElement(videodocument)
myvideo.load()
myvideo.play()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
很多个性参数可以参考 GitHub
记得销毁
beforeDestroy () {
this.myvideo.destroy()
},
- 1
- 2
- 3