你已经装好
uni_modules/wrs-uts-videoplayer。本文档讲剩下要做的事, 以及怎么验证 IjkPlayer 内核真的在工作。
<wrs-uts-videoplayer> 标签底层有 4 个 Android 内核可选,1 个 iOS 内核可选:
| 平台 | 内核选项 | RTMP 支持 |
|---|---|---|
| Android | Exo2Player | ❌ 不行 |
| Android | SystemPlayer | ❌ 不行 |
| Android | IjkPlayer | ✅ 能播 |
| Android | AliPlayer | ⚠️ 看版本 |
| iOS | SystemPlayer | ❌ 不行 |
| iOS | IjkPlayer | ✅ 能播 |
我们已经在 stream-player-external.nvue 把 playerCore 硬编码成 "IjkPlayer"。
按 wrs-uts-videoplayer/readme.md 的"集成步骤"第 1 条:
拷贝 demo 里的
AndroidManifest.xml、Info.plist、nativeResources文件到项目根目录
如果 demo 没下载,可以从 https://www.cnblogs.com/wenrisheng/p/18323027 看作者博客指引。
⚠️ 如果你的项目已经有
AndroidManifest.xml,不要直接覆盖,要把 demo 里的<activity>/<service>/<receiver>节点合并进来。否则你现有的 push / IM 等模块会失效。
HBuilderX 顶部菜单:
标准基座不包含任何 UTS 原生组件,必须打自定义基座。
HBuilderX 右上角:运行 → 运行到手机或模拟器 → 使用自定义调试基座
打开任意直播间,控制台 Console 应该能看到:
=== [STREAM-PLAYER:NVUE] mounted === { strategy: "external", hasExternalLivePlayer: true, ... }
[STREAM-PLAYER:EXT] mounted { hasPlugin: true, source: "rtmp://...", playerCore: "IjkPlayer" }
[STREAM-PLAYER:EXT] wrs event onReadyToPlay { totalTime: ... }
[STREAM-PLAYER:APP] external play
画面应该流畅播放,不再出现"播一会停一会"。
video 而不是 external,怎么回事?A: 两种可能:
require('@/uni_modules/wrs-uts-videoplayer') 抓不到 → 重新打基座<video>A: 探测脚本 external-player-detect.js 用的是 require('@/uni_modules/wrs-uts-videoplayer')。
检查:
uni_modules/wrs-uts-videoplayer 而不是别的拼写)A: 看 e.detail 里的具体错误。常见原因:
NSAllowsArbitraryLoads,wrs 插件已带)A: IjkPlayer 自带 .so 库就是这个量级。生产正式包 release 后会瘦身一些,调试基座大一点正常。 如果只针对 arm64-v8a 架构,可以在 manifest 里关掉 armeabi-v7a。
A: H5 不走这条链。H5 用 components/live-watch/stream-player.vue(AliPlayer/hls.js)。
wrs-uts-videoplayer 只能用于 nvue + APP-PLUS。
A: 同作者 wrs 还有一些免费版本(功能少),插件市场搜"wrs ijkplayer"。 但 299 元相比自研 UTS 插件的工作量(按时薪算至少几十小时),值得。
业务层切流(比如换房间)时,stream-player.nvue 会因为 source 变化触发 watcher。
stream-player-external.nvue 已经把 paramsStr 做成 computed,
source 变化时 params 自动重新计算,wrs 内部会感知到 props 变化重新走 setUrl。
如果发现切流不重连,看 wrs 文档第 116 行起的 setUrl 业务定义。
必要时可以在 watcher 里强制 :key="source" 来 remount。
| 优化项 | 思路 |
|---|---|
| 自动重连 | 监听 onError 后延迟 3s 重新 setUrl |
| 截屏分享 | 调用 business: "getImage",回调里拿 path |
| 弹幕浮层 | nvue z-index 比 <wrs-uts-videoplayer> 高即可 |
| 画中画 | business: "startPicInPic",先检查 UTSVideoPlayer.canDrawOverlays() |