Unity接入Agora SDK屏幕共享画质模糊优化及区域共享问题咨询
问题1:提升屏幕共享画质的遗漏配置调整
你当前配置的码率参数远低于屏幕共享的推荐值,是模糊的核心原因,可按以下顺序调整配置:
- 修正码率配置:屏幕共享场景下1080P@24帧的推荐码率为
3000~6000Kbps,最低码率建议设为1500Kbps以上,你当前的1130Kbps是普通摄像头通话的码率阈值,会导致文字、细线条等屏幕内容被过度压缩。修改示例:
minBitrate = 1500, bitrate = 4000, // 可根据你的共享分辨率上下调整,2K分辨率可设到6000以上
- 增加屏幕共享编码优化配置:给VideoEncoderConfiguration添加
contentHint字段,设置为CONTENT_HINT.CONTENT_HINT_DETAILS(如果是文档类共享可设为CONTENT_HINT_TEXT),SDK会针对屏幕内容的编码策略做优化,避免不必要的压缩模糊。 - 强制保留编码分辨率:部分移动设备会因为性能默认降低编码分辨率,可添加以下配置强制锁分辨率:
mRtcEngine.SetParameters("{\"che.video.keep_printer_height\":true}");
- 关闭无用视频前处理:屏幕共享不需要美颜、动态降噪等前处理,可调用以下接口关闭,避免细节损失:
mRtcEngine.SetBeautyEffectOptions(false, null);
- 校验设备端采集分辨率:打日志确认设备端运行时
EncodeWidth和EncodeHeight的实际值,部分移动系统的屏幕采集接口会默认返回降采样后的低分辨率帧,需要手动指定采集分辨率。
问题2:可拖拽调整的指定矩形区域共享实现方案
核心思路是放弃SDK默认的全屏采集,改用自定义视频采集+实时纹理裁剪实现,步骤如下:
- 实现交互选框:用UGUI做全屏半透明遮罩层,在遮罩上添加可拖拽、可拖拽边角缩放的矩形选框组件,用户调整完成后,将选框的UI坐标转换为实际屏幕像素坐标,记录下裁剪区域的
x, y, width, height,注意适配移动端安全区、刘海屏的偏移。 - 开启自定义视频采集:调用Agora接口开启外部视频源输入:
mRtcEngine.SetExternalVideoSource(true, false);
- 实时采集+裁剪纹理:不要用效率较低的
ScreenCapture.CaptureScreenshotAsTexture,采用RenderTexture采样的方式,每帧把当前屏幕画面Blit到固定的RenderTexture对象上,再根据之前记录的裁剪区域坐标,从全屏RenderTexture中裁剪出对应区域的子纹理。 - 推送裁剪后的帧到SDK:调用
PushVideoFrame接口把裁剪后的子纹理(或者转换后的YUV数据)喂给SDK进行编码推流即可。如果需要支持用户实时调整选区,只需要实时更新裁剪坐标即可,不需要重启推流。
内容的提问来源于stack exchange,提问作者chiru
相关产品推荐
相关产品推荐

