在 RK3588 上彻底禁用 HDMI 音频输出

在 RK3588 上彻底禁用 HDMI 音频输出:从临时调试到 AOSP 源码固化

适用平台 :Rockchip RK3588 / OK3588
Android 版本 :Android 10+(Audio Policy v7.0)
关键词 :audio_policy_configuration.xml、HDMI 音频禁用、AOSP 编译、vendor 分区、RK3588


背景

在基于 Rockchip RK3588 的嵌入式设备(如数字标牌、工控一体机)中,一个常见需求是:

视频通过 HDMI 输出到显示器,但音频必须强制从板载喇叭播放,完全不走 HDMI。

然而,默认 Android 系统会将 HDMI 视为合法的音频输出设备。一旦插入 HDMI 线,媒体音、通知音等会自动"切换"到 HDMI,导致喇叭无声------即使用户根本没有接音响。

本文记录了从手动调试验证 到AOSP 源码固化的完整过程,并总结了在 Rockchip 平台上容易踩的坑。


第一步:定位问题根源

Android 的音频路由策略由 /vendor/etc/audio_policy_configuration.xml 控制(注意:不是 /system/etc/)。

通过 adb 查看设备上的配置:

bash 复制代码
adb shell cat /vendor/etc/audio_policy_configuration.xml

发现其中包含以下关键定义:

xml 复制代码
<!-- HDMI 输出设备声明 -->
<devicePort tagName="HDMI Out" type="AUDIO_DEVICE_OUT_AUX_DIGITAL" role="sink"/>

<!-- HDMI 专用输出通道 -->
<mixPort name="hdmi" role="source" flags="AUDIO_OUTPUT_FLAG_DIRECT">
    <profile format="AUDIO_FORMAT_PCM_16_BIT" ... />
    <profile format="AUDIO_FORMAT_IEC61937" ... />
</mixPort>

<!-- 路由规则:primary output 和 hdmi 都可输出到 HDMI Out -->
<route type="mix" sink="HDMI Out" sources="primary output,hdmi"/>

这三处配置共同导致系统认为 HDMI 是一个有效的音频输出路径。


第二步:手动修改验证(快速原型)

为快速验证方案,采用"拉-改-推"方式:

bash 复制代码
adb root
adb remount
adb pull /vendor/etc/audio_policy_configuration.xml

编辑文件,删除以下三部分:

  1. <mixPort name="hdmi" ...>
  2. <devicePort tagName="HDMI Out" ...>
  3. <route ... sink="HDMI Out" ...>

保存后推回设备并重启音频服务:

bash 复制代码
adb push audio_policy_configuration.xml /vendor/etc/
adb shell setprop ctl.restart audioserver

✅ 测试结果:

  • 插拔 HDMI 线,声音始终从 Speaker 出
  • 媒体、通知、铃声全部正常
  • 视频输出不受影响

结论:方案有效!


第三步:固化到 AOSP 源码

既然手动修改可行,下一步是将改动写入 AOSP 源码,确保每次编译都包含此配置。

1. 找到正确的源码路径

对于 OK3588,音频策略文件通常位于:

复制代码
device/rockchip/common/audio_policy_configuration.xml

将手动验证成功的 XML 内容替换至此。

2. 确保 copy rule 正确

在设备的 .mk 文件中(如 device/rockchip/rk3588/rk3588.mk),必须包含:

makefile 复制代码
PRODUCT_COPY_FILES += \
        $(LOCAL_PATH)/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml \

否则,AOSP 不会将该文件打包进 vendor.img。

3. 编译并生成镜像

bash 复制代码
source build/envsetup.sh
lunch your_ok3588_product-userdebug
make -j$(nproc) updateimg

注意:RK3588 推荐生成 update.img,而非仅刷 vendor.img。


第四步:刷机与验证(关键!)

❌ 常见错误:仅用 fastboot flash vendor

在 Rockchip 平台上,标准 fastboot 无法可靠更新 vendor 分区。即使命令返回成功,设备启动时仍可能加载原始分区。

✅ 正确做法 :

使用官方 upgrade_tool 刷写 update.img:

  1. 进入 Loader 模式(短接 Flash 引脚或 adb reboot loader)
  2. 加载 parameter.txt 和 out/target/product/rk3588/update.img
  3. 点击 "Run" 完成全量更新

验证是否生效

刷机后立即检查文件一致性:

bash 复制代码
# 设备端 MD5
adb shell md5sum /vendor/etc/audio_policy_configuration.xml

# 本地源码 MD5
md5sum device/rockchip/rk3588/audio/audio_policy_configuration.xml

两者必须一致。

再重启音频服务:

bash 复制代码
adb shell setprop ctl.restart audioserver

最后播放媒体测试声音输出设备。


经验总结

问题 解决方案
HDMI 自动抢走音频 删除 policy 中的 HDMI Out 声明、mixPort 和 route
AOSP 修改不生效 检查 PRODUCT_COPY_FILES 是否指向正确路径
刷机后配置未更新 使用 update.img + upgrade_tool,避免依赖 fastboot
音频服务未加载新策略 手动重启 audioserver
多个同名配置文件冲突 检查 vendor/rockchip/common/etc/ 是否存在覆盖文件

补充说明

  • 保留 HDMIIn :配置中的 <item>HDMIIn</item> 是音频输入(如 ARC 回传),不影响输出,无需删除。
  • 不影响视频:仅禁用音频输出,HDMI 视频显示完全正常。
  • 编码与换行符 :确保 XML 文件为 UTF-8 无 BOM ,换行符为 LF,避免解析失败。

结语

看似简单的"禁用 HDMI 音频",实则涉及 Android 音频架构、AOSP 构建系统、Rockchip 平台特性三大层面。只有打通从策略配置 → 源码集成 → 镜像生成 → 设备刷写的全链路,才能实现稳定可靠的交付。

希望本文能帮助正在调试 RK3588 音频的你少走弯路。如有疑问,欢迎留言交流!

相关推荐
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
嵌入式分享3 天前
RK3588/RK3576 为什么取消原生 LVDS?显示接口选型与外部转换方案
rk3588·lvds·mipi
2601_955662463 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛3 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
旺仔小馒头wang3 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
纳祥科技3 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805
单片机·音视频·智能音箱
youandyouyou3 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地
音视频
爱吃提升3 天前
文生视频核心
人工智能·音视频
2601_955662463 天前
抖音视频怎么做多语言配音?2026年AI配音工具与制作流程详解
人工智能·音视频·语音识别·视频
音视频牛哥3 天前
Android与HarmonyOS NEXT如何接入GB28181:从SIP到PS/RTP的完整链路
音视频·gb28181-2022对接·鸿蒙next gb28181·gb/t 28181-2022·gb/t 28181-2016·gb28181-2022平台