Android

最近更新时间:2026-02-10 10:09:42

我的收藏
本文档主要介绍如何使用屏幕分享,目前一个 TRTC 音视频房间只能有一路屏幕分享。

操作指引

开启屏幕分享

步骤1:添加 Activity

说明:
仅 jar+so 集成方式需要,aar 集成方式可忽略。
在 AndroidManifest.xml 文件中粘贴如下代码(若项目代码中存在则不需要添加)。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />

<application>
<activity
android:name="com.tencent.rtmp.video.TXScreenCapture$TXScreenCaptureAssistantActivity"
android:theme="@android:style/Theme.Translucent" />
<service
android:name="com.tencent.rtmp.video.ScreenCaptureService"
android:exported="false"
android:foregroundServiceType="mediaProjection" />
</application>

步骤2:启动屏幕分享

要开启 Android 端的屏幕分享,只需调用 TRTCCloud#startScreenCapture() 接口即可。
通过设置 TRTCCloud#startScreenCapture() 中的首个参数 encParams ,您可以指定屏幕分享的编码质量。如果您指定 encParams 为 null,SDK 会自动使用之前设定的编码参数,我们推荐的参数设定如下:
参数项
参数名称
常规推荐值
文字教学场景
分辨率
videoResolution
1280 × 720
1920 × 1080
帧率
videoFps
10 FPS
8 FPS
最高码率
videoBitrate
1600 kbps
2000 kbps
分辨率自适应
enableAdjustRes
NO
NO
由于屏幕分享的内容一般不会剧烈变动,所以设置较高的 FPS 并不经济,推荐10 FPS即可。
如果您要分享的屏幕内容包含大量文字,可以适当提高分辨率和码率设置。
最高码率(videoBitrate)是指画面在剧烈变化时的最高输出码率,如果屏幕内容变化较少,实际编码码率会比较低。

步骤3:弹出悬浮窗防强杀(可选)

从 Android 7.0 系统开始,切入到后台运行的普通 App 进程,但凡有 CPU 活动,都很容易会被系统强杀。 所以当 App 在切入到后台默默进行屏幕分享时,通过弹出悬浮窗的方案,可以避免被系统强杀掉。 同时,在手机屏幕上显示悬浮窗也有利于告知用户当前正在做屏幕分享,避免用户泄露个人隐私。
要弹出悬浮窗,您只需要参考示例代码 FloatingView.java 中的实现即可:
public void showView(View view, int width, int height) {
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
int type = WindowManager.LayoutParams.TYPE_TOAST;
//TYPE_TOAST仅适用于4.4+系统,假如要支持更低版本使用TYPE_SYSTEM_ALERT(需要在manifest中声明权限)
//7.1(包含)及以上系统对TYPE_TOAST做了限制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
type = WindowManager.LayoutParams.TYPE_PHONE;
}
mLayoutParams = new WindowManager.LayoutParams(type);
mLayoutParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mLayoutParams.flags |= WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
mLayoutParams.width = width;
mLayoutParams.height = height;
mLayoutParams.format = PixelFormat.TRANSLUCENT;
mWindowManager.addView(view, mLayoutParams);
}

观看屏幕分享

观看 Mac / Windows 屏幕分享
当房间里有一个 Mac / Windows 用户启动了屏幕分享,会通过辅流进行分享。房间里的其他用户会通 TRTCCloudListener#onUserSubStreamAvailable 事件获得这个通知。
观看 Android / iOS 屏幕分享
若用户通过 Android / iOS 进行屏幕分享,会通过主流进行分享。房间里的其他用户会通过 TRTCCloudListener#onUserVideoAvailable 事件获得这个通知。
观看屏幕分享的用户可以通过 TRTCCloud#startRemoteView 接口来启动渲染远端用户主流画面。

常见问题

提示错误码-3343是什么问题?

如果使用屏幕分享过程中接收到-3343错误码,是因为网络连接问题导致的报错,需检查用户网络。

移除屏幕分享?

从 Android 14 版本开始,如果您不需要使用屏幕分享功能,则需要在您工程项目中的 AndroidManifest.xml 中移除屏幕分享前台服务的权限,操作如下:
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" tools:node="remove" />