最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用vue-video-player實(shí)現(xiàn)直播的方式

 更新時間:2022年01月04日 11:58:46   作者:鏡兮  
在開發(fā)期間使用過video.js、mui-player等插件,發(fā)現(xiàn)這些video插件對移動端的兼容性都不友好,最后發(fā)現(xiàn)一個在移動端兼容不錯的插件vue-video-player,下面通過場景分析給大家介紹使用vue-video-player實(shí)現(xiàn)直播的方法,感興趣的朋友一起看看吧

課前準(zhǔn)備:直播流協(xié)議https://www.cnblogs.com/yangchin9/p/14930874.html

摘要:在H5頁面實(shí)現(xiàn)觀看直播+視頻回放;在開發(fā)期間使用過video.js、mui-player等插件,發(fā)現(xiàn)這些video插件對移動端的兼容性都不友好,最后發(fā)現(xiàn)一個在移動端兼容不錯的插件——vue-video-player

場景:

移動端H5頁面,項(xiàng)目是vue搭建的,使用的是HLS協(xié)議以m3u8結(jié)尾的直播流

一、安裝vue-video-player

播放HLS視頻流需要安裝 videojs-contrib-hls插件,播放RTMP視頻流則安裝 videojs-flash插件,hls插件與flash插件同時使用時flash插件需要在hls插件之前引入;(資料上講安裝vue-video-player時會自動安裝hls插件,實(shí)際操作中并沒有,還是自己手動安裝吧!)

安裝方式1:

CDN方式,直接在html文件頭部引入文件:
  <link rel="stylesheet" href="path/to/video.js/dist/video-js.css"/>
  <script type="text/javascript" src="path/to/video.min.js"></script>
  <script type="text/javascript" src="path/to/vue.min.js"></script>
  <script type="text/javascript" src="path/to/dist/vue-video-player.js">
  </script>
    <script type="text/javascript"> Vue.use(window.VueVideoPlayer)
  </script>

安裝方式2:

點(diǎn)擊查看代碼

NMP安裝插件:
  npm install vue-video-player --save
    npm install videojs-contrib-hls --save

main.js中引入基礎(chǔ)樣式文件:
// 引入videoPlayer樣式
import 'video.js/dist/video-js.css'
    

按需引入:
import 'videojs-contrib-hls'
import { videoPlayer } from 'vue-video-player'

components: {
    videoPlayer
},    
 
全局引入:
import Vue from 'vue'
import VueVideoPlayer from 'vue-video-player' 
// 自定義樣式引入,在<video-player>添加對應(yīng)類名,例如video-player-custom
// import 'vue-video-player/src/custom-theme.css'
Vue.use(VueVideoPlayer, /* { 
  options: 全局默認(rèn)配置,
   events: 全局videojs事件
}*/)

二、使用 vue-video-player

<template>
  <!-- playsinline:設(shè)置播放器在移動設(shè)備上不全屏[ Boolean, default: false ] -->
  <!-- customEventName:自定義狀態(tài)變更時的事件名[ String, default: 'statechanged' ] -->
    <video-player
    class="video-player-custom"
        ref="videoPlayer"
        :options="playerOptions"
        :playsinline="true"
        customEventName="customstatechangedeventname"
        @play="onPlayerPlay"
        @pause="onPlayerPause"
        @ended="onPlayerEnded"
        @ready="playerReadied"
        @statechanged="playerStateChanged"
        @playing="onPlayerPlaying"
        @waiting="onPlayerWaiting"
        @loadeddata="onPlayerLoadeddata"
        @timeupdate="timeupdate"
        @canplay="onPlayerCanplay"
        @canplaythrough="onPlayerCanplaythrough">
    </video-player>
