更新记录

1.0.0(2026-11-15)

  • 新增面向 HarmonyOS 平板整屏采集并发布到 SRS/RTMP 的稳定版插件合同,保留 H.264 Surface 编码、可选麦克风 AAC、事件和诊断能力。
  • 修复带 ?txSecret、?auth_key 等 SRS 签名查询参数的 RTMP 地址被公共校验拒绝的问题,并统一端口范围校验。
  • 修复启动与停止请求关联编号可能重复的问题,补齐 DNS、握手、连接和断开失败到统一 RTMP 错误码的映射。
  • 优化 uni-app x 示例的根入口类型导入和宿主诊断标记,统一 Harmony HAR、配置和构建元数据为 1.0.0。

平台兼容性

uni-app(5.34)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- √ - - √ - - - √
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(5.34)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - √ -

lizhao-screen-push Harmony 屏幕 RTMP 推流 UTS 插件

介绍

lizhao-screen-push 面向 uni-app Vue3 与 uni-app x 的 HarmonyOS 宿主,把用户确认的系统屏幕采集直接编码并发布到 SRS 等 RTMP 服务;默认无音频,可选麦克风音频,源码与验证状态以本说明为准。

功能特色

功能 解决的问题 API、配置或事件
系统屏幕采集 不需要把屏幕帧逐帧传到 JS startScreenPush、Harmony AVScreenCapture
H.264 Surface 编码 避免 MP4 中转和页面层编码 width、height、fps、videoBitrate
SRS RTMP 发布 一号平板推流,其他设备沿用已有拉流链路 url、getScreenPushCapabilitiesSync().pushProtocols
可选音频 默认关闭;需要时只请求麦克风 audioSource: 'none' | 'microphone'、Harmony 麦克风权限
生命周期与事件 授权、连接、推流、错误和停止均可观察 stopScreenPush、onScreenPushEvent、offScreenPushEvent
脱敏诊断 复现一次后复制完整报告排查 getScreenPushDiagnosticsSync、示例页分段复制

适合哪些场景

场景 推荐能力 使用边界
局域网 Pad 同屏 每台 Pad 使用独立 RTMP 流名推送到 SRS 需要自行分配流名并防止多个设备覆盖同一路径
教室或展厅演示 默认无音频的屏幕推流 当前要求页面前台运行,锁屏和后台长期保活未承诺
带讲解的投屏 选择 audioSource: 'microphone' 只采集麦克风;系统内录音频列为后续扩展
现有 lizhao-live 项目迁移 复用已有 SRS/拉流地址管理 lizhao-live 的相机采集和预览组件不能直接替代屏幕采集

下载与导入

宿主 示例代码位置
uni-app uni_modules/lizhao-screen-push/example/uniapp/index.vue
uni-app x uni_modules/lizhao-screen-push/example/uniappx/index.uvue

从基础到进阶:按业务模块使用

模块一:检查能力并启动

页面只从插件根入口导入。url 是接入方准备的实际 SRS 地址,不会由插件猜测或内置。地址可以带 SRS 常见的签名查询参数,例如 ?txSecret=...&txTime=...,插件会在诊断和报告中脱敏。Harmony 首次启动会出现系统录屏确认,用户拒绝时 Promise 会以 9392005 失败。

import { getScreenPushCapabilitiesSync, startScreenPush } from '@/uni_modules/lizhao-screen-push'

const capabilities = getScreenPushCapabilitiesSync()
if (!capabilities.supported) {
  console.error(capabilities.verification)
} else {
  startScreenPush({
    url: 'rtmp://192.168.1.10/live/pad-1',
    audioSource: 'none'
  }).then((session) => {
    console.log(session.sessionId, session.urlHost, session.width, session.height, session.fps)
  }).catch((error) => {
    console.error(error.errSubject, error.errCode, error.errMsg)
  })
}

模块二:可选麦克风与事件

麦克风是显式选择项,默认值为 none。启用后由 Harmony 系统请求 ohos.permission.MICROPHONE;权限失败不会伪装成无声推流成功。

import { onScreenPushEvent, offScreenPushEvent, startScreenPush } from '@/uni_modules/lizhao-screen-push'

const listenerId = onScreenPushEvent((event) => {
  console.log(event.type, event.state, event.errCode, event.detail)
})
startScreenPush({ url: 'rtmp://192.168.1.10/live/pad-1', audioSource: 'microphone', audioBitrate: 64000 })
  .catch((error) => console.error(error.errCode, error.errMsg))
