RTC Android 屏幕分享开发集成指南

本文档用于指导用户集成Android屏幕分享功能,适用于Android屏幕内容以视频的方式实时分享到会议里,供会议内其他用户订阅查看的应用场景。屏幕分享时可指定视频分辨率、帧率、码流参数,且支持横屏、竖屏分享以及指定屏幕区域的分享。屏幕分享之前需要先加入房间(连接信令服务器、媒体服务器),还需动态申请用户屏幕录制权限。需要注意的是,相较于Android API 28及以下版本,API 29及以上版本(AndroidX)的屏幕分享方式会有所不同,在下文中会做详细的介绍。

支持的平台

iOSAndroidMac OSWindowsElectron微信小程序Chrome 浏览器
×

全屏分享

Android API 28及以下版本

设备屏幕显示的所有内容被实时完整的采集,经过编码后发布到会议里。主要的流程包括:通过 intent 调起屏幕管理服务,初始化RTC SDK屏幕分享模块,传入指定的视频分辨率、帧率后启动屏幕共享。在调起系统的屏幕管理服务后,会弹出屏幕分享权限对话框,在用户选择接受申请时才能开启屏幕共享功能。

  1. 在Activity中启动系统屏幕管理服务,调用 startActivityForResult 后会弹出屏幕分享对话框,需要用户接受申请后开能开启分享。

  2. 在Activity中重载 onActivityResult(int requestCode, int resultCode, Intent data) 方法,在方法体内初始化RTC SDK的屏幕分享模块,并发布屏幕视频。

  3. 停止发布屏幕视频

  4. 设置屏幕分享的事件通知,会议中用户 "发布/关闭屏幕视频"、"订阅/取消订阅其他用户屏幕视频" 等操作均会触发事件通知。需要注意的是,屏幕事件通知需要在操作屏幕分享之前设置,否则会丢失之前的事件通知。

  5. 在收到其他用户屏幕分享通知后(onPublishScreenNotify),需要订阅该用户的屏幕视频,并会异步收到订阅事件通知 ”onSubscribeResult(int result, String fromId)“ ,此方法 result 为 0 代表订阅成功。在订阅成功后,需要对屏幕视频做渲染才能显示这路视频。同理,在收到用户关闭屏幕分享时(onUnpublishScreenNotify),需要停止订阅该屏幕视频并取消订阅这路视频。

  6. 暂停/继续 屏幕采集的控制,暂停时共享屏幕视频会卡在最后一帧,继续时会恢复视频。基于私密安全的考虑,当应用从前台切换到后台时,停止屏幕采集,可以避免用户屏幕的私密内容被暴露给会议中其他用户。

Android API 29 及以上版本

Android API 29 以上版本如果导入 AndroidX 来替代Support库,则需要将发布屏幕视频代码(mScreen.publishedScreens)放到前台服务service 的 onStartCommand 方法中执行,而其他部分代码不用修改。

  1. 前台服务代码

  2. AndroidManifest.xml 文件中注册 MyForegroundService 服务

  3. Activity 中启动服务(发布屏幕共享视频)

  4. Activity 中停止前台服务

区域屏幕共享

区域屏幕共享是指在开启全屏共享后,在全屏共享的这路视频上裁剪指定的区域,并用于共享一路新的视频。区域共享需要创建区域对象ScaleZone,指定矩形区域的左上角这一点的x/y坐标值,以及区域的宽和高的值,最后再调用区域共享接口发布视频。需要注意的是,区域共享是基于全屏共享的视频数据。因此在区域共享之前,需要先启动全屏共享。

常见问题排查