# 模块事件

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

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

**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`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polyv.gitbook.io/document/docs/live/js/new-sdk/live-watch-sdk/articles/modules/player/module-events.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
