双向对讲
更新时间:2025-09-22 21:06:28
双向通话请在直播时可用
获取对讲插件
import {
RTCXWebPlayer,
RTCXWebPlayerTypes,
} from '@rtcx/websdk'
let rtcxWebPlayer: RTCXWebPlayer | null = null
const talkPlugin = rtcxWebPlayer?.getPlugin(RTCXWebPlayerTypes.PlayerPluginEnum.TalkPlug)
开始通话
开始通话需要向浏览申请麦克风使用权限
await talkPlugin.callMethod<string>(RTCXWebPlayerTypes.TalkPluginMethodEnum.startTalk)
结束通话
await talkPlugin.callMethod<string>(RTCXWebPlayerTypes.TalkPluginMethodEnum.stopTalk)
示例
import {
RTCXWebPlayer,
RTCXWebPlayerTypes,
RTCXCommonTypes,
} from '@rtcx/websdk'
/**
* 错误用法: const rtcxWebPlayer = ref<RTCXWebPlayer>()
* 不能使用 ref 或改为使用 shallowRef
*/
let rtcxWebPlayer: RTCXWebPlayer | null = null
const isTalking = ref(false)
async function onTalkBtnClick() {
const talkPlugin = rtcxWebPlayer?.getPlugin(RTCXWebPlayerTypes.PlayerPluginEnum.TalkPlug)
if (!talkPlugin) throw 'unsupport talk'
if (!isTalking.value) {
try {
await talkPlugin.callMethod<string>(RTCXWebPlayerTypes.TalkPluginMethodEnum.startTalk)
isTalking.value = true
} catch (e) {
const err = e as RTCXCommonTypes.RuntimeException
console.error('start talk ', err)
if (err.code == RTCXCommonTypes.RuntimeExceptionCode.TalkBusy) {
ElNotification.error('其他人正在通话,请稍后再试')
}
}
} else {
talkPlugin.callMethod<string>(RTCXWebPlayerTypes.TalkPluginMethodEnum.stopTalk)
isTalking.value = false
}
}
<el-button type="primary" @click="onTalkBtnClick()">{{
!isTalking ? '开始对讲' : '结束对讲'
}}</el-button>