Android 屏幕共享

技术原理

根据实际业务场景的不同,你可以选择以下任一方式调用 API 实现屏幕共享:
  • 数字列表项目在加入频道前调用 startScreenCapture,然后调用 joinChannel [2/2] 加入频道并设置 publishScreenCaptureVideo 为 true,即可开始屏幕共享。
  • 在加入频道后调用 startScreenCapture,然后调用 updateChannelMediaOptions 更新频道媒体选项并设置 publishScreenCaptureVideo 为 true,即可开始屏幕共享。

注意事项

  • 在开启屏幕共享后,声网以屏幕共享视频流的分辨率作为计费标准,详见计费说明。默认分辨率为 1280 × 720,你也可以根据你的业务需求进行调整。
  • 受系统限制,采集屏幕仅适用于 Android API 级别为 21 及以上,即 Android 5 及以上,否则在调用 startScreenCapture 时,SDK 会报告错误码 ERR_SCREEN_CAPTURE_PERMISSION_DENIED(16) 和 ERR_SCREEN_CAPTURE_SYSTEM_NOT_SUPPORTED(2)。
  • 受系统限制,采集系统音频仅适用于 Android API 级别为 29 及以上,即 Android 10 及以上,否则在调用 startScreenCapture 时,SDK 会报告错误码 ERR_SCREEN_CAPTURE_SYSTEM_AUDIO_NOT_SUPPORTED(3)。
  • 因 Android 性能限制,屏幕共享不支持 Android TV。
  • 因 Android 系统限制,使用华为手机进行屏幕共享时,为避免崩溃,请不要在共享过程中调节屏幕共享流的视频编码分辨率。
  • 因 Android 系统限制,部分小米手机不支持屏幕共享时采集系统音频。
  • 为提高屏幕共享时采集系统音频的成功率,声网推荐你在加入频道前通过 setAudioScenario 方法设置音频场景为 AUDIO_SCENARIO_GAME_STREAMING。

前提条件

  • 在 Android 平台上,请确保用户已授予 app 屏幕采集权限。
  • 在实现屏幕共享前,请确保已在你的项目中实现基本的实时音视频功能。详见实现视频通话或实现视频直播。

实现屏幕共享

  1. 拷贝 SDK 中的 AgoraScreenShareExtension.aar 文件到 /app/libs/ 目录下
  2. 在 /app/build.gradle 文件的 dependencies 节点中添加如下行,以支持导入 aar 格式的文件。
implementation fileTree(dir: "libs", include: ["*.jar","*.aar"])
添加前台服务权限(可选)

如果你的 Android 版本为 Android 9 及以上,需要在 /app/Manifests/AndroidManifest.xml 文件中添加如下前台服务权限,以避免应用退后台后被系统杀死。

android.permission.FOREGROUND_SERVICE

注意:屏幕共享是基于声网SDK,详细说明请查看声网文档 https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/screensharing_android_ng?platform=Android

详细使用:请参照demo效果、也可以参考声网api