視頻直播插件----vue-video-player

測試直播鏈接?https://live.cgtn.com/1000/prog_index.m3u8

一搪哪、安裝插件

播放HLS視頻流需要安裝 videojs-contrib-hls插件颜阐,播放RTMP視頻流則安裝 videojs-flash插件,hls插件與flash插件同時使用時flash插件需要在hls插件之前引入; (有時安裝we-video-plaver無法自動安裝hls插件庄呈,還需自己手動安裝)

安裝方式一:在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">

安裝方式二:npm安裝

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: 全局默認配置, events: 全局videojs事件 }*/)?

二、使用插件

<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,

? ? ? ? ? ? ? ? ? // 默認為英語肚菠,設(shè)置為中文

? ? ? ? ? ? ? ? ? language: 'zh-CN',

? ? ? ? ? ? ? ? ? // 播放速度,指定后Video.js將顯示一個控件(vjs-playback-rate類的控件)罩缴,允許用戶選擇播放速度

? ? ? ? ? ? ? ? ? playbackRates: [0.5, 1.0, 1.5, 2.0],

? ? ? ? ? ? ? ? ? // 將播放器置于流暢模式蚊逢,并在計算播放器的動態(tài)大小時使用該值层扶,表示長寬比例

? ? ? ? ? ? ? ? ? aspectRatio: '4:3',

? ? ? ?      // 兼容順序,默認值是['html5']烙荷,其他已注冊的技術(shù)將按其注冊的順序在該技術(shù)之后添加镜会。

? ? ? ? ? ? ? ? ? techOrder: ['html5'],

? ? ? ? ? ? ? ? ? // 等同于原生<video>標簽中的一組<source>子標簽,可實現(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é)點 用于添加自定義按鈕事件

    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>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末色瘩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吏廉,更是在濱河造成了極大的恐慌泞遗,老刑警劉巖惰许,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件席覆,死亡現(xiàn)場離奇詭異,居然都是意外死亡汹买,警方通過查閱死者的電腦和手機佩伤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晦毙,“玉大人生巡,你說我怎么就攤上這事〖剩” “怎么了孤荣?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長须揣。 經(jīng)常有香客問我盐股,道長,這世上最難降的妖魔是什么耻卡? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任疯汁,我火速辦了婚禮,結(jié)果婚禮上卵酪,老公的妹妹穿的比我還像新娘幌蚊。我一直安慰自己谤碳,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布溢豆。 她就那樣靜靜地躺著蜒简,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沫换。 梳的紋絲不亂的頭發(fā)上臭蚁,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機與錄音讯赏,去河邊找鬼垮兑。 笑死,一個胖子當(dāng)著我的面吹牛漱挎,可吹牛的內(nèi)容都是我干的系枪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼磕谅,長吁一口氣:“原來是場噩夢啊……” “哼私爷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起膊夹,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤衬浑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后放刨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體工秩,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年进统,在試婚紗的時候發(fā)現(xiàn)自己被綠了助币。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡螟碎,死狀恐怖眉菱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掉分,我是刑警寧澤俭缓,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站酥郭,受9級特大地震影響华坦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褥民,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一季春、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧消返,春花似錦载弄、人聲如沸耘拇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惫叛。三九已至,卻和暖如春逞刷,著一層夾襖步出監(jiān)牢的瞬間嘉涌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工夸浅, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留仑最,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓帆喇,卻偏偏與公主長得像警医,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坯钦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容