功能简介
在视频通话或互动直播中进行屏幕共享,可以将说话人或主播的屏幕内容,以视频的方式分享给其他说话人或观众观看,以提高沟通效率。
屏幕共享在以下场景中应用广泛:
-
视频会议场景中,将讲话者本地的文件、数据、网页、PPT 等画面分享给其他与会人;
-
在线课堂场景中,将老师的课件、笔记、讲课内容等画面展示给学生观看。
实现方法
SDK 不提供在 Android 平台实现屏幕共享的 API,但你可以结合 Android 的系统 API 实现该功能。
- 利用 MediaProjection/VirtualDisplay 拿到屏幕数据
- 将屏幕帧数据编码成H264格式(具体实现请参考示例项目)
- 将编码后的数据作为外部视频源,调用 SDK 的
pushExternalVideoFrame
传给远端
// java
private fun requestCapture() {//申请屏幕共享 注意权限申请
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
//5.0 之后才允许使用屏幕截图
mediaProjectionManager = getSystemService(
Context.MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(),
18)
} else {
Toast.makeText(this, "系统版本低于5.0!", Toast.LENGTH_SHORT).show()
}
}
// 将采集到的屏幕共享视频帧推送至 SDK
rtcEngine.pushExternalVideoFrame(new ARVideoFrame(...));
我们在 GitHub 提供已实现屏幕共享功能的开源示例项目。你可以前往 ScreenShare下载体验。该示例项目还提供了同时发布屏幕共享流和开启本地视频流的实现逻辑。