vue-video-player 更改視頻源

背景:根據用戶的信息來顯示不一樣的視頻源css

<template>
    <div class="video-box-wrap" v-show="video.show">
        <div class="video-box">
            <em class="video-close"  @click="showVideo(false)"></em>
            <video-player  class="video-player vjs-custom-skin"
                        ref="videoPlayer"
                        :options="playerOptions"
                        :playsinline="true"
                        customEventName="customstatechangedeventname"
                        @play="onPlayerPlay($event)"
                        @pause="onPlayerPause($event)"
                        @ready="playerReadied">
            </video-player>
        </div>
    </div>
</template>
export default {
    data () {
        return {
            playerOptions: {
                    // videojs options
                    muted: true,
                    language: 'en',
                    playbackRates: [0.7, 1.0, 1.5, 2.0],
                    sources: [{
                        type: "video/mp4",
                        src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
                        // src: "http://www.17sucai.com/preview/501914/2017-08-04/%E9%A1%B5%E9%9D%A2/media/mov_bbb.mp4"
                    }],
                    muted: false, // 默認狀況下將會消除任何音頻。
                    loop: false,
                    language: 'zh-CN',
                    fluid: true, // 當true時,Video.js player將擁有流體大小。換句話說,它將按比例縮放以適應其容器。
                    poster: "/static/images/author.jpg",
                    width: 700,
                    notSupportedMessage: '此視頻暫沒法播放,請稍後再試', //容許覆蓋Video.js沒法播放媒體源時顯示的默認信息。
                },
        }
    },
    methods: {
        showVideo (bol) {
            let myPlayer = this.$refs.videoPlayer.player;
            if( bol ) {
                myPlayer.src(this.getUserType); //根據userType的不一樣展現不一樣的視頻地址
              return false
            };
        }
    },
    computed: {
        getUserType () {
            let userType = parseInt(this.userInfo.userType);
            let videoSrc = ""
            if(userType === 1){
                videoSrc = "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
            }else if (userType === 2){
                videoSrc = "http://www.17sucai.com/preview/501914/2017-08-04/%E9%A1%B5%E9%9D%A2/media/mov_bbb.mp4"
            }
            return videoSrc;
        }
    }
}

初始 playerOptions.sources.src必須有值,不然後續視頻的進度條會有問題
//感受我使用的是最笨的方法,若是有更好的方法,望留言指教>_<vue

又一次用到了vue-video-player

須要更改播放按鈕,默認的是有一個比較醜的播放按鈕,可是設計人員給出的播放按鈕比較漂亮,一開始的思路是怎麼把控制播放的事件綁定到本身寫的按鈕上面,最終沒有實現= =。。。

而後開始想改變樣式來控制,直接暴力修改它本來的樣式,並經過比較播放暫停播放狀態容器上類名的不一樣來顯示隱藏「漂亮」的播放按鈕

播放時和暫停時容器的類名差異是有沒有  「vjs-paused」

最終的解決方法:
        .video-js{
            .fs(24);// 樣式文件裏元素的單位是em,由於控制條過小了,默認的font-size是10px,因此這裏作了更改。 fs(24)最終經過less的處理會轉換爲rem單位
        }
        .video-js .vjs-big-play-button{
            position: absolute;
            display: block;
            left: 0px;
            top: 0px;
            width: 100%;
            height: 100%;
            background: rgba(0, 0, 0, .7);
            border: none;
        }
        .video-js .vjs-big-play-button .vjs-icon-placeholder:before{
            position: absolute;
            content: "";
            .w(120);
            .h(120);
            left: 50%;
            top: 50%;
            .ml(-60);
            .mt(-60);
            background: url("../../assets/images/icon_play@2x.png") center center no-repeat;
            background-size: 100% 100%;
            border: none;
        }
       //下面代碼控制播放按鈕是否顯示
        .vjs-controls-disabled .vjs-big-play-button, .vjs-has-started .vjs-big-play-button, .vjs-using-native-controls .vjs-big-play-button, .vjs-error .vjs-big-play-button {
            display: none;
        }
        .vjs-paused .vjs-big-play-button {
            display: block;
        }

今天腦殼忽然開竅,發現一個不用更改原先的css就能夠實現控制播放的方法,其實這樣子用就能夠,😅
this.$refs.videoPlayer.player.play();
this.$refs.videoPlayer.player.pause();
相關文章
相關標籤/搜索