某天接到了一个任务,播放一个视频流。后端大哥发给我一个rtmp流,然后,踩坑之旅就开始了。
“这很简单嘛,百度上都是使用vue-video-play插件,设置一下source就行了”。这个先入为主的观点,害得我花了整完去解决各种各样的问题。approach哭辽
解决:
然后发现是视频流格式不对,叫后端大哥返回APPhls就可了。
rtmp格式,需要浏览器有flash插件。而大部分浏览器chrome官方下载已经不支持安装插件,包括我想从chrome里设置后端开发是干什么的再使用依旧没成功。
对比一下其他后端开发几种视频流格式:
rtsp: 需要浏览器安装插件
flv后端开发工程师:不支持ios系统。不支持ie浏览器。首屏快,延时低、支持传输加密、支持浏览器无控件化播放。
hls:缺点是有延时,初次加载很慢。优点是系统兼容性较好、支持传输加密、支持浏览器无控件化appointment播放。
代码:
可做测试的hls流:
devstreaming.cdn.applios下载e.com/vide测试抑郁症的20道题os/stre…
1后端开发工程师 导入组件
npminstallvue-video-player--save
2 引用组件
import VueVideoPlayer from 'vue-video-player' import 'video.js/dist/video-js.css' Vue.use(VueVideoPlayer)
3 应用组件
记得type不要填
import { videoPlayer } from 'vue-video-player'
<videoPlayer
class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions">
</videoPlayer>
<script>
export default {
data() {
return {
playerOptions: {
playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度
autoplay: true, // 如果true,浏览器准备好时开始回放。
controls: true, // 控制条
preload: 'auto', // 视频预加载
muted: false, // 默认情况下将会消除任何音频。
loop: false, // 导致视频一结束就重新开始。
language: 'zh-CN',
aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
sources: [
{
type: '',
src: "http://39.156.9.146:83/openUrl/O1uVeGA/live.m3u8",
},
],
notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
},
}
},
}
<script>
4 格式调整
修改播放按钮格式
::v-deep .vjs-custom-skin > .video-js .vjs-big-play-button { background-color: rgba(0, 0, 0, 0.45); font-size: 3.5em; border-radius: 50%; height: 2em !important; line-height: 2em !important; width: 2em !important; margin-left: 150px !important; margin-top: 90px !important; outline: none; }
5 实现打开界面就自动播放
<videoPlayer
class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions"
@play="onPlayerPlay($event)">
</videoPlayer>
created() { this.onPlayerPlay(this.$refs.videoPlayer.player) }, computed: { player() { return this.$refs.videoPlayer.play } }, methods: { onPlayerPlay() { const myPlayer = this.$refs.videoPlayer.player myPlayer.play() }, }
6 实现多个视频播放
data() { return { playerOptions: [], } },
给options赋值
for (let i = 0; i < this.hlsList.length; i++) { let option = { playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度 autoplay: true, // 如果true,浏览器准备好时开始回放。 controls: true, // 控制条 preload: 'auto', // 视频预加载 muted: false, // 默认情况下将会消除任何音频。 loop: false, // 导致视频一结束就重新开始。 language: 'zh-CN', aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3") fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。 sources: [ { type: '', src: this.hlsList[i], }, ], notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。 } this.playerOptions.push(option) }
展示
<el-row class="videoList">
<el-col class="video1">
<videoPlayer
class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions[0]"
@play="onPlayerPlay($event)"
></videoPlayer></el-col>
<el-col class="video2">
<videoPlayer
class="video-player vjs-custom-skin"
ref="videoPlayer"
:playsinline="true"
:options="playerOptions[1]"
@play="onPlayerPlay($event)"
></videoPlayer></el-col>
</el-row>
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)