# VideoPlayer

**控件功能**：一个支持多种视频格式（MP4、HLS `.m3u8`、DASH `.mpd`）的视频播放器控件，内置播放控制条，支持播放/暂停、音量调节、倍速播放、音轨切换和全屏功能。  
**类型**：普通控件  
**父类控件**：`bricks.VBox`

## 初始化参数

| 参数名     | 类型    | 说明 |
|----------|--------|------|
| `url`     | String | 视频资源地址，支持 `.mp4`、`.m3u8`（HLS）、`.mpd`（DASH）格式 |
| `autoplay`| Boolean | 是否自动播放，默认为 `false` |

> 示例：
> ```js
> new bricks.VideoPlayer({
>   url: 'https://example.com/video.m3u8',
>   autoplay: true
> });
> ```

## 主要事件

| 事件名         | 触发条件 |
|--------------|--------|
| `domon`       | 控件被挂载到 DOM 时触发，用于初始化播放器 |
| `domoff`      | 控件从 DOM 中移除时触发，用于销毁播放器资源 |
| `click`       | 点击播放区域时显示控制栏，并启动隐藏倒计时 |
| `play_ok`     | （由 `Iptv` 使用）视频成功开始播放时可通过外部监听上报 |
| `play_failed` | （由 `Iptv` 使用）视频加载失败或无法播放时触发上报 |

> 注意：`play_ok` 和 `play_failed` 并非直接由 `VideoPlayer` 派发，而是通过其子类或组合控件（如 `Iptv`）在状态判断后手动调用。

---

# Iptv

**控件功能**：专用于 IPTV 场景的播放控件，可动态获取频道信息并自动加载 `VideoPlayer` 进行播放，同时支持播放成功/失败时向服务器上报状态。  
**类型**：容器控件  
**父类控件**：`bricks.VBox`

## 初始化参数

| 参数名           | 类型    | 说明 |
|------------------|--------|------|
| `iptv_data_url`   | String | 获取频道数据的接口 URL，返回包含 `url`、`tv_name`、`id` 等字段的 JSON 数据 |
| `playok_url`      | String | 播放成功时上报的接口地址（可选） |
| `playfailed_url`  | String | 播放失败时上报的接口地址（可选） |

> 示例：
> ```js
> new bricks.Iptv({
>   iptv_data_url: '/api/iptv/channel',
>   playok_url: '/api/report/playok',
>   playfailed_url: '/api/report/playfailed'
> });
> ```

## 主要事件

| 事件名         | 触发条件 |
|--------------|--------|
| `play_ok`     | 当内部 `VideoPlayer` 成功播放时，向 `playok_url` 发起 GET 请求进行上报 |
| `play_failed` | 当 `VideoPlayer` 播放失败时，向 `playfailed_url` 发起 GET 请求进行上报 |

> 说明：这两个事件是通过监听 `VideoPlayer` 的底层行为（如元数据加载完成且未出错）间接触发的，目前依赖于业务逻辑判断。

### 方法说明

- `setValue(data)`：更新当前播放频道的数据（如更换频道），会同步更新标题和视频源。
  - 参数 `data`: 包含 `url`, `tv_name`, `id` 的对象
  - 示例：
    ```js
    iptvWidget.setValue({
      id: "cctv1",
      tv_name: "CCTV-1 综合",
      url: "https://live.example.com/cctv1.m3u8"
    });
    ```

