Files
2026-03-04 15:32:30 +08:00

97 lines
3.4 KiB
JavaScript

import TRTCCloud, {translateTRTCStreamId} from '@tencentcloud/trtc-cloud-wx'
const trtcCloud = TRTCCloud.getTRTCShareInstance()
const trtc = trtcCloud.trtc
const InterfaceEventEmitter = trtcCloud.InterfaceEventEmitter
Component({
properties: {
streamId: String
},
data: {
player: {},
TRTCStreamId: '',
soundMode: ''
},
lifetimes: {
attached() {
trtcCloud.logger.info('trtc-player attached', this.data.streamId)
if (this.data.streamId) {
InterfaceEventEmitter.emit('playerDomReady', {isReady: true, view: this.data.streamId})
}
this.data.TRTCStreamId = this.getTRTCStreamId(this.data.streamId)
this.bindTRTCCloudEvent()
},
detached() {
trtcCloud.logger.info('trtc-player detached', this.data.streamId)
InterfaceEventEmitter.emit('playerDomReady', {isReady: false, streamId: this.data.streamId})
this.unbindTRTCCloudEvent()
}
},
methods: {
// todo room uniapp 特供,因为 uniapp 打包导致组件传惨变量名更替 trtc-player 组建内部无法识别
setTRTCStreamId(id) {
trtcCloud.logger.info('trtc-player setTRTCStreamId', id)
return new Promise((resolve, reject) => {
try {
this.data.streamId = id
this.data.TRTCStreamId = this.getTRTCStreamId(id)
this.setData({streamId: this.data.streamId}, () => {
trtcCloud.logger.info('trtc-player setTRTCStreamId success', id)
resolve()
InterfaceEventEmitter.emit('playerDomReady', {isReady: true, view: id})
})
} catch (err) {
trtcCloud.logger.info('trtc-player setTRTCStreamId fail', id, err)
reject(err)
}
})
},
playerAttributesChange(event) {
const {view, playerAttributes, callback} = event
trtcCloud.logger.info('trtc-player playerAttributesChange', view, JSON.stringify(playerAttributes), this.data.streamId)
if (view === this.data.streamId) {
this.setData({player: playerAttributes}, callback)
}
},
playerAudioRouteChange(event) {
const { soundMode, callback } = event
trtcCloud.logger.info('trtc-player playerAudioRouteChange', soundMode)
this.setData({ soundMode }, callback)
},
getTRTCStreamId(streamId) {
const tempArray = streamId.split('_')
const userId = tempArray.slice(0, -1).join('_')
const streamType = Number(tempArray[tempArray.length - 1])
return translateTRTCStreamId(userId, streamType)
},
bindTRTCCloudEvent() {
InterfaceEventEmitter.on('playerAttributesChange', this.playerAttributesChange, this)
InterfaceEventEmitter.on('playerAudioRouteChange', this.playerAudioRouteChange, this)
},
unbindTRTCCloudEvent() {
InterfaceEventEmitter.off('playerAttributesChange', this.playerAttributesChange)
InterfaceEventEmitter.off('playerAudioRouteChange', this.playerAudioRouteChange)
},
// 请保持跟 wxml 中绑定的事件名称一致
_playerStateChange(event) {
trtc.playerEventHandler(event)
},
_playerFullscreenChange(event) {
trtc.playerFullscreenChange(event)
},
_playerNetStatus(event) {
trtc.playerNetStatus(event)
},
_playerAudioVolumeNotify(event) {
try {
event.currentTarget.dataset.streamid = this.data.player.streamID
trtc.playerAudioVolumeNotify(event)
} catch (err) {
trtcCloud.logger.warn(err)
}
},
}
})