Android12 GSI自定义ROM下系统录屏应用报unsupported size错误排查求助
Android 12 GSI录屏unsupported size错误排查方向
- 编码器优先级配置排查
修改scrcpy默认编码器为c2.android.avc.encoder后问题解决,说明系统默认优先调用的AVC硬件编码器存在能力上报异常。执行dumpsys media.codec | grep 'video/avc'查看所有AVC编码器的排序,若厂商硬件编码器排在通用软件编码器c2.android.avc.encoder之前,基本可判定是硬编码器配置问题。
验证方案:root后修改/system/etc/media_codecs.xml,将c2.android.avc.encoder的节点移到其他AVC编码器之前,或临时注释掉有问题的厂商硬编码器节点,重启后测试录屏功能。 - 屏幕参数与编码器能力匹配排查
报错触发在getSupportedFrameRatesFor调用环节,说明编码器不认可对齐后的屏幕尺寸:- 执行
dumpsys window displays获取当前设备实际分辨率,确认是否存在分辨率虚标、动态切换分辨率未同步的问题 - 执行
dumpsys media.codec | grep -A30 'c2.android.avc.encoder'查看编码器的宽高对齐要求、最大支持宽高参数,对比屏幕分辨率是否满足对齐规则,部分厂商硬编码器要求宽高必须为128/256的整数倍,对齐计算后的尺寸仍然超出支持范围就会触发报错
- 执行
- 刷新率参数兼容排查
代码逻辑会传入当前屏幕刷新率查询编码器支持范围,若你的设备使用90/120Hz等高刷模式,或者编码器上报的帧率范围存在异常,也会触发参数校验失败。可临时将屏幕刷新率锁定为60Hz后重试录屏,排查是否为刷新率兼容问题。 - GSI媒体配置适配排查
GSI自带通用媒体配置未适配目标设备的硬件编码器能力,可提取目标设备官方原生ROM中的/system/etc/media_codecs.xml、/system/etc/media_codecs_performance.xml、/system/etc/media_profiles.xml三个配置文件,替换到GSI对应目录,修复硬编码器的能力上报错误。
临时替代方案:若无法修改系统配置,可通过LSPosed等Hook框架,拦截ScreenMediaRecorder类的编码器选择逻辑,强制指定使用c2.android.avc.encoder,无需修改SystemUI源码即可解决问题。
内容的提问来源于stack exchange,提问作者Jericho
相关产品推荐
相关产品推荐

