连麦功能
连麦模块(connectMic) 提供连麦功能的集成,详细使用方式见下文。
一、设置连麦及连麦信息
1.1 设置连麦
观看页 SDK 默认不会设置连麦功能,如果需要连麦功能,开发者需要手动设置连麦功能,设置完成后即可调用连麦模块的 Api。
Api 方法: setupConnectMic(): Promise<ConnectMicResult>
返回值说明: 设置结果,Promise<ConnectMicResult> 类型
示例:
// 设置连麦功能
const result = await watchCore.connectMic.setupConnectMic();
if (result.success) {
// 打开设备设置
watchCore.connectMic.openDeviceSetting();
} else {
console.log('设置失败', result.failReason);
}
1.2 是否支持连麦功能
用于判断当前环境是否支持连麦功能。
Api 方法: supportConnectMic(): SupportResult
返回值说明: SupportResult 类型
示例:
const result = watchCore.connectMic.supportConnectMic();
console.log('是否支持连麦:', result.support ? '支持' : '不支持');
1.3 获取连麦信息
连麦模块的状态,数据均通过 connectMicInfo 保存,开发者可通过 getConnectMicInfo 方法获取连麦信息。
PS:通过 ConnectMicEvents.ConnectMicInfoChange 事件监听连麦事件改变。
Api 方法: getConnectMicInfo(): ConnectMicStoreInfo
返回值说明: 连麦信息,ConnectMicStoreInfo 类型,详细类型说明如下
| 属性名 | 说明 | 类型 |
|---|---|---|
supportConnectMic |
当前环境是否支持连麦 | boolean |
supportFacingMode |
当前环境是否支持切换前后摄像头 | boolean |
facingMode |
当前前后摄像头 | FacingMode |
mirrorEnabled |
是否开启镜像 | boolean |
openMicStatus |
连麦状态,开启或关闭 | boolean |
inviteStatus |
邀请上麦状态 | boolean |
connectMicType |
连麦类型 | ConnectMicType |
connectMicStatus |
用户连麦状态 | ConnectMicStatus |
showJoinQueueNumberEnabled |
连麦排序显示开关 | boolean |
currentMicIndex |
连麦顺序索引值(-1 表示不在队列) | number |
currentIsSpeaker |
当前用户是否为主讲 | boolean |
autoConnect |
点击开始连麦是否立刻上麦 | boolean |
示例:
const info = watchCore.connectMic.getConnectMicInfo();
console.log('当前是否支持连麦功能', data.supportConnectMic);
console.log('当前是否开启连麦', data.openMicStatus);
1.4 判断连麦状态是否处于连麦中
通过 isConnectMicing 判断用户或传入的状态是否处于连麦中(ConnectMicStatus.Publishing or ConnectMicStatus.Connected)。
Api 方法: isConnectMicing(status?: ConnectMicStatus): boolean
参数说明:
- status:连麦状态,不传则用当前状态,
ConnectMicStatus类型,选传
返回值说明: 是否连麦中
示例:
const res = watchCore.connectMic.isConnectMicing();
if (res) {
console.log('用户连麦中');
} else {
console.log('用户没有连麦');
}
二、观众上麦
2.1 观众申请连麦
当讲师/主讲开启连麦功能后,用户即可申请连麦,开发者可调用 applyConnectMic 方法申请连麦,在申请时可调用 cancelApplyConnectMic 取消连麦申请。
PS: 通过 ConnectMicEvents.AllowConnectMicApply 监听连麦申请通过
Api 方法: applyConnectMic(): Promise<ConnectMicResult>
返回值说明: Promise<ConnectMicResult> 类型
示例:
import { ConnectMicError, ConnectMicEvents } from '@polyv/live-watch-sdk';
// 申请连麦
async function applyConnectMic() {
const result = await watchCore.connectMic.applyConnectMic();
if (result.success) {
toast.success('连麦申请成功!请等待主讲同意');
const info = watchCore.connectMic.getConnectMicInfo();
console.log('当前连麦状态:', info.connectMicStatus); // ConnectMicStatus.Applying
return;
}
if (result.failReason === ConnectMicError.GetDevicePermissionFail) {
toast.error('连麦申请失败!未获取设备权限');
}
}
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.AllowConnectMicApply, () => {
toast.success('讲师已通过你的连麦申请');
});
2.2 取消连麦申请
当观众申请连麦后,调用 cancelApplyConnectMic 即可取消连麦申请。
Api 方法: cancelApplyConnectMic(): void
示例:
watchCore.connectMic.cancelApplyConnectMic();
const info = watchCore.connectMic.getConnectMicInfo();
console.log('当前连麦状态:', info.connectMicStatus); // ConnectMicStatus.NotConnect
2.3 取消连麦申请
当观众申请连麦后,调用 cancelApplyConnectMic 即可取消连麦申请。
Api 方法: cancelApplyConnectMic(): void
示例:
watchCore.connectMic.cancelApplyConnectMic();
const info = watchCore.connectMic.getConnectMicInfo();
console.log('当前连麦状态:', info.connectMicStatus); // ConnectMicStatus.NotConnect
2.4 推送本地连麦流
讲师通过连麦申请后,通过 publishLocalStream 进行连麦流推送,注意该方法需要在 ConnectMicEvents.LocalStreamInited 事件触发后调用。
推流成功后将触发 ConnectMicEvents.PublishStreamSuccess 事件。
建议通过连麦用户节点 ConnectMicItem.publishStream 方法进行推送。
Api 方法: publishLocalStream(options: PublishStreamOptions): Promise<ConnectMicResult>
参数说明:
- options:推流参数,
PublishStreamOptions类型,必传,详细类型说明如下
| 参数名 | 说明 | 类型 | 必须 | 默认值 |
|---|---|---|---|---|
element |
渲染节点 | HTMLDivElement |
是 | - |
control |
控制栏 | boolean |
否 | true |
fit |
视频裁剪模式 | ConnectMicFitType |
否 | ConnectMicFitType.Cover |
profile |
推流属性 | StreamProfile |
否 | '240p' |
返回值说明: Promise<ConnectMicResult> 类型
示例:
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.LocalStreamInited, () => {
watchCore.connectMic.publishLocalStream({
element: 'NodeElement',
});
});
2.5 结束连麦
当讲师通过观众的连麦申请并连麦成功后,通过 endConnectMic 可手动结束观众的连麦。
PS:通过 ConnectMicEvents.LeaveConnectMicSuccess 监听离开成功。
Api 方法: endConnectMic(): void
示例:
// 结束连麦
watchCore.connectMic.endConnectMic();
watchCore.connectMic.eventEmitter(ConnectMicEvents.LeaveConnectMicSuccess, () => {
toast.success('结束连麦成功');
const info = watchCore.connectMic.getConnectMicInfo();
console.log('当前连麦状态:', info.connectMicStatus); // ConnectMicStatus.NotConnect
});
三、小班课场景连麦
3.1 以观众模式加入连麦房间, 仅订阅讲师流,不推本地流
在小班课场景下,观众可以通过此方法加入房间并观看讲师的流。 此方法仅在小班课场景下有效,且连麦已初始化(setupConnectMic)后才能调用。
Api 方法: joinAsAudience(): Promise<joinAsAudienceResult>
从 v2.13.0
**返回值说明:** 加入结果,`Promise<joinAsAudienceResult>` 类型
<a id="classmethoddoc_plvconnectmicmodule_leaveaudience"></a>
### 3.2 离开观众模式
**Api 方法:** `leaveAudience(): Promise<void>`
> 从 v2.13.0
``` 版本开始支持
<a id="classmethoddoc_plvconnectmicmodule_stopsmallclassstat"></a>
### 3.3 小班课场景停止统计
**Api 方法:** `stopSmallClassStat(): void`
> 从 v2.13.0 版本开始支持
<a id="classmethoddoc_plvconnectmicmodule_isaudiencemodejoined"></a>
### 3.4 当前是否为观众模式
**Api 方法:** `isAudienceModeJoined(): boolean`
> 从 v2.13.0 版本开始支持
## 四、设备设置
<a id="classmethoddoc_plvconnectmicmodule_opendevicesetting"></a>
### 4.1 打开设备设置界面
连麦模块提供内置的设备设置界面,通过 `openDeviceSetting` 方法打开设备设置界面,用于切换摄像头、麦克风设备等操作,当需要关闭时可调用 [closeDeviceSetting](/live/js/new_sdk/live_watch_sdk/articles/modules/connect-mic/function.md?id=classmethoddoc_plvconnectmicmodule_closedevicesetting) 进行关闭。
**Api 方法:** `openDeviceSetting(): void`
**示例:**
```js
watchCore.connectMic.openDeviceSetting();
4.2 关闭设备设置界面
Api 方法: closeDeviceSetting(): void
示例:
watchCore.connectMic.closeDeviceSetting();
五、摄像头设置
5.1 开启本地摄像头
通过 enabledVideo 方法开启本地摄像头,可通过 ConnectMicEvents.LocalVideoMuteChange 事件监听本地摄像头的开关。
Api 方法: enabledVideo(): void
示例:
// 开启本地摄像头
watchCore.connectMic.enabledVideo();
5.2 关闭本地摄像头
通过 disabledVideo 方法关闭本地摄像头,可通过 ConnectMicEvents.LocalVideoMuteChange 事件监听本地摄像头的开关。
Api 方法: disabledVideo(): void
示例:
// 关闭本地摄像头
watchCore.connectMic.disabledVideo();
5.3 切换前后摄像头
Api 方法: changeFacingMode(facingMode: FacingMode): void
从 v2.6.0 版本开始支持
参数说明:
- facingMode:摄像头模式,
FacingMode类型,必传
示例:
watchCore.connectMic.changeFacingMode(FacingMode.Environment);
六、麦克风设置
6.1 开启本地麦克风
通过 enabledAudio 方法开启本地麦克风,可通过 ConnectMicEvents.LocalAudioMuteChange 事件监听本地麦克风的开关。
Api 方法: enabledAudio(): void
示例:
// 开启本地麦克风
watchCore.connectMic.enabledAudio();
6.2 关闭本地麦克风
通过 disabledAudio 方法关闭本地麦克风,可通过 ConnectMicEvents.LocalAudioMuteChange 事件监听本地麦克风的开关。
Api 方法: disabledAudio(): void
示例:
// 关闭本地麦克风
watchCore.connectMic.disabledAudio();
七、邀请连麦
7.1 打开邀请上麦界面
连麦模块提供内置的邀请上麦界面,当监听到 ConnectMicEvents.InviteConnectMic 讲师邀请上麦事件后,通过 openInviting 方法打开邀请上麦界面,需要关闭时可调用 closeInviting 进行关闭。
PS: 观众点击同意时,可能因连麦人数到达上限而连麦失败,通过 ConnectMicEvents.ConnectMicOverLimit 事件监听并页面提示
Api 方法: openInviting(): void
示例:
import { ConnectMicEvents } from '@polyv/live-watch-sdk';
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.InviteConnectMic, () => {
// 打开邀请连麦窗口
watchCore.connectMic.openInviting();
});
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicOverLimit, () => {
toast.error('连麦失败,连麦人数已到达上限');
});
7.2 关闭邀请上麦界面
Api 方法: closeInviting(): void
示例:
watchCore.connectMic.closeInviting();
7.3 接受讲师上麦邀请
用于在自定义邀请上麦 UI 中调用,触发后等同于 SDK 内置邀请窗口的"同意"操作。
Api 方法: acceptInvite(): void
从 v2.17.0 版本开始支持
示例:
watchCore.connectMic.acceptInvite();
7.4 拒绝讲师上麦邀请
用于在自定义邀请上麦 UI 中调用,触发后等同于 SDK 内置邀请窗口的"拒绝"操作。
Api 方法: refuseInvite(): void
从 v2.17.0 版本开始支持
示例:
watchCore.connectMic.refuseInvite();
7.5 获取邀请上麦倒计时
返回当前邀请上麦的剩余时间和总时间,可在 ConnectMicEvents.InviteCountDown 事件中使用。
Api 方法: getInviteCountDown(): InviteCountDownData
从 v2.17.0 版本开始支持
返回值说明: InviteCountDownData 类型
示例:
const { remain, total } = watchCore.connectMic.getInviteCountDown();
console.log(`剩余 ${remain}s / 总 ${total}s`);
八、本地预览
8.1 开启本地预览
用于在连麦面板中预览本地摄像头,未连麦时调用,连麦中无需预览。
Api 方法: startPreview(config: PreviewConfig): Promise<PreviewHandle>
从 v2.17.0
await watchCore.connectMic.startPreview({ videoEl: el, video: true });
``` 版本开始支持
**参数说明:**
- config:`PreviewConfig` 类型,必传
**返回值说明:** `Promise<PreviewHandle>` 类型
**示例:**
```ts
8.2 停止本地预览
Api 方法: stopPreview(): void
从 v2.17.0 版本开始支持
示例:
watchCore.connectMic.stopPreview();
8.3 是否正在本地预览
Api 方法: isPreviewing(): boolean
从 v2.17.0 版本开始支持
8.4 获取本地预览的当前音量(0~1)
仅在预览中可用;非预览态返回 0。
Api 方法: getPreviewVolume(): number
从 v2.17.0 版本开始支持
九、本地音视频开关
9.1 获取当前本地音视频静音状态
返回 { video, audio },true 表示已关闭/静音。未连麦(预览阶段)时返回设备预设值,已连麦时返回底层推流实时状态。
Api 方法: getLocalMuteStatus(): Object
从 v2.17.0 版本开始支持
返回值说明: Object 类型,详细类型说明如下
| 属性名 | 说明 | 类型 |
|---|---|---|
video |
- | boolean |
audio |
- | boolean |
9.2 预设/调整本地音视频开关
未推流时仅写入预设值,acceptInvite / publish 后生效;已推流时等价于调用 enable/disable 对应轨道。
Api 方法: setLocalMuteStatus(option: Object): void
从 v2.17.0 版本开始支持
参数说明:
- option:
Object类型,必传,详细类型说明如下
| 参数名 | 说明 | 类型 | 必须 | 默认值 |
|---|---|---|---|---|
video |
- | boolean |
否 | - |
audio |
- | boolean |
否 | - |
十、连麦网络状态
10.1 获取连麦网络信息
Api 方法: getNetworkInfo(): ConnectMicNetworkInfo
返回值说明: 连麦网络信息,ConnectMicNetworkInfo 类型,详细类型说明如下
| 属性名 | 说明 | 类型 |
|---|---|---|
uplinkNetworkQuality |
连麦上行网络质量 | UplinkNetworkQuality |
uplinkNetworkStatus |
连麦上行网络状态 | NetworkStatus |
downlinkNetworkQuality |
连麦下行网络质量 | DownlinkNetworkQuality |
downlinkNetworkStatus |
连麦下行网络状态 | NetworkStatus |
示例:
const network = watchCore.connectMic.getNetworkInfo();
console.log('推流网络状态', network.uplinkNetworkStatus);
console.log('拉流网络状态', network.downlinkNetworkStatus);
十一、本地流镜像
11.1 获取镜像状态
获取当前连麦流的镜像状态。
Api 方法: getMirrorEnabled(): boolean
从 v2.10.0 版本开始支持
返回值说明: 是否开启镜像
示例:
const mirrorEnabled = watchCore.connectMic.getMirrorEnabled();
console.log('镜像状态:', mirrorEnabled ? '开启' : '关闭');
11.2 切换镜像开关状态
通过 toggleMirror 方法可以切换本地连麦流的镜像状态。开启镜像后,本地流画面会水平翻转。
Api 方法: toggleMirror(enabled?: boolean): void
从 v2.10.0 版本开始支持
参数说明:
- enabled:是否开启镜像,不传则切换当前状态,
boolean类型,选传
示例:
// 开启镜像
watchCore.connectMic.toggleMirror(true);
// 关闭镜像
watchCore.connectMic.toggleMirror(false);
// 切换镜像状态
watchCore.connectMic.toggleMirror();
十二、其他
12.1 用户连麦状态
Enum 枚举: ConnectMicStatus
| 常量 | 枚举成员 | 说明 |
|---|---|---|
'notConnect' |
ConnectMicStatus.NotConnect |
未连麦 |
'applying' |
ConnectMicStatus.Applying |
连麦申请中 |
'publishing' |
ConnectMicStatus.Publishing |
推流中 |
'connected' |
ConnectMicStatus.Connected |
已连麦 |
'error' |
ConnectMicStatus.Error |
连麦异常 |
12.2 连麦类型
用于区分讲师开启的是视频连麦或音频连麦
Enum 枚举: ConnectMicType
| 常量 | 枚举成员 | 说明 |
|---|---|---|
'video' |
ConnectMicType.Video |
视频连麦 |
'audio' |
ConnectMicType.Audio |
音频连麦 |
