123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- <template>
- <el-dialog
- :title="dialogTitle"
- v-model="dialogVisible"
- width="600px"
-
- @close="closeDialog(0)"
- @open="open"
- >
- <div
- v-html="randerHtml"
- style="width: 100%; height: 400px; background: #000"
- ></div>
-
- </el-dialog>
- </template>
- <script>
- import { defineComponent, ref, watchEffect } from 'vue'
- import videojs from 'video.js'
- import 'videojs-contrib-hls'
- export default defineComponent({
- name: 'CheckVideo',
- emits: ['closeDialog'],
- props: {
- flag: Boolean,
- dialogTitle: String,
- itemInfo: Object,
- deviceCode: String,
- },
- setup(props, context) {
- context
- const dialogVisible = ref(false)
- const videoUrl = ref('')
- const options = []
- const player = ref('')
- const randerHtml = ref('')
- // open(): Dialog弹窗打开之前做的事
- const open = () => {
-
- videoUrl.value = 'http://47.103.74.123/hls/'+props.deviceCode+'.m3u8';
- // alert(videoUrl.value)
- // videoUrl.value ='http://cctvalih5ca.v.myalicdn.com/live/cctv1_2/index.m3u8'
- window.setTimeout(getVideo, 100)
- }
- function getVideo() {
- randerHtml.value =
- '<video id="my-video" class="video-js vjs-default-skin" controls preload="auto" style="width: 100%; height: 400px" poster loop="loop" autoplay="autoplay" ></video>'
- let options = {
- bigPlayButton: false,
- textTrackDisplay: false,
- posterImage: true,
- errorDisplay: false,
- controlBar: true,
- autoplay: true,
- controls: true,
- sources: [
- {
- src: videoUrl.value,
- type: 'application/x-mpegURL',
- },
- ],
- }
- window.setTimeout(function () {
- player.value = videojs('my-video', options,)
- }, 100)
- }
- // 关闭弹框
- const closeDialog = () => {
- if (player.value) {
- player.value.dispose()
- randerHtml.value = ''
- }
- context.emit('closeDialog', false)
- dialogVisible.value = false
- }
- watchEffect((fn, options) => {
- fn, options
- dialogVisible.value = props.flag
- })
- return {
- closeDialog,
- dialogVisible,
- options,
- open,
- videoUrl,
- getVideo,
- player,
- randerHtml,
- }
- },
- })
- </script>
-
- <style scoped lang="scss">
- .el-input,
- .el-select {
- width: 240px;
- }
- // label样式
- .el-form-item__label {
- width: 150px
- }
- .el-form-item__content {
- margin-left: 150px
- }
- </style>
- <style >
- * { touch-action: pan-y; }
- </style>
|