vue實(shí)現(xiàn)監(jiān)控視頻直播的示例代碼
要想使用videojs我們勢(shì)必是需要安裝videojs的, 而且在生產(chǎn)環(huán)境中我們也需要依賴(lài)它, 所以如下
npm: ?npm install video.js -S npm install videojs-flash videojs-contrib-hls -S
我們打開(kāi)Vue工程中的主入口main.js進(jìn)行引入
// 引入videojs import Video from 'video.js'; import 'video.js/dist/video-js.css'; Vue.prototype.$video = Video; import hls from 'videojs-contrib-hls'; Vue.use(hls); // 要播放hls流
創(chuàng)建監(jiān)控視頻九宮格
<template>
? <div class="cell">
? ? <div class="cell-player">
? ? ? <div :class="cellClass(i)" v-for="i in cellCount" :key="i">
? ? ? ? <playVideo :video="videoInfo[i]" v-if="cellCount != 6"></playVideo>
? ? ? ? <playVideo :video="videoInfo[i]" v-if="cellCount == 6 && i != 2 && i != 3"></playVideo>
? ? ? ? <template v-if="cellCount == 6 && i == 2">
? ? ? ? ? <div class="cell-player-6-2-cell">
? ? ? ? ? ? <playVideo :video="videoInfo[i]"></playVideo>
? ? ? ? ? ? <playVideo :video="videoInfo[++i]"></playVideo>
? ? ? ? ? </div>
? ? ? ? </template>
? ? ? </div>
? ? </div>
? ? <div class="cell-tool">
? ? ? <div class="bk-button-group">
<!-- ? ? ? ?<el-button @click="cellCount = 1" size="small">1</el-button>-->
? ? ? ? <el-button @click="cellCount = 4" size="small">4</el-button>
<!-- ? ? ? ?<el-button @click="cellCount = 6" size="small">6</el-button>-->
? ? ? ? <el-button @click="cellCount = 9" size="small">9</el-button>
<!-- ? ? ? ?<el-button @click="cellCount = 16" size="small">16</el-button>-->
? ? ? </div>
? ? </div>
? </div>
</template>
<script>
? import playVideo from '@/views/test/playVideo'
? export default {
? ? name: 'dashboard',
? ? components: {
? ? ? playVideo
? ? },
? ? data() {
? ? ? return {
? ? ? ? videoInfo: [
? ? ? ? ? {url: "", index: 0, name: "測(cè)試1"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a72s5d84ded3180d81.m3u8", index: 1, name: "測(cè)試1"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a725sd84ded3180d81.m3u8", index: 2, name: "測(cè)試2"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a7s25d84ded3180d81.m3u8", index: 3, name: "測(cè)試3"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/b27fa374e9d749ddb22bs4a12e843a3131.m3u8", index: 10, name: "測(cè)試4"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a7s2s5d84ded3180d8.m3u8", index: 4, name: "測(cè)試5"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a725sd84ded3180d8.m3u8", index: 5, name: "測(cè)試6"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a725sd84ded31280d8.m3u8", index: 6, name: "測(cè)試7"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a725sd84ded33180d8.m3u8", index: 7, name: "測(cè)試8"},
? ? ? ? ? {url: "http://hls01open.ys7.com/openlive/699a3134f0864d81a725sd84ded31480d8.m3u8", index: 8, name: "測(cè)試9"},
? ? ? ? ],
? ? ? ? cellCount: 9
? ? ? }
? ? },
? ? methods: {},
? ? computed: {
? ? ? cellClass() {
? ? ? ? return function (index) {
? ? ? ? ? switch (this.cellCount) {
? ? ? ? ? ? case 1:
? ? ? ? ? ? ? return ['cell-player-1']
? ? ? ? ? ? case 4:
? ? ? ? ? ? ? return ['cell-player-4']
? ? ? ? ? ? case 6:
? ? ? ? ? ? ? if (index == 1)
? ? ? ? ? ? ? ? return ['cell-player-6-1']
? ? ? ? ? ? ? if (index == 2)
? ? ? ? ? ? ? ? return ['cell-player-6-2']
? ? ? ? ? ? ? if (index == 3)
? ? ? ? ? ? ? ? return ['cell-player-6-none']
? ? ? ? ? ? ? return ['cell-player-6']
? ? ? ? ? ? case 9:
? ? ? ? ? ? ? return ['cell-player-9']
? ? ? ? ? ? case 16:
? ? ? ? ? ? ? return ['cell-player-16']
? ? ? ? ? ? default:
? ? ? ? ? ? ? break;
? ? ? ? ? }
? ? ? ? }
? ? ? },
? ? },
? }
</script>
<style>
? .cell-tool {
? ? height: 40px;
? ? line-height: 30px;
? ? padding: 0 7px;
? }
? .cell-player {
? ? flex: 1;
? ? display: flex;
? ? flex-wrap: wrap;
? ? justify-content: space-between;
? }
? .cell-player-4 {
? ? width: 50%;
? ? height: 50% !important;
? ? box-sizing: border-box;
? }
? .cell-player-1 {
? ? width: 100%;
? ? box-sizing: border-box;
? }
? .cell-player-6-1 {
? ? width: 66.66%;
? ? height: 66.66% !important;
? ? box-sizing: border-box;
? }
? .cell-player-6-2 {
? ? width: 33.33%;
? ? height: 66.66% !important;
? ? box-sizing: border-box;
? ? display: flex;
? ? flex-direction: column;
? }
? .cell-player-6-none {
? ? display: none;
? }
? .cell-player-6-2-cell {
? ? width: 100%;
? ? height: 50% !important;
? ? box-sizing: border-box;
? }
? .cell-player-6 {
? ? width: 33.33%;
? ? height: 33.33% !important;
? ? box-sizing: border-box;
? }
? .cell-player-9 {
? ? width: 33.33%;
? ? height: 33.33% !important;
? ? box-sizing: border-box;
? }
? .cell-player-16 {
? ? width: 25%;
? ? height: 25% !important;
? ? box-sizing: border-box;
? }
? .cell {
? ? display: flex;
? ? flex-direction: column;
? ? height: 100%;
? }
</style>創(chuàng)建視頻容器
雖然是遍歷視頻容器組件,但是監(jiān)控視頻只播放第一個(gè),所以這里創(chuàng)建視頻容器時(shí),需要保證容器id不一致。
<template>
<div class="player">
? <div>{{video.name}}</div>
? <video :id='"A"+video.index'
? ? ? ? ?style="width: 100%;"
? ? ? ? ?class="video-js vjs-default-skin vjs-big-play-centered ?"> </video>
</div>
</template>
<script>
? export default {
? ? name: "playVideo",
? ? props: {
? ? ? video: {
? ? ? ? url: "",
? ? ? ? index:0,
? ? ? }
? ? },
? ? data() {return {}},
? ? mounted() {
? ? ? this.initVideoPlayer();
? ? },
? ? methods: {
? ? ? initVideoPlayer() {
? ? ? ? var that=this;
? ? ? ? var id="#A"+this.video.index;
? ? ? ? ? const currentInstance = that.$video(document.querySelector(id),{
? ? ? ? ? ? autoplay:true,
? ? ? ? ? ? controls:true
? ? ? ? ? }).src({
? ? ? ? ? ? src: that.video.url,
? ? ? ? ? ? type: 'application/x-mpegURL',
? ? ? ? ? })
? ? ? },
? ? }
? }
</script>
<style scoped>
? .player ?{
? ? background-color: black;
? ? width: 100%;
? ? height: 100%;
? ? border: 1px solid white;
? ? color: white;
? ? text-align: center;
? }
</style>

