> For the complete documentation index, see [llms.txt](https://polyv.gitbook.io/document/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://polyv.gitbook.io/document/docs/live/miniprogram/live-watch-miniprogram-sdk/articles/modules/connect-mic/module-events.md).

# 模块事件

## 一、连麦信息改变

**说明：** 连麦信息通过 `connectMic.getConnectMicInfo()` 获取，当连麦信息改变时会触发该事件。

**Event 事件：** `ConnectMicEvents.ConnectMicInfoChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名              | 说明   | 类型                    |
| ---------------- | ---- | --------------------- |
| `connectMicInfo` | 连麦信息 | `ConnectMicStoreInfo` |

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicInfoChange, () => {
  const connectMicInfo = watchCore.connectMic.getConnectMicInfo();
  console.log('连麦信息更新', connectMicInfo);
});
```

## 二、讲师开启连麦功能

**说明：** 讲师开启连麦功能后，触发该事件，开启后页面即可显示连麦功能。

**Event 事件：** `ConnectMicEvents.OpenConnectMic`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名    | 说明   | 类型               |
| ------ | ---- | ---------------- |
| `type` | 连麦类型 | `ConnectMicType` |

**示例：**

```js
import { ConnectMicType } from '@polyv/live-watch-miniprogram-sdk';
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.OpenConnectMic, (data) => {
  const type = data.type === ConnectMicType.Video ? '视频' : '音频';
  toast.info(`讲师开启了${type}连麦，赶快和主播连麦互动吧～`);
});
```

## 三、讲师关闭连麦功能

**说明：** 讲师关闭连麦功能后触发该事件

**Event 事件：** `ConnectMicEvents.CloseConnectMic`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名    | 说明   | 类型               |
| ------ | ---- | ---------------- |
| `type` | 连麦类型 | `ConnectMicType` |

**示例：**

```js
import { ConnectMicType } from '@polyv/live-watch-miniprogram-sdk';
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.CloseConnectMic, (data) => {
  const type = data.type === ConnectMicType.Video ? '视频' : '音频';
  toast.info(`讲师已结束${type}连麦`);
});
```

## 四、连麦状态更新

**Event 事件：** `ConnectMicEvents.ConnectMicStatusChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名                | 说明     | 类型                 |
| ------------------ | ------ | ------------------ |
| `connectMicStatus` | 连麦状态更新 | `ConnectMicStatus` |

## 五、连麦列表修改

**说明：** 当观众上下麦或用户流加入/退出后，连麦列表改变，通过该事件监听连麦用户列表更新。

**Event 事件：** `ConnectMicEvents.ConnectMicDataChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名        | 说明   | 类型                     |
| ---------- | ---- | ---------------------- |
| `micDatas` | 连麦列表 | `ConnectMicItemData[]` |

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicDataChange, () => {
  const connectMicList = watchCore.connectMic.getMicDatas();
  console.log('连麦用户列表更新', connectMicList);
});
```

## 六、讲师挂断当前连麦者

**说明：** 当讲师挂断当前连麦用户，连麦模块将回调该事件。

**Event 事件：** `ConnectMicEvents.TeacherHangUp`

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.TeacherHangUp, () => {
  toast.info('讲师已挂断你的连麦');
});
```

## 七、连麦人数到达上限

**说明：** 观众点击同意邀请上麦时，可能因连麦人数到达上限而连麦失败，通过该事件监听并页面提示。

**Event 事件：** `ConnectMicEvents.ConnectMicOverLimit`

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.ConnectMicOverLimit, () => {
  toast.error('连麦失败，连麦人数已到达上限');
});
```

## 八、当前主讲状态改变

**说明：** 当讲师授予/撤销当前连麦用户的主讲权限时触发该事件。

**Event 事件：** `ConnectMicEvents.CurrentSpeakerStatusChanged`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名                | 说明        | 类型        |
| ------------------ | --------- | --------- |
| `currentIsSpeaker` | 当前用户是否为主讲 | `boolean` |

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.CurrentSpeakerStatusChanged, (data) => {
  if (data.currentIsSpeaker) {
    toast.info('讲师已授予您主讲权限');
  } else {
    toast.info('讲师已收回您的主讲权限');
  }
});
```

## 九、讲师同意连麦申请

**说明：** 观众申请连麦，讲师同意连麦申请后触发该事件。

**Event 事件：** `ConnectMicEvents.AllowConnectMicApply`

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.AllowConnectMicApply, (data) => {
  toast.success('讲师已同意你的连麦申请');
});
```

## 十、远端连麦用户麦克风开关改变

**Event 事件：** `ConnectMicEvents.RemoteAudioMuteChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名            | 说明      | 类型        |
| -------------- | ------- | --------- |
| `isAudioMuted` | 是否关闭麦克风 | `boolean` |

## 十一、远端连麦用户摄像头开关改变

**Event 事件：** `ConnectMicEvents.RemoteVideoMuteChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名            | 说明      | 类型        |
| -------------- | ------- | --------- |
| `isVideoMuted` | 是否关闭摄像头 | `boolean` |

## 十二、本地麦克风开关改变

**Event 事件：** `ConnectMicEvents.LocalAudioMuteChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名            | 说明      | 类型        |
| -------------- | ------- | --------- |
| `isAudioMuted` | 是否关闭麦克风 | `boolean` |

## 十三、本地摄像头开关改变

**Event 事件：** `ConnectMicEvents.LocalVideoMuteChange`

**回调参数：** `Object` 对象，详细类型说明如下

| 属性名            | 说明      | 类型        |
| -------------- | ------- | --------- |
| `isVideoMuted` | 是否关闭摄像头 | `boolean` |

## 十四、离开连麦成功

**说明：** 本地连麦流离开后触发该事件，触发后连麦状态为 ConnectMicStatus.NotConnect。

**Event 事件：** `ConnectMicEvents.LeaveConnectMicSuccess`

**示例：**

```js
watchCore.connectMic.eventEmitter.on(ConnectMicEvents.LeaveConnectMicSuccess, () => {
  toast.success('你已下麦');
  const connectMicInfo = watchCore.connectMic.getConnectMicInfo();
  console.log('连麦状态', connectMicInfo.conncetMicStatus); // ConnectMicStatus.NotConnect
});
```
