跳到主要内容

双向对讲

更新时间: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>