<template>
    <div>
        <template v-if="showVideo">
            <video-player class="video-player vjs-custom-skin"
                          ref="videoPlayer"
                          :playsinline="true"
                          :options="playerOptions"
                          @statechanged="playerStateChanged($event)">
            </video-player>
        </template>
        <template v-else-if="showPlugin">
            <div class="custom-plugin">
                <object type='application/x-vlc-plugin' id='vlc' events='false' width="800" height="500">
                    <param name='mrl' :value='videoUrl' />
                    <param name='volume' value='50' />
                    <param name='autoplay' value='true' />
                    <param name='loop' value='false' />
                    <param name='fullscreen' value='false' />
                    <param name='controls' value='false' />
                </object>
            </div>
        </template>
        <template v-else>
            <el-empty :description="desc"></el-empty>
        </template>
    </div>
</template>

<script>
    import {getHistoryVideo} from '@/api/video'

    import 'video.js/dist/video-js.css'
    import 'vue-video-player/src/custom-theme.css'
    import { videoPlayer } from 'vue-video-player'
    // import 'videojs-flash'

    export default {
        props: ['id'],
        components: {
            videoPlayer
        },
        data() {
            return {
                showVideo: false,
                showPlugin: false,
                videoUrl: '',
                desc: '正在获取视频信息...',
                playerOptions: {
                    playbackRates: [1.0], //播放速度
                    autoplay: true, //如果true,浏览器准备好时开始回放。
                    controls: true,
                    muted: false, // 默认情况下将会消除任何音频。
                    loop: false, // 导致视频一结束就重新开始。
                    preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。
                    language: 'zh-CN',
                    aspectRatio: '16:9', // 将播放器置于流畅模式，并在计算播放器的动态大小时使用该值。值应该代表一个比例 - // // 用冒号分隔的两个数字（例如"16:9"或"4:3"）
                    fluid: true, // 当true时，Video.js player将拥有流体大小。换句话说，它将按比例缩放以适应其容器。
                    // techOrder: ['flash', 'html5'],
                    html5: { hls: { withCredentials: false } },
                    sources: [{
                        src: '', // 直播视频的路径
                        type: 'video/mp4',
                    }],
                    poster: require('@/assets/video.png'),
                    width: document.documentElement.clientWidth,
                    notSupportedMessage: '此视频暂无法播放，请稍后再试', //允许覆盖Video.js无法播放媒体源时显示的默认信息。
                    controlBar: {
                        timeDivider: true,
                        durationDisplay: true,
                        remainingTimeDisplay: false,
                        fullscreenToggle: true //全屏按钮
                    }
                }

            }
        },
        mounted() {
            if (this.id) {
                getHistoryVideo(this.id).then(res => {
                    if (res && res.url) {
                        this.playerOptions.sources[0].src = res.url;
                        this.videoUrl = res.url;
                        this.showVideo = true;
                    } else {
                        this.desc = '暂无视频信息';
                    }
                }).catch(err => {
                    this.desc = '暂无视频信息';
                });
            }
        },
        methods: {
            playerStateChanged(data) {
                if (data && data.error) {
                    this.showVideo = false;
                    this.showPlugin = true;
                }
            }
        }
    }
</script>

<style lang="scss" scoped>
video {
    width: 100%;
    height: 400px;
}
.custom-plugin {
    text-align: center;
}
</style>