# 模块事件

## 一、播放器信息修改事件

播放器模块会保存播放器的状态信息，通过该事件监听播放器状态改变。

**Event 事件：** `PlayerEvents.PlayerInfoChange`

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

| 属性名          | 说明    | 类型                |
| ------------ | ----- | ----------------- |
| `playerInfo` | 播放器信息 | `PlayerStoreInfo` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerInfoChange, (data) => {
  const playerInfo = data.playerInfo;
  console.log('播放状态', playerInfo.playStatus);
});
```

## 二、播放器暖场信息更新

暖场信息初始化有一定的延迟，开发者可通过该事件监听暖场信息初始化完成并获取暖场信息。

**Event 事件：** `PlayerEvents.PlayerWarmUpSettingChange`

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

| 属性名             | 说明   | 类型                    |
| --------------- | ---- | --------------------- |
| `warmUpSetting` | 暖场信息 | `PlayerWarmUpSetting` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerWarmUpSettingChange, () => {
  const setting = watchCore.player.getPlayerWarmUpSetting();
  console.log('暖场类型', setting.warmUpType);
  console.log('暖场图片地址', setting.warmUpImg);
  console.log('暖场视频地址', setting.warmUpVideo);
});
```

## 三、播放器配置信息加载成功

**Event 事件：** `PlayerEvents.PlayerConfigLoaded`

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerConfigLoaded, () => {
  console.log('播放配置加载成功');
});
```

## 四、播放器初始化完毕

调用播放器模块的 `setupPlayer` 方法创建播放器时，通过 `PlayerInited` 事件监听播放器初始化完成事件，触发该事件后即可调用播放器的 Api。

**Event 事件：** `PlayerEvents.PlayerInited`

**示例：**

```js
// 创建播放器
watchCore.player.setupPlayer({
  container: 'NodeElement',
});

watchCore.player.eventEmitter.on(PlayerEvents.PlayerInited, () => {
  console.log('播放器初始化完成');
  const playerInfo = watchCore.player.getPlayerInfo();
  console.log(playerInfo.playerInited); // true
});
```

## 五、播放器播放事件

用户点击播放或通过 Api 播放后会回调播放事件，开发者也可通过 [PlayerEvents.PlayerInfoChange](https://git.polyv.net/help-center/document-center/-/blob/master/live/js/new_sdk/live_watch_sdk/articles/modules/player/module-events.md?id=eventdoc_playerevents_playerinfochange) 事件同步播放状态。

**Event 事件：** `PlayerEvents.PlayerPlaying`

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerPlaying, () => {
  console.log('播放了');
});
```

## 六、播放器暂停事件

用户点击暂停、自动播放失败、通过 Api 暂停都会回调暂停事件，开发者也可通过 [PlayerEvents.PlayerInfoChange](https://git.polyv.net/help-center/document-center/-/blob/master/live/js/new_sdk/live_watch_sdk/articles/modules/player/module-events.md?id=eventdoc_playerevents_playerinfochange) 事件同步播放状态。

**Event 事件：** `PlayerEvents.PlayerPause`

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerPause, () => {
  console.log('暂停了');
});
```

## 七、音量改变

音量改变时触发该事件。

**Event 事件：** `PlayerEvents.VolumeChange`

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

| 属性名             | 说明   | 类型       |
| --------------- | ---- | -------- |
| `currentVolume` | 当前音量 | `number` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.VolumeChange, () => {
  const currentVolume = watchCore.player.getCurrentVolume();
  console.log('当前音量', currentVolume);
});
```

## 八、线路切换

线路切换时触发该事件。

**Event 事件：** `PlayerEvents.LineChange`

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

| 属性名           | 说明   | 类型       |
| ------------- | ---- | -------- |
| `currentLine` | 当前线路 | `number` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.LineChange, () => {
  const currentLine = watchCore.player.getCurrentLine();
  console.log('当前线路', currentLine);
});
```

## 九、清晰度级别切换

清晰度切换时触发该事件。

**Event 事件：** `PlayerEvents.QualityLevelChange`

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

| 属性名                   | 说明      | 类型       |
| --------------------- | ------- | -------- |
| `currentQualityLevel` | 当前清晰度级别 | `number` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.QualityLevelChange, () => {
  const currentLevel = watchCore.player.getCurrentQualityLevel();
  console.log('当前清晰度', currentLevel);
});
```

## 十、倍速修改

倍速切换时触发该事件。

**Event 事件：** `PlayerEvents.RateChange`

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

| 属性名           | 说明     | 类型       |
| ------------- | ------ | -------- |
| `currentRate` | 当前播放倍速 | `number` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.RateChange, () => {
  const currentRate = watchCore.player.getCurrentRate();
  console.log('当前倍速', currentRate);
});
```

## 十一、播放器弹幕改变

播放器弹幕显示状态切换时触发该事件。

**Event 事件：** `PlayerEvents.BarrageStatusChange`

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

| 属性名           | 说明     | 类型        |
| ------------- | ------ | --------- |
| `barrageShow` | 是否显示弹幕 | `boolean` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.BarrageStatusChange, () => {
  const playerInfo = watchCore.player.getPlayerInfo();
  console.log('弹幕显示状态', playerInfo.barrageShow);
});
```

