<script setup> import { defaultDetail,getLink } from '@/api-public/public/index.js' import { liveStore } from '@/stores/live/index.js' import AliyunPlayer from 'aliyun-aliplayer' import { publicStore } from '@/stores/public/index.js' import 'aliyun-aliplayer/build/skins/default/aliplayer-min.css' import broadcast from './components/broadcast/index.vue' const {decryptUtils} = liveStore() const {auctionData} = publicStore() definePageMeta({ layout: 'publicLiveRoom' }) const {t}= useI18n() const pullLink = ref('') const player = ref(null) const loading1=ref(false) const handlePlayerError = (error) => { showConfirmDialog({ message: t('live_room.error_mess'), showCancelButton: true }).then(() => { initializePlayer() }).catch(() => { }) } const initializePlayer = async () => { try { if (player.value) { player.value.dispose() } // 判断是否是微信浏览器 const isWechat = /MicroMessenger/i.test(navigator.userAgent) const playerConfig = { id: 'J_prismPlayer1', source: pullLink.value, isLive: true, preload: true, autoplay: true, // 改为 true muted: true, // 默认静音 diagnosisButtonVisible:false, // vodRetry:10, // liveRetry:10, autoplayPolicy: { fallbackToMute: true }, width: '100%', //容器的大小 height: '100%', //容器的大小 skinLayout: false, controlBarVisibility: 'never', env: 'SEA' , license: { domain: "szjixun.cn", key: "OProxmWaOZ2XVHXLtf4030126521c43429403194970aa8af9" } } player.value = new AliyunPlayer(playerConfig, (playerInstance) => { // 在微信环境下,需要用户手动触发播放 if (isWechat) { const startPlay = () => { playerInstance?.play() document.removeEventListener('WeixinJSBridgeReady', startPlay) document.removeEventListener('touchstart', startPlay) } document.addEventListener('WeixinJSBridgeReady', startPlay) document.addEventListener('touchstart', startPlay) } loading1.value = true playerInstance?.play() }) player.value.on('playing', () => { loading1.value = false }) player.value.on('loading', () => { }) player.value.on('error', handlePlayerError) } catch (error) { console.log('error',error) showConfirmDialog({ message: t('live_room.error_mess'), showCancelButton: true }).then(() => { initializePlayer() }).catch(() => { }) } } onMounted(async () => { const res = await defaultDetail({}) if(res.status === 0){ auctionData.value = res.data } const linkRes = await getLink({uuid:auctionData.value.uuid}) pullLink.value =decryptUtils.decryptData(linkRes.data.code) initializePlayer() }) </script> <template> <div class="grow-1 relative"> <van-nav-bar :title="auctionData.title" /> <div id="J_prismPlayer1" class="w-100vw" style="height: calc(100vh - var(--van-nav-bar-height));"></div> <div v-if="loading1" class="absolute left-1/2 transform translate-x--1/2 top-1/2 translate-y--1/2"> <van-loading type="spinner" >直播加载中...</van-loading> </div> <div class="absolute left-1/2 transform -translate-x-1/2" style="bottom:calc(var(--safe-area-inset-bottom) + 46px)"> <broadcast></broadcast> </div> </div> </template> <style scoped lang="scss"> :deep(.prism-license-watermark) { display: none !important; } </style>