// 页面退出或不再需要事件时释放监听器。
offScreenPushEvent(listenerId)

模块三:停止与重启

停止操作应使用启动成功返回的 sessionId。启动尚未返回 sessionId 前没有可取消的公开句柄,页面应在启动 Promise 完成后再允许停止;页面销毁时对已返回的会话调用 stopScreenPush。重复停止、页面已经没有活跃会话时返回 state: 'stopped' 的幂等结果;释放失败会保留原生错误,不能根据按钮点击推断远端已经停止。

import { stopScreenPush } from '@/uni_modules/lizhao-screen-push'

stopScreenPush(sessionId).then((result) => {
  console.log(result.state, result.dataJSON)
}).catch((error) => {
  console.error('停止结果未知', error.errSubject, error.errCode, error.errMsg)
})

模块四:诊断报告与复制

示例页底部的“一键复制日志”会固定一次快照,包含插件版本、源码构建标记、宿主运行信息、能力结果、会话和有界脱敏操作日志。报告超过剪贴板长度时使用“复制下一段”;只有剪贴板回读与固定段完全一致后才推进段号。回读失败时使用手动文本入口,不提示伪成功。

import { getScreenPushDiagnosticsSync } from '@/uni_modules/lizhao-screen-push'
const snapshot = getScreenPushDiagnosticsSync()
console.log(snapshot.pluginId, snapshot.version, snapshot.buildMarker, snapshot.entries.length)

API 用途速查

API 用途与返回值
startScreenPush(options) 请求录屏授权、建立编码与 RTMP 发布;返回 Promise<ScreenPushSession>
stopScreenPush(sessionId) 停止采集、编码和发布;返回 Promise<ScreenPushResult>,无活跃会话时幂等成功
getScreenPushCapabilitiesSync() 同步返回平台、协议、音频源、授权和实现校验信息
onScreenPushEvent(listener) 注册持续事件监听,返回监听器 ID
offScreenPushEvent(listenerId) 移除指定监听器,重复调用安全
getScreenPushDiagnosticsSync() 返回版本、源码标记、活跃会话和有界脱敏日志快照

startScreenPush 参数

参数 类型 必填 说明 默认值 可选参数
url string 是 完整 rtmp:// 地址,必须包含主机、应用名和流名;流名可带 SRS 签名查询参数 无 长度不超过8192,端口1–65535
width number 否 偶数视频宽度,范围160–1920 1280 以设备编码器能力为准
height number 否 偶数视频高度,范围160–1920 720 以设备编码器能力为准
fps number 否 整数帧/秒,范围1–60 24 以设备编码器能力为准
videoBitrate number 否 视频码率,单位bps,范围100000–12000000 1200000 以设备编码器能力为准
audioSource 'none' \| 'microphone' 否 音频来源;当前不采集系统内录音频 none microphone
audioBitrate number 否 麦克风音频码率,单位bps 64000 16000–320000
timeoutMs number 否 授权、连接和初始化超时,单位毫秒 15000 1000–60000
followRotation boolean 否 是否跟随旋转重新配置屏幕采集 true 当前设备实际旋转行为以 Harmony 回调为准

返回值、回调和事件

ScreenPushSession 包含 sessionId、state、脱敏后的 urlHost、实际尺寸、帧率、音频源和 startedAt。ScreenPushResult 包含 sessionId、requestId、state、dataJSON;原生清理细节只放在 dataJSON 和诊断日志中。

ScreenPushEvent 包含 sessionId、requestId、type、state、时间、errCode、errMsg 和 detail。当前原生事件类型包括 connected、screen-started、capturing、video-written、audio-written、mediaReady 和 error;原生错误事件会触发一次异步资源释放,业务仍应先读取错误字段和诊断,再决定是否重新启动。启动尚未完成时再次调用 startScreenPush 也会返回 9392004,避免两个编码会话并发进入原生层。事件监听器不会自动释放,页面退出时调用 offScreenPushEvent。

错误码说明

errSubject 固定为 lizhao-screen-push。Promise 失败对象包含 errSubject、errCode、errMsg、operation、sessionId、requestId、nativeType、nativeStack;采集不到的原生字段为空字符串。超时、取消和远端结果未知不会被当作确定成功或确定失败。

