|
|
2 недель назад | |
|---|---|---|
| .. | ||
| README.md | 2 недель назад | |
| RESCUE.md | 2 недель назад | |
| external-player-detect.js | 2 недель назад | |
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 即可。
如果业务层有自定义需求(比如做悬浮窗、截屏、双流并发),可以直接:
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
}
详见 RESCUE.md。