# features/livestream

> APP-PLUS 直播播放的"桥接层"——把第三方 IjkPlayer 类插件接入到业务层。
> 与 `features/live/`（数据/状态/工具）并存，不替代后者。

## 为什么需要这一层

HBuilderX 5.08+ 把 uni-app `<video>` 的底层从 ijkplayer 换成了 ExoPlayer (Android) / AVPlayer (iOS)，
两者**原生都不支持 RTMP**，导致"播一阵停一阵"。

解决方案：使用插件市场上**带 IjkPlayer 内核**的第三方 UTS 原生组件来播 RTMP/FLV。

当前接入的插件：**`wrs-uts-videoplayer`**（DCloud 插件市场 id=16312）—— 真 UTS 原生组件，
支持 `playerCore: "IjkPlayer"`，nvue 中可直接用 `<wrs-uts-videoplayer>` 标签。

## 目录结构

```
features/
├── live/                          # 直播业务工具（gateway / stream-picker / trial-meter …）
└── livestream/                    # 第三方播放器接入层（仅 APP-PLUS）
    ├── README.md                  ← 你正在读
    ├── RESCUE.md                  # 集成步骤 + 真机验证清单
    └── external-player-detect.js  # 探测 wrs-uts-videoplayer 是否装好
```

## 主调度逻辑

```
                ┌──────────────────────────────────────┐
                │ 当前流是 rtmp:// / *.flv 吗？         │
                └────────────────┬─────────────────────┘
                                 │
                  ┌──────────────┴──────────────┐
                  ▼                             ▼
              是（直播流）                  否（m3u8 / mp4 录播）
                  │                             │
                  ▼                             ▼
       wrs-uts-videoplayer 已装？        用原生 <video>
                  │                       （ExoPlayer/AVPlayer 也能播 HLS/MP4）
        ┌─────────┴─────────┐
        ▼                   ▼
       是                   否
        │                   │
        ▼                   ▼
  external (IjkPlayer)    video（RTMP 会卡，但至少不崩）
```

代码体现：`components/live-watch/stream-player.nvue` 的 `strategy` 计算属性。

## 业务调用

无需调用——`stream-player.nvue` 自动调度。业务层只需正常传 `:source` 即可。

如果业务层有自定义需求（比如做悬浮窗、截屏、双流并发），可以直接：

```js
import { hasWrsVideoPlayer, getExternalPlayerApi } from '@/features/livestream/external-player-detect'

if (hasWrsVideoPlayer) {
  const UTSVideoPlayer = getExternalPlayerApi()
  // UTSVideoPlayer.canDrawOverlays()
  // UTSVideoPlayer.isPlaying()
  // UTSVideoPlayer.closePicInPic()
  // ……详见 uni_modules/wrs-uts-videoplayer/readme.md
}
```

## 上线前 checklist

详见 [RESCUE.md](./RESCUE.md)。