错误码 含义 处理建议
9392001 RTMP 地址格式无效 检查协议、主机、应用名和流名
9392002 屏幕推流参数无效 检查偶数尺寸、帧率、码率、音频源和超时
9392003 当前平台不支持 先读取能力;非 Harmony 端使用真实降级或停止
9392004 已有活跃会话 先停止旧会话,再启动新流
9392005 用户取消或未授予屏幕采集 按系统提示授权后由用户重新启动
9392006 Harmony 屏幕采集初始化或启动失败 检查系统录屏能力、占用和原生诊断
9392007 视频编码器或 Surface 不可用 降低规格或更换设备;保留原生错误
9392008 RTMP DNS、连接或发布失败 检查局域网、SRS 端口、流名和鉴权
9392009 麦克风权限或采集失败 关闭音频重试,或授权麦克风后重试
9392010 操作超时,媒体结果可能未知 查询 SRS 状态;不要盲目重复有副作用的发布
9392011 会话已停止或释放 创建新会话,不复用旧 sessionId
9392012 录屏被来电、切换或其他录屏打断 读取事件与诊断,必要时重新授权启动
9392013 原生回调合同无效 核对插件源码、HAR 和自定义基座版本
9392014 资源释放失败 保留 nativeStack,重启前确认系统资源状态
9392015 诊断报告序列化失败 使用页面手动文本并保留原始日志
9392016 原生屏幕推流实现异常 提交完整报告,不能只提供“操作失败”

注意事项

平台与宿主支持范围

平台/宿主 状态 边界
uni-app Vue3 提供示例与公共 API Harmony App 需要匹配原生自定义基座;Web/小程序返回明确不支持
uni-app x 提供 .uvue 示例与公共 API Harmony App 需要匹配原生自定义基座;其他端不宣称屏幕 RTMP 能力
HarmonyOS 当前目标平台 使用系统录屏授权、Surface 编码和自有 RTMP/HAR;完成编译后再做真机验收
Android / iOS 未实现 不复制 Harmony 代码冒充支持,后续单独接入平台原生采集链
Web 明确不支持 不使用浏览器 getDisplayMedia 伪装成 App 屏幕推流
小程序 明确不支持 不把平台直播组件或拉流能力冒充本插件推流

权限、隐私与生命周期

Harmony 模块声明网络权限;选择麦克风时才需要麦克风权限。屏幕采集由系统录屏确认处理,不申请与本能力无关的权限。屏幕内容和音频只发送到调用方提供的媒体地址,诊断默认只保存在本地内存并脱敏,不自动上传。

当前要求用户在应用前台启动并维持推流;系统内录音频、后台长期保活、锁屏继续推流和自动恢复列为后续扩展。页面隐藏或销毁时先调用 stopScreenPush,再解除事件监听;停止 Promise 未确认前不要立即启动同一路流名。

原生 ETS/C++、本地 HAR、权限、资源或 module.json5 变化后必须重新原生联编并制作匹配自定义基座;WGT 或 appResource 不能把新原生代码注入旧基座。没有 DevEco/Harmony 工具链、匹配自定义基座或真机时,只能报告静态和编译结果,不能把它描述成真机同屏通过。

资源与地址限制

RTMP 地址由接入方准备;日志会把完整媒体地址、查询参数和凭据统一脱敏。SRS 应为每台 Pad 分配不同流名,拉流端沿用现有播放链路。网络失败、DNS 超时、服务端拒绝或流名冲突都通过错误码与诊断报告返回,不会显示伪成功。启动阶段的授权、DNS 和 RTMP 发布握手仍在等待时,调用方尚未拿到 sessionId,只能等待 Promise 成功或失败;需要停止时使用成功结果中的会话编号。

作者系列 UTS 插件

