更新记录
1.0.0(2026-05-08)
1.0.0
屏幕共享、会议主控、屏幕推流、录音
平台兼容性
uni-app x(5.0)
| Chrome | Safari | Android | Android插件版本 | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|---|
| × | × | 7.0 | 1.0.0 | × | × | × |
安卓屏幕推流(RTMP)
- 需要自定义基座
- 基于 UTS + 安卓原生(RootEncoder) 实现手机录音+屏幕录制推流。
- 服务端使用SRS(Simple Realtime Server)测试通过
一、核心概念
- 推流流程:初始化 → 权限检查 → 开始推流 → 停止推流
- 关键权限:麦克风权限(可选)、屏幕录制授权(必选)
- 错误码:统一错误回调
二、错误码定义(必须熟记)
AUDIO_PERMISSION_DENIED: 10001 // 麦克风权限被拒绝
OPEN_PERMISSION_SETTING_FAILED: 10002 // 打开权限设置页失败
PREPARE_STREAM_FAILED: 10003 // 推流准备失败
SCREEN_CAPTURE_DENIED: 10004 // 屏幕录制授权被拒绝
AUTH_ERROR: 10005 // 推流服务器鉴权失败
UNINITIALIZED: 20001 // 未初始化
INITIALIZED: 20002 // 已初始化
三、完整使用流程(标准步骤)
步骤 1:引入依赖
在页面中导入推流相关 API:
import { initStream, startStream, openAppPermissionSettings, stopStream, checkPermissions } from "@/uni_modules/skyle-screen"
步骤 2:获取页面 Activity(必须)
推流需要依赖安卓页面上下文,必须先获取当前页面 Activity:
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1] as UniPage
const activity = currentPage.getAndroidActivity()
if (activity == null) {
console.error("获取Activity失败,无法初始化推流")
return
}
步骤 3:初始化推流(initStream)
作用:创建推流实例、检查麦克风权限,初始化成功后才能开始推流。
配置:推流地址、音视频参数、监听初始化成功/失败、推流状态
initStream({
// 必传参数
activity: activity!,
rtmpUrl: "你的RTMP推流地址",
useMic: false, // 是否开启麦克风(true=开启,false=关闭)
// 可选:视频参数(低码率推荐配置)
videoWidth: 360,
videoHeight: 640,
videoBitrate: 500 * 1000, // 500kbps
videoFps: 15,
// 初始化成功:权限检查通过,调用开始推流
onSuccess() {
console.log("初始化成功,准备开始推流")
startStream() // 自动开始推流
},
// 初始化/推流失败:统一错误处理
onFailed: (code: number, msg: string) => {
console.log("失败 code:", code, "msg:", msg)
// 麦克风权限被拒 → 打开系统设置
if (code === 10001) {
openAppPermissionSettings()
}
},
// 推流状态回调
onConnected: () => {
console.log("推流连接成功")
},
onDisconnected: () => {
console.log("推流连接断开")
}
})
步骤 4:开始推流(startStream)
- 必须在
onSuccess回调中调用 - 会自动请求屏幕录制授权(用户同意后正式推流)
步骤 5:停止推流(stopStream)
页面卸载、手动停止时调用,自动释放资源、断开连接、停止服务:
function stop() {
stopStream()
console.log("🛑 已停止推流")
}
四、完整页面代码
<template>
<view id="testId">
<text>屏幕推流测试</text>
<text @click="stop">停止推流</text>
</view>
</template>
<script setup lang="uts">
import { initStream, startStream, openAppPermissionSettings, stopStream } from "@/uni_modules/skyle-screen"
// 停止推流
function stop(){
stopStream()
}
// 延迟初始化(保证页面加载完成)
setTimeout(() => {
// 1. 获取Activity
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1] as UniPage
const activity = currentPage.getAndroidActivity()
if (activity == null) {
console.error("获取Activity失败")
return
}
// 2. 初始化推流
initStream({
activity: activity!,
rtmpUrl: "rtmp://localhost/live/stream",
useMic: false,
videoWidth: 360,
videoHeight: 640,
videoBitrate: 500 * 1000,
videoFps: 15,
// 初始化成功 → 自动开始推流
onSuccess() {
startStream();
},
// 失败统一处理
onFailed: (code : number, msg : string) => {
console.log("推流失败 code:", code, "msg:", msg)
if (code == 10001) {
openAppPermissionSettings()
}
},
// 推流状态
onConnected: () => {
console.log("推流连接成功")
},
onDisconnected: () => {
console.log("推流断开")
}
})
}, 3000)
</script>
五、标准执行流程(时序)
页面加载
↓
延迟获取当前页面 Activity
↓
调用 initStream → 创建推流实例
↓
检查麦克风权限
├─ 有权限 / 关闭麦克风 → 触发 onSuccess
└─ 无权限 → 触发 onFailed(10001)
↓
onSuccess 回调 → 调用 startStream()
↓
请求屏幕录制授权
├─ 用户同意 → 开始推流,触发 onConnected
└─ 用户拒绝 → 触发 onFailed(10004)
↓
推流中 → 正常传输音视频数据
↓
手动调用 stopStream → 停止推流、释放所有资源
六、常见问题处理
| 错误码 | 问题描述 | 解决方案 |
|---|---|---|
| 10001 | 麦克风权限被拒 | 引导用户打开权限设置 |
| 10004 | 屏幕录制授权被拒 | 无法推流,需重新请求授权 |
| 10005 | RTMP 地址/鉴权失败 | 检查推流地址是否正确 |

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 12
赞赏 0
下载 11881163
赞赏 1912
赞赏
京公网安备:11010802035340号