|
|
<template>
|
|
|
<div
|
|
|
style="width: 100%; height: 100%"
|
|
|
class="bs-design-wrap"
|
|
|
>
|
|
|
<video-player
|
|
|
ref="videoPlayer1"
|
|
|
:options="videoOptions"
|
|
|
class="vjs-custom-skin videoPlayer"
|
|
|
:playsinline="true"
|
|
|
/>
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
import { videoPlayer } from 'vue-video-player'
|
|
|
import 'video.js/dist/video-js.css'
|
|
|
import 'videojs-contrib-hls'
|
|
|
import { refreshComponentMixin } from 'data-room-ui/js/mixins/refreshComponent'
|
|
|
export default {
|
|
|
name: 'Video',
|
|
|
components: { videoPlayer },
|
|
|
mixins: [refreshComponentMixin],
|
|
|
props: {
|
|
|
// 卡片的属性
|
|
|
config: {
|
|
|
type: Object,
|
|
|
default: () => ({})
|
|
|
}
|
|
|
},
|
|
|
computed: {},
|
|
|
beforeDestroy () {
|
|
|
this.$refs.videoPlayer1.dispose()
|
|
|
},
|
|
|
data () {
|
|
|
return {
|
|
|
// TODO 这里介绍各个参数的意义
|
|
|
videoOptions: {
|
|
|
live: true,
|
|
|
// 浏览器准备好时开始回放
|
|
|
autoplay: false,
|
|
|
// true:默认视频播放无声音,需要手动开启声音
|
|
|
muted: false,
|
|
|
// 播放速度
|
|
|
playbackRates: [0.5, 1.0, 1.5, 2.0],
|
|
|
// 语言
|
|
|
language: 'zh-CN',
|
|
|
// 当true时,播放器将按比例缩放以适应其容器
|
|
|
fluid: true,
|
|
|
// 无法播放时提示信息
|
|
|
notSupportedMessage: '该视频无法正常播放',
|
|
|
// 纵横比或屏幕高宽比
|
|
|
aspectRatio: '16:9',
|
|
|
controlBar: {
|
|
|
timeDivider: true,
|
|
|
durationDisplay: true,
|
|
|
remainingTimeDisplay: true,
|
|
|
// 全屏按钮
|
|
|
fullscreenToggle: true
|
|
|
},
|
|
|
// 播放器宽度,测试无效
|
|
|
// width: 100,
|
|
|
// 视频封面图
|
|
|
poster: this.config.customize.posterUrl,
|
|
|
sources: [
|
|
|
{
|
|
|
// 流配置,数组形式,会根据兼容顺序自动切换
|
|
|
type: this.config.customize.videoType,
|
|
|
src: this.config.customize.videoUrl
|
|
|
}
|
|
|
]
|
|
|
},
|
|
|
dataForm: {
|
|
|
script: ''
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
|
|
|
watch: {},
|
|
|
mounted () {},
|
|
|
methods: {
|
|
|
// 由于静态组件没有混入公共函数,所以需要定义一个changeStyle方法,以免报错
|
|
|
changeStyle (config) {
|
|
|
this.videoOptions.sources.type = config.customize.videoType
|
|
|
this.videoOptions.sources.type = config.customize.videoUrl
|
|
|
this.videoOptions.poster = config.customize.posterUrl
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
.bs-design-wrap {
|
|
|
position: relative;
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
background-color: transparent;
|
|
|
border-radius: 4px;
|
|
|
box-shadow: 0px 0px 4px rgba(0, 0, 0, 0.1);
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
.videoPlayer {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/*滚动条样式*/
|
|
|
::v-deep ::-webkit-scrollbar {
|
|
|
width: 4px;
|
|
|
border-radius: 4px;
|
|
|
height: 4px;
|
|
|
}
|
|
|
|
|
|
::v-deep ::-webkit-scrollbar-thumb {
|
|
|
background: #dddddd !important;
|
|
|
border-radius: 10px;
|
|
|
}
|
|
|
::v-deep .video-js .vjs-big-play-button {
|
|
|
z-index: 100;
|
|
|
left: 50%;
|
|
|
top: 50%;
|
|
|
transform: translate(-50%, -50%);
|
|
|
font-size: 4em;
|
|
|
}
|
|
|
</style>
|