到此這篇關(guān)于vue實(shí)現(xiàn)監(jiān)控視頻直播的示例代碼的文章就介紹到這了,更多相關(guān)vue 監(jiān)控視頻直播內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue播放flv、m3u8視頻流(監(jiān)控)的方法實(shí)例
- 使用VUE和webrtc-streamer實(shí)現(xiàn)實(shí)時(shí)視頻播放(監(jiān)控設(shè)備-rtsp)
- vue+flv.js+SpringBoot+websocket實(shí)現(xiàn)視頻監(jiān)控與回放功能
- vue-video-player實(shí)現(xiàn)實(shí)時(shí)視頻播放方式(監(jiān)控設(shè)備-rtmp流)
- vue + typescript + video.js實(shí)現(xiàn) 流媒體播放 視頻監(jiān)控功能
- Vue 3集成??礧eb插件實(shí)現(xiàn)視頻監(jiān)控功能
相關(guān)文章
Vue列表如何實(shí)現(xiàn)滾動(dòng)到指定位置樣式改變效果
這篇文章主要介紹了Vue列表實(shí)現(xiàn)滾動(dòng)到指定位置樣式改變效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
大前端代碼重構(gòu)之事件攔截iOS?Flutter?Vue示例分析
這篇文章主要為大家介紹了大前端代碼重構(gòu)之事件攔截iOS?Flutter?Vue示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
ant-design-vue 實(shí)現(xiàn)表格內(nèi)部字段驗(yàn)證功能
這篇文章主要介紹了ant-design-vue 實(shí)現(xiàn)表格內(nèi)部字段驗(yàn)證功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12
el-table實(shí)現(xiàn)給每行添加loading效果案例
這篇文章主要介紹了el-table實(shí)現(xiàn)給每行添加loading效果案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
解決Antd輸入框卡頓問(wèn)題以及Pubsub.js的使用方式
這篇文章主要介紹了解決Antd輸入框卡頓問(wèn)題以及Pubsub.js的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04
Vue項(xiàng)目中安裝依賴(lài)npm?install一直報(bào)錯(cuò)的解決過(guò)程
這篇文章主要給大家介紹了關(guān)于Vue項(xiàng)目中安裝依賴(lài)npm?install一直報(bào)錯(cuò)的解決過(guò)程,要解決NPM安裝依賴(lài)報(bào)錯(cuò),首先要分析出錯(cuò)誤的原因,文中將解決的過(guò)程介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
vue.js父子組件傳參的原理與實(shí)現(xiàn)方法
這篇文章主要介紹了vue.js父子組件傳參的原理與實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了vue.js父子組件傳參的基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2023-04-04
簡(jiǎn)單了解Vue computed屬性及watch區(qū)別
這篇文章主要介紹了通過(guò)實(shí)例解析Vue computed屬性及watch區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07