</template>
<script>
import 'videojs-contrib-hls'
import { videoPlayer } from 'vue-video-player'
export default {
   components: {
        videoPlayer
    },
  data() { 
    return {
       playerOptions: { 
         // 是否靜音
                  muted: true,
                  // 默認(rèn)為英語,設(shè)置為中文
                  language: 'zh-CN',
                  // 播放速度,指定后Video.js將顯示一個控件(vjs-playback-rate類的控件),允許用戶選擇播放速度
                  playbackRates: [0.5, 1.0, 1.5, 2.0],
                  // 將播放器置于流暢模式,并在計(jì)算播放器的動態(tài)大小時使用該值,表示長寬比例
                  aspectRatio: '4:3',
              // 兼容順序,默認(rèn)值是['html5'],其他已注冊的技術(shù)將按其注冊的順序在該技術(shù)之后添加。
                  techOrder: ['html5'],
                  // 等同于原生<video>標(biāo)簽中的一組<source>子標(biāo)簽,可實(shí)現(xiàn)優(yōu)雅降級;type 屬性規(guī)定媒體資源的 MIME 類型
                  sources: [
                        //{
                    	  //type: "video/mp4",
                    	  //src: ""
                  	//},
                        //{
                    	  //type: "rtmp/flv",
                    	  //src: ""
                  	//},
                   	{
                     	  type: "application/x-mpegURL",
                     	  src: "https://live.cgtn.com/1000/prog_index.m3u8"
                   	},
                   ],
                  // 視頻封面
                  poster: require('./icon/cover.jpg'), 
       }
    }
  },
  computed: { 
    	//插件節(jié)點(diǎn) 用于添加自定義按鈕事件
    player() { 
      return this.$refs.videoPlayer.player 
    }
  },
    mounted() {},
    methods: {
        // 播放回調(diào)
        onPlayerPlay(player) {
        },
        // 暫?;卣{(diào)
        onPlayerPause(player) {
          //console.log(player)
        },
        // 視頻播放結(jié)束回調(diào)
        onPlayerEnded(player) {
          //console.log(player)
        },
        // DOM元素上的readyState更改導(dǎo)致播放停止
        onPlayerWaiting(player) {
          //console.log(player)
        },
        // 已開始播放回調(diào)
        onPlayerPlaying(player) {
          //console.log(player)
        },
        // 當(dāng)播放器在當(dāng)前播放位置下載數(shù)據(jù)時觸發(fā)
        onPlayerLoadeddata($event) {
          //console.log($event)
        },
        // 當(dāng)前播放位置發(fā)生變化時觸發(fā)。
        onPlayerTimeupdate($event) {
          //console.log($event)
        },
        //媒體的readyState為HAVE_FUTURE_DATA或更高
        onPlayerCanplay($event) {
          //console.log($event)
        },
        //媒體的readyState為HAVE_ENOUGH_DATA或更高。這意味著可以在不緩沖的情況下播放整個媒體文件。
        onPlayerCanplaythrough($event) {
          //console.log($event)
        },
        //播放狀態(tài)改變回調(diào)
        playerStateChanged($event) {
          //console.log($event)
        },
        //將偵聽器綁定到組件的就緒狀態(tài)。與事件監(jiān)聽器的不同之處在于,如果ready事件已經(jīng)發(fā)生,它將立即觸發(fā)該函數(shù)。。
        playerReadied($event) {
          //console.log($event)
        },
    }
}
</script>
<style lang="scss" scoped>
.video-player-custom{
    width: 100%;
    height: 180px;
    // vidoeUI重寫
    /deep/ .video-js{
        width: 100%;
        height: 100%;
        padding: 0;
        overflow: hidden;
        // 播放器 
        .vjs-tech{
          object-fit: cover;
        }
        // 播放按鈕
        .vjs-big-play-button {
            position: absolute;
            top: 50%;
            left: 50%;
            width: 2em;
            height: 2em;
            margin-top: -1em;
            margin-left: -1em;
            font-size: 2em;
            line-height: 2em;
            border-radius: 50%;
            background-color: rgba(0,0,0,0.45);
            outline: none;
        }
        // 封面
        .vjs-poster{
            width: 100%;
            height: 100%;
            background-size: cover;
        }
    }
}  
</style>

