You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
3.0 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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