logo
当前页

屏幕共享

2025-01-20

功能简介

屏幕共享,是指在视频通话或互动直播过程中将屏幕内容以视频的方式分享给其他的观众,以增强互动体验,提高沟通效率。

屏幕共享在如下场景中应用广泛:

  • 视频会议场景中,屏幕共享可以将讲话者本地的文件、数据、网页、PPT 等画面分享给其他与会人;
  • 在线课堂场景中,屏幕共享可以将老师的课件、笔记、讲课内容等画面展示给学生观看。

前提条件

在实现屏幕共享功能之前,请确保:

  • 支持 Android 5.0 或以上版本,且支持音视频的 Android 设备或模拟器(推荐使用真机)。
  • 支持 iOS 12.0 或以上版本且支持音视频的 iOS 设备或模拟器(推荐使用真机)。
  • 该功能对设备性能要求较高,推荐在 iPhone X 及之后机型上使用。
  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目信息
  • 已在项目中集成 ZEGO Express SDK,并实现了基本的音视频推拉流功能,详情请参考 快速开始 - 集成快速开始 - 实现流程

使用步骤

开启权限

(必选)Android 在录制屏幕前,会弹窗提示用户是否允许应用录制屏幕,请进行授权。

注意

请务必声明以下权限,否则将无法使用屏幕共享功能。

如果目标 Android SDK 版本是 34.0.0 及以后版本,您需要进入您项目的 “manifest.json” 文件,打开 “App 云打包权限配置” 文件,设置 FOREGROUND_SERVICEFOREGROUND_SERVICE_MEDIA_PROJECTION 权限声明。

<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION"/>

设置采集源为屏幕共享源

视频源

SDK 推流的视频源默认为摄像头源,如果需要推屏幕共享源,需要通过 setVideoSource 进行切换为屏幕共享。

ZegoExpressEngine.instance().setVideoSource(ZegoVideoSourceType.ScreenCapture, ZegoPublishChannel.Aux);

音频源

SDK 推流的音频源默认为麦克风源,如果需要推屏幕共享源,需要通过 setAudioSource 进行切换为屏幕共享。

ZegoExpressEngine.instance().setAudioSource(ZegoAudioSourceType.ScreenCapture, ZegoPublishChannel.Aux);

开始屏幕共享

Android 和 iOS 的屏幕共享方式不同,具体如下:

登录房间推流

完成上述屏幕共享源的采集过程后,将采集到的数据源 startPublishingStream 推送到云服务器。(推送数据源的通道必须与设置采集源的通道保持一致)

ZegoExpressEngine.instance().startPublishingStream(streamID, ZegoPublishChannel.Aux);

观看远端屏幕共享

完成以上步骤后,其他用户可以使用 startPlayingStream 接口拉取屏幕共享流。

// 拉流播放,需传入发起屏幕共享的用户推流时所用的 streamID
ZegoExpressEngine.instance().startPlayingStream(streamID);

常见问题

  1. iOS 是否支持共享指定区域?

    iOS 系统仅支持共享整个屏幕,不支持共享指定区域。

  2. iOS 使用屏幕共享时进入后台,为什么会停止采集?

    • 在应用中开启音频录制的后台模式。
    • 若使用主路进行屏幕共享功能,SDK 将不会启动音频内部采集,无法进行后台保活,当应用退后台后,屏幕共享可能停止,建议对应用添加后台保活处理逻辑。
  3. iOS 使用屏幕共享时出现音频播放异常,如何处理?

    若使用屏幕共享功能采集并推流音频,同时又在本机使用拉流功能,会导致 iOS 系统重复采集拉流音频,导致音频播放异常,建议使用 muteAllPlayStreamAudio 禁止拉取所有音频流。

Previous

视频画面旋转

Next

基础美颜