到此這篇關(guān)于使用vue-video-player實(shí)現(xiàn)直播的文章就介紹到這了,更多相關(guān)vue-video-player直播內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue.js數(shù)據(jù)綁定之data屬性

    Vue.js數(shù)據(jù)綁定之data屬性

    這篇文章主要為大家詳細(xì)介紹了Vue.js數(shù)據(jù)綁定之data屬性,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Vue Router中的冗余導(dǎo)航錯誤及解決方案

    Vue Router中的冗余導(dǎo)航錯誤及解決方案

    在現(xiàn)代前端開發(fā)中,單頁應(yīng)用(SPA)已經(jīng)成為主流,而 Vue.js 作為一款流行的前端框架,其官方路由庫 Vue Router 則是構(gòu)建 SPA 的核心工具之一,在使用 Vue Router 的過程中,開發(fā)者可能會遇到一些常見的錯誤,本文將深入探討這一錯誤的原因、影響以及解決方案
    2025-01-01
  • 基于Element-Ui封裝公共表格組件的詳細(xì)圖文步驟

    基于Element-Ui封裝公共表格組件的詳細(xì)圖文步驟

    在平時開發(fā)的時候很多情況都會使用到表格和分頁功能,下面這篇文章主要給大家介紹了關(guān)于如何基于Element-Ui封裝公共表格組件的詳細(xì)圖文步驟,需要的朋友可以參考下
    2022-09-09
  • 詳解Vue路由鉤子及應(yīng)用場景(小結(jié))

    詳解Vue路由鉤子及應(yīng)用場景(小結(jié))

    本篇文章主要介紹了詳解Vue路由鉤子及應(yīng)用場景(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Vue 進(jìn)階教程之v-model詳解

    Vue 進(jìn)階教程之v-model詳解

    這篇文章主要介紹了Vue 進(jìn)階教程之v-model詳解 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • vue項(xiàng)目中訪問本地json數(shù)據(jù)

    vue項(xiàng)目中訪問本地json數(shù)據(jù)

    這篇文章主要介紹了vue項(xiàng)目中訪問本地json數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 詳細(xì)聊聊前端如何實(shí)現(xiàn)token無感刷新(refresh_token)

    詳細(xì)聊聊前端如何實(shí)現(xiàn)token無感刷新(refresh_token)

    實(shí)現(xiàn)token無感刷新對于前端來說是一項(xiàng)非常常用的技術(shù),其本質(zhì)是為了優(yōu)化用戶體驗(yàn),下面這篇文章主要給大家介紹了關(guān)于前端如何實(shí)現(xiàn)token無感刷新(refresh_token)的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Vue.js每天必學(xué)之內(nèi)部響應(yīng)式原理探究

    Vue.js每天必學(xué)之內(nèi)部響應(yīng)式原理探究

    Vue.js每天必學(xué)之內(nèi)部響應(yīng)式原理探究,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 詳解使用vuex進(jìn)行菜單管理

    詳解使用vuex進(jìn)行菜單管理

    本篇文章主要介紹了詳解使用vuex進(jìn)行菜單管理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • vue實(shí)例的選項(xiàng)總結(jié)

    vue實(shí)例的選項(xiàng)總結(jié)

    這篇文章主要介紹了Vue實(shí)例的選項(xiàng)有哪些,文中講解非常細(xì)致,代碼幫助大家更好的學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06

最新評論

贡嘎县| 安多县| 上犹县| 开原市| 寻乌县| 西平县| 吉林省| 新巴尔虎左旗| 闻喜县| 澎湖县| 来安县| 安达市| 辰溪县| 房山区| 潞西市| 朝阳区| 新郑市| 江川县| 武义县| 通城县| 遂宁市| 大港区| 呼和浩特市| 玛纳斯县| 富锦市| 阿合奇县| 林口县| 平定县| 光泽县| 新郑市| 怀柔区| 汕头市| 驻马店市| 灵石县| 余庆县| 潼南县| 汉寿县| 商水县| 金寨县| 都江堰市| 韶山市|