- 文档首页
实时音视频
实时音视频
开发指南
屏幕共享
Flutter 屏幕共享
Flutter 屏幕共享
在实时通信中,如果你希望用户可以分享本地设备播放的屏幕内容和音频,你可以使用 RTC 内置的屏幕采集功能采集屏幕,并通过屏幕共享功能,将采集到的内容与远端用户进行共享。
注意:
- 在使用屏幕共享功能时,仅可见用户可以发布屏幕流。
- 仅支持SDK内部采集,自定义采集需按照 Native SDK 集成及使用方式。
适用场景
前提条件
- Android 5.0 (API 级别 21) 及以上版本。Android 5.0 ~ 10 区间版本仅支持屏幕视频采集,不支持屏幕音频采集,故推荐使用 Android 10 (API 级别 29) 及以上版本。
- iOS 12 及以上版本。若使用 iOS 12 ~ iOS 12.2 区间的系统版本,则需集成 v 3.52 或更高版本的 RTC SDK。
iOS 端接入流程
iOS 端基于苹果提供的 Replaykit 框架实现屏幕录制,可以分享整个系统的屏幕内容。但由于苹果的隐私设置,不同 App 之间数据无法互通,因此需要当前 App(主 App 进程)额外提供一个 Extension 扩展组件(Extension 进程),并且把 App 和 Extension 配置为同一 App Group,让 Extension 录屏进程可以同主 App 进程进行跨进程通信,实现屏幕内容分享。 步骤一:创建并配置 Extension 扩展组件
注意:
将 RTC iOS SDK 的屏幕共享插件引入到工程中时,请保证 VolcEngineRTC 的版本号与 Flutter SDK 内依赖的版本号一致,Flutter SDK 内依赖版本可从SDK 根目录/ios/volc_engine_rtc.podspec文件中查看。
步骤二:在主 App 中关联扩展配置
创建 RTC 引擎后,调用 setExtensionConfig 接口传入 Extension 的 App Group ID 和 Bundle ID,用以响应从系统控制中心发起的屏幕共享请求。
打开 ios/Runner/AppDelegate.m 文件,添加如下代码:
Android 端接入流程
Android 端屏幕共享是基于Android 5(API 级别 21)中引入的媒体投影 API 和 RTC SDK API 共同实现。 注意:
SDK 内部已自动添加屏幕共享所需权限 android.permission.FOREGROUND_SERVICE,无需额外声明。
步骤一:创建录屏权限请求 Activity
在 Android 工程中创建ScreenCaptureRequestActivity.java文件,遵循 SDK 内BaseScreenCaptureRequestActivity接口类实现:
步骤二:绑定录屏权限请求 Activity
在 Android 工程根目录的 AndroidManifest.xml 文件中添加如下代码:
调用 Flutter 接口共享屏幕
API 调用时序图
【可选】设置编码参数
如果默认的编码参数不能满足你的要求,你可以在开始屏幕采集前调用 setScreenVideoEncoderConfig 方法,通过 ScreenVideoEncoderConfig 设置编码参数。参看如下示例:
- 若不设置分辨率,即宽高均为默认值 0 时,SDK 不会对系统采集到的屏幕视频帧进行缩放处理,
- 若屏幕物理分辨率长边像素数小于 1920px,录制视频分辨率为屏幕物理分辨率;
- 若屏幕物理分辨率长边像素数大于 1920px,录制视频会被系统缩放至长边像素数为 1920 左右。
- 若设置了分辨率,SDK 则会对系统采集到的屏幕视频帧进行等比例缩放处理,
- 若源分辨率大于目标分辨率,录制视频将被等比例缩小;
- 若源分辨率小于目标分辨率,录制分辨率则保持不变。
开启屏幕采集
内部采集
调用 startScreenCapture 方法开启屏幕采集,你可以指定需要采集的媒体类型,包括只音频、只视频、音视频均采集。开启采集后,你可以通过updateScreenCapture 方法调整采集的媒体类型。
iOS 端也可以从系统控制中心发起:
自定义采集
停止屏幕采集
发布/停止发布屏幕流
渲染远端屏幕流
停止渲染远端屏幕流
最近更新时间:2026.07.27 14:27:05