## 十二、调起弹幕设置弹窗

移动端下的弹幕设置需要由页面实现，该事件用于监听观众点击播放器的弹幕设置按钮，触发该事件后显示弹幕设置蒙层。

**Event 事件：** `PlayerEvents.BarrageSettingClick`

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.BarrageSettingClick, () => {
  console.log('显示弹幕设置面板');
});
```

## 十三、播放时间改变

**Event 事件：** `PlayerEvents.TimeUpdate`

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

| 属性名            | 说明          | 类型       |
| -------------- | ----------- | -------- |
| `currentTime`  | 当前播放时间，单位：秒 | `number` |
| `durationTime` | 播放总时长，单位：秒  | `number` |

## 十四、回放播放结束

**Event 事件：** `PlayerEvents.PlaybackOver`

## 十五、回放续播事件

**Event 事件：** `PlayerEvents.HistoryPlay`

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

| 属性名           | 说明         | 类型       |
| ------------- | ---------- | -------- |
| `historyTime` | 续播的时间，单位：秒 | `number` |

## 十六、无延迟播放异常

通过 `LowLatencyError` 事件监听无延迟播放异常，异常后切到正常延迟模式。

**Event 事件：** `PlayerEvents.LowLatencyError`

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

| 属性名         | 说明   | 类型                  |
| ----------- | ---- | ------------------- |
| `errorCode` | 错误码  | `string`            |
| `reason`    | 错误原因 | `PlayerErrorReason` |
| `message`   | 错误信息 | `string`            |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.LowLatencyError, () => {
  toast.error('播放无延迟异常，已帮您切换到正常延迟模式');
  // TODO 重建播放器并使用正常延迟
});
```

## 十七、切换播放器全屏

**Event 事件：** `PlayerEvents.ToggleFullScreen`

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

| 属性名                  | 说明      | 类型               |
| -------------------- | ------- | ---------------- |
| `isPlayerFullscreen` | 是否播放器全屏 | `boolean`        |
| `fullScreenMode`     | 当前全屏方案  | `FullScreenMode` |

## 十八、防录屏跑马灯异常

**Event 事件：** `PlayerEvents.PlayerMarqueeError`

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerMarqueeError, () => {
  toast.error('跑马灯异常');
});
```

## 十九、播放器打点信息改变

**Event 事件：** `PlayerEvents.PlayerTimeAxisMarkListChange`

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

| 属性名                | 说明   | 类型                   |
| ------------------ | ---- | -------------------- |
| `timeAxisMarkList` | 打点列表 | `TimeAxisMarkInfo[]` |

**示例：**

```js
watchCore.player.eventEmitter.on(PlayerEvents.PlayerTimeAxisMarkListChange, (params) => {
  toast.error('播放器打点信息改变', params);
});
```

## 二十、播放器"精彩看点"按钮点击事件

**Event 事件：** `PlayerEvents.PlayerHighlightsBtnClicked`

## 二十一、播放器"实时字幕"切换按钮切换

**Event 事件：** `PlayerEvents.PlayerSubtitleSwitched`

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

| 属性名       | 说明   | 类型        |
| --------- | ---- | --------- |
| `checked` | 是否打开 | `boolean` |

## 二十二、播放器 UI 控制栏显隐事件

**Event 事件：** `PlayerEvents.PlayerUIControlDisplay`

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

| 属性名       | 说明        | 类型        |
| --------- | --------- | --------- |
| `visible` | 当前控制栏显示状态 | `boolean` |

## 二十三、移动端播放器Loading显示隐藏事件

**Event 事件：** `PlayerEvents.PlayerLoading`

## 二十四、回放字幕开启和关闭指定的字幕

**Event 事件：** `PlayerEvents.PlayerUIReplaySubtitleChecked`

**回调参数：** `PlayerUIReplaySubtitleCheckedCallbackParams`

## 二十五、移动端播放器点击字幕的选择器时触发

**Event 事件：** `PlayerEvents.PlayerUIReplaySubtitleSelectBtnClick`

**回调参数：** `PlayerUIReplaySubtitleSelectBtnClickCbParams`

## 二十六、移动端播放器设置面板皮肤初始化事件

**Event 事件：** `PlayerEvents.PlayerSetupPanelSkinInit`

## 二十七、移动端播放器头部广告点击事件

**Event 事件：** `PlayerEvents.PlayerHeadAdClicked`

**回调参数：** `PlayerHeadAdClickedCbParams`

## 二十八、移动端播放器暂停广告点击事件

**Event 事件：** `PlayerEvents.PlayerStopAdClicked`

**回调参数：** `PlayerStopAdClickedCbParams`