插件 能力方向 插件市场
lizhao-alipay-kit 支付宝授权登录、App 支付与脱敏诊断 查看插件
lizhao-app-keepalive 应用保活、唤醒、自愈与报告 查看插件
lizhao-apple-iap 苹果内购、交易恢复、订阅管理与服务端验签参考 查看插件
lizhao-apple-login 苹果授权登录、凭证状态与撤销监听 查看插件
lizhao-bg-audio 背景音频播放、队列、倍速与事件 查看插件
lizhao-ble BLE 扫描、连接、读写、通知与自动重连 查看插件
lizhao-call-kit 电话、短信、通讯录原生能力 查看插件
lizhao-camera-pro 原生相机、拍照录像、水印与媒体保存 查看插件
lizhao-cast-screen DLNA 投屏、AirPlay 路由入口 查看插件
lizhao-choose-file 原生文件选择、上传、进度与取消 查看插件
lizhao-device-id 设备标识、隐私策略与诊断 查看插件
lizhao-dingtalk 钉钉授权登录、内容分享与回执诊断 查看插件
lizhao-doc-corrector 文档扫描、矫正、增强与识别 查看插件
lizhao-douyin-kit 抖音授权登录、内容分享与回执诊断 查看插件
lizhao-emu-detect 模拟器环境检测、风险评分与证据 查看插件
lizhao-float-window 悬浮窗、画中画、权限与诊断 查看插件
lizhao-gallery-pro 相册媒体分页、筛选、缩略图与导出 查看插件
lizhao-google-login Google 授权登录、会话管理与脱敏诊断 查看插件
lizhao-hce-card NFC 虚拟卡、APDU 交互与 NDEF 标签模拟 查看插件
lizhao-health 健康数据授权、查询、统计与写入 查看插件
lizhao-http-server 本地 HTTP 服务、文件传输与实时通信 查看插件
lizhao-icon-pro SVG 图标组件、多主题与缓存 查看插件
lizhao-id-photo 证件照制作、尺寸换算、换底色与模板换装 查看插件
lizhao-img-eraser 图片去水印、局部修复与原生编辑器 查看插件
lizhao-live-activity 实时活动、系统胶囊与普通通知降级 查看插件
lizhao-live-photo 实况照片选取、展示预览与原件处理 查看插件
lizhao-map 高德地图、定位、地点搜索、路线规划与导航 查看插件
lizhao-meta Facebook 登录分享、应用事件与深链 查看插件
lizhao-nfc-pro NFC 标签读写、NDEF、IsoDep 与诊断 查看插件
lizhao-notify-pro 本地通知、点击动作、进度与定时提醒 查看插件
lizhao-novel-reader 原生小说阅读、仿真翻页与段落评论 查看插件
lizhao-office-view Office 与 PDF 文件预览、进度与缓存管理 查看插件
lizhao-pdf-pro PDF 阅读、签批、真实写回与页面处理 查看插件
lizhao-play-billing Google Play 商品购买、订阅、恢复与确认消耗 查看插件
lizhao-qq-share QQ 授权码登录、QQ 与 QQ 空间分享 查看插件
lizhao-qrcode 二维码生成、Logo 与样式配置、批量生成及导出 查看插件
lizhao-scan-pro 原生扫码、连续扫码、相册识别 查看插件
lizhao-serial-port 路径串口、USB 串口、多会话收发与诊断 查看插件
lizhao-share-plus 系统分享、远程文件下载后分享 查看插件
lizhao-smart-tts 系统 TTS、云端合成、听书方案 查看插件
lizhao-sqlite-pro 原生 SQLite、迁移、备份与诊断 查看插件
lizhao-sse-pro SSE、Line、JSONL 与 Raw 流式请求 查看插件
lizhao-tcp-pro TCP 客户端、服务端、多连接与诊断 查看插件
lizhao-usb-storage U 盘、移动硬盘文件浏览、读写与批量复制 查看插件
lizhao-video-editor 视频裁剪、压缩、取帧与 FFmpeg/FFprobe 查看插件
lizhao-video-feed 短视频上下滑、短剧选集与分页加载 查看插件
lizhao-video-player 原生视频播放器、清晰度与播放交互 查看插件
lizhao-video-thumb 视频封面、批量取帧与 Base64 返回 查看插件
lizhao-vpn-pro 企业 VPN、IKEv2、安全接入与脱敏诊断 查看插件
lizhao-wechat-kit 微信登录、分享、支付、小程序与客服 查看插件
lizhao-wecom 企业微信授权登录、内容分享与脱敏诊断 查看插件
lizhao-xhs-share 小红书图文视频分享与回执诊断 查看插件

隐私、权限声明

1. 本插件需要申请的系统权限列表:

网络;启用麦克风时需要麦克风权限;屏幕采集由 HarmonyOS 系统录屏确认处理。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

屏幕视频仅在用户启动录屏并配置 RTMP 地址后发送到接入者的媒体服务;诊断默认只保存在本地内存,不上传。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

暂无用户评论。