当前位置: 首页 > news >正文

LineageOS 21 x86_64 TV HDMI 无声音修复记录

一、问题说明

设备环境:

LineageOS 21 Android 14 x86_64 TV

系统能够正常通过 HDMI 输出画面,但 YouTube、系统提示音和本地播放器都没有声音。

参考项目:

AndroidTV x86 HDMI Audio Fix https://github.com/RealMartinKevin/androidtv-x86-hdmi-audio-fix

该项目可以帮助检测实际可用的 HDMI ALSA 设备,但它原本通过修改/system/etc/init.sh实现永久修复。LineageOS 21 的系统分区默认受保护,原脚本可能出现Read-only file system

最终处理思路:

  1. 检查 HDMI 声卡和 PCM 设备;
  2. 通过 ELD 确认电视已经被系统识别;
  3. 使用alsa_aplay验证底层 HDMI 音频正常;
  4. 检查 Android Audio Policy 状态;
  5. 修改hdmi_audio_policy_configuration.xml
  6. HDMI_2设置为固定连接设备和默认输出。

二、准备工作

需要准备:

  • 已安装 LineageOS 21 x86_64 TV 的设备;
  • Windows 电脑和 ADB 工具;
  • 已开启 USB 调试;
  • 一个标准 PCM WAV 测试音频;
  • 系统支持adb root

确认连接:

adb devices adb root adb wait-for-device adb shell id

正常应看到:

uid=0(root) gid=0(root)

这表示 ADB Shell 已经是 root,不需要再执行su


三、检查 ALSA 工具

adb shell which alsa_aplay adb shell which alsa_amixer

正常输出:

/system/bin/alsa_aplay /system/bin/alsa_amixer

四、推送测试音频

建议使用双声道、16 bit、48000 Hz 的 PCM WAV 文件。

adb push sample.wav /data/local/tmp/sample.wav adb shell ls -l /data/local/tmp/sample.wav

五、查看声卡

adb shell cat /proc/asound/cards

我的设备输出:

0 [PCH ]: HDA-Intel - HDA Intel PCH HDA Intel PCH at 0xdf120000 irq 130

这里只显示一张HDA Intel PCH,并不代表没有 HDMI 音频。Intel 平台上的 HDMI 音频通常作为同一张 HDA 声卡下面的 PCM 设备存在。


六、查看 HDMI PCM 设备

adb shell cat /proc/asound/pcm

我的设备中可以看到:

00-03: HDMI 0 : HDMI 0 : playback 1 00-07: HDMI 1 : HDMI 1 : playback 1 00-08: HDMI 2 : HDMI 2 : playback 1

对应 ALSA 设备:

plughw:0,3 plughw:0,7 plughw:0,8

第一个数字是声卡号,第二个数字是 PCM 设备号。


七、查看 ELD,确认电视已经连接

ELD 是 HDMI 显示设备向系统上报的音频能力信息。

先列出 ELD 文件:

adb shell ls -l /proc/asound/card0/eld*

一次性读取全部 ELD:

adb shell "for f in /proc/asound/card0/eld#2.*; do echo ==== $f; cat $f; done"

找到包含以下内容的项目:

monitor_present 1 eld_valid 1 monitor_name Mi TV connection_type HDMI

我的设备对应/proc/asound/card0/eld#2.0,关键内容如下:

monitor_present 1 eld_valid 1 monitor_name Mi TV connection_type HDMI speakers [0x1] FL/FR sad0_coding_type [0x1] LPCM sad0_channels 2 sad0_rates [0xe0] 32000 44100 48000 sad0_bits [0xe] 16 20 24

这说明 HDMI 线、电视握手、Intel HDMI 音频驱动和电视的 LPCM 支持都正常。


八、检查 DRM HDMI 接口

adb shell ls -1 /sys/class/drm

我的设备输出:

card1 card1-DP-1 card1-HDMI-A-1 renderD128 version

查看连接状态:

adb shell cat /sys/class/drm/card1-HDMI-A-1/status

正常应返回:

connected

不知道具体接口名称时,可以执行:

adb shell "for f in /sys/class/drm/*/status; do echo ==== $f; cat $f; done"

九、打开 IEC958

adb shell "for ch in 0 1 2 3; do alsa_amixer -c0 set IEC958,$ch on; done"

部分通道提示不存在可以忽略。


十、手动测试 HDMI 设备

依次测试:

adb shell alsa_aplay -Dplughw:0,3 /data/local/tmp/sample.wav adb shell alsa_aplay -Dplughw:0,7 /data/local/tmp/sample.wav adb shell alsa_aplay -Dplughw:0,8 /data/local/tmp/sample.wav

我的设备执行下面这条就能正常出声:

adb shell alsa_aplay -Dplughw:0,3 /data/local/tmp/sample.wav

最终确认:

声卡号:0 设备号:3 ALSA 设备:plughw:0,3

如果alsa_aplay能响,说明 HDMI 硬件、驱动和 ALSA 层都正常,问题位于 Android Audio Policy。

出现权限错误时先执行:

adb root

十一、检查 Android Audio Policy

adb shell dumpsys media.audio_policy > audio_before.txt findstr /n /i "Available output devices Outputs HDMI_2 Selected Device" audio_before.txt

修改前,系统虽然能看到:

HDMI_2 AUDIO_DEVICE_OUT_HDMI hdmi_stereo hdmi_multi

HDMI_2只出现在Declared devicesSupported devices中。

真正可用的输出仍然只有:

Available output devices (2): Speaker Telephony Tx

媒体流始终选择:

Selected Device: AUDIO_DEVICE_OUT_SPEAKER

这说明 HDMI 配置模块已经加载,但HDMI_2没有被标记为可用输出。


十二、将根目录重新挂载为可写

先查看根目录挂载状态:

adb shell mount | findstr " on / "

我的系统最初是:

/dev/loop0 on / type ext4 (ro,seclabel,relatime)

重新挂载为可写:

adb root adb shell mount -o remount,rw /

再次检查,成功后会显示:

/dev/loop0 on / type ext4 (rw,seclabel,relatime)

可以测试写入:

adb shell touch /system/test_rw adb shell ls -l /system/test_rw adb shell rm /system/test_rw

不要使用adb remount,部分 Android-x86 系统会提示 overlayfs 不受支持。也不要执行mount -o remount,rw /system,因为/system不是独立挂载点,真正的挂载点是/


十三、找到 HDMI 配置文件

adb shell "grep -R -l 'HDMI_2' /vendor/etc /system/etc 2>/dev/null"

我的设备返回:

/vendor/etc/hdmi_audio_policy_configuration.xml

十四、拉取配置文件

adb pull /vendor/etc/hdmi_audio_policy_configuration.xml . copy hdmi_audio_policy_configuration.xml hdmi_audio_policy_configuration.xml.original

建议使用 Notepad++ 或 Visual Studio Code 编辑,保持 UTF-8 和 Unix 换行格式。


十五、修改 HDMI Audio Policy

找到:

<modulename="hdmi"halVersion="2.0">

<mixPorts>前面加入:

<attachedDevices><item>HDMI_2</item></attachedDevices><defaultOutputDevice>HDMI_2</defaultOutputDevice>

修改后的结构:

<modulename="hdmi"halVersion="2.0"><attachedDevices><item>HDMI_2</item></attachedDevices><defaultOutputDevice>HDMI_2</defaultOutputDevice><mixPorts>...</mixPorts><devicePorts>...</devicePorts><routes>...</routes></module>

attachedDevices会让HDMI_2作为固定连接设备进入可用设备列表;defaultOutputDevice会将 HDMI 设置为该模块的默认输出。

不要删除原有的mixPortsdevicePortsroutes


十六、备份并推回设备

adb push hdmi_audio_policy_configuration.xml /data/local/tmp/ adb shell cp -a /vendor/etc/hdmi_audio_policy_configuration.xml /vendor/etc/hdmi_audio_policy_configuration.xml.bak adb shell cp /data/local/tmp/hdmi_audio_policy_configuration.xml /vendor/etc/hdmi_audio_policy_configuration.xml adb shell chmod 644 /vendor/etc/hdmi_audio_policy_configuration.xml adb shell chown 0:0 /vendor/etc/hdmi_audio_policy_configuration.xml adb shell sync adb reboot

十七、重启后验证

adb root adb wait-for-device adb shell dumpsys media.audio_policy > audio_after.txt findstr /n /i "Available output devices Outputs HDMI_2 Selected Device" audio_after.txt

修复成功后应看到:

Available output devices (3): Speaker HDMI_2 Telephony Tx

活动输出中应出现:

IOProfile name:hdmi_stereo Devices: {AUDIO_DEVICE_OUT_HDMI, @:}

媒体流会选择:

Selected Device: {AUDIO_DEVICE_OUT_HDMI, @:}

此时 YouTube、系统提示音和播放器都可以通过电视正常出声。


十八、修复前后对比

修改前

ALSA plughw:0,3 可以出声 Android 系统没有 HDMI 声音 Available output devices (2) HDMI_2 只存在于 Declared devices Selected Device 为 Speaker

修改后

Available output devices (3) HDMI_2 进入可用设备列表 hdmi_stereo 成为活动输出 Selected Device 为 AUDIO_DEVICE_OUT_HDMI YouTube 和系统声音正常

十九、恢复原配置

adb root adb shell mount -o remount,rw / adb shell cp /vendor/etc/hdmi_audio_policy_configuration.xml.bak /vendor/etc/hdmi_audio_policy_configuration.xml adb shell chmod 644 /vendor/etc/hdmi_audio_policy_configuration.xml adb shell chown 0:0 /vendor/etc/hdmi_audio_policy_configuration.xml adb shell sync adb reboot

二十、注意事项

  1. 不同设备的声卡号和设备号可能不同,必须先执行:

    adb shell cat /proc/asound/pcm
  2. 不同设备的 HDMI 配置名称可能不是HDMI_2,应先搜索配置文件。

  3. alsa_aplay能响,才说明底层 HDMI 音频链路正常。

  4. HDMI_2出现在Declared devices,不代表已经可以使用。

  5. 必须在Available output devices中看到 HDMI,系统应用才可能路由到 HDMI。

  6. 修改 XML 前一定要备份。

  7. Windows CMD 中没有grep,应使用findstr,或者把管道放进adb shell "..."中执行。

  8. 重启后可能需要重新执行adb root

  9. 如果仍然无声,可以先把电视数字音频输出设置为 PCM。

  10. 本方法适用于“ALSA 直出有声,但 Android Audio Policy 没有启用 HDMI”的情况。对于内核完全未识别 HDMI 声卡的设备无效。

http://www.jsqmd.com/news/1293561/

相关文章:

  • SpringBoot+Vue.js构建精品电商系统实战
  • LAN Share:无需云端,局域网内文件传输效率提升300%的秘密
  • 鸣潮自动化终极指南:零门槛解放双手的智能助手完整教程
  • 自行转让和找代办怎么选,有没有机构帮我判断? - 2026最新企业资讯
  • 沧州2026年关于单招培训机构哪家好的走访小事 - 起跑123
  • Unity Vuforia AR开发实战:图像识别触发视频播放全流程指南
  • 播电商一拖二扫码枪如何选型?从传输架构、去重逻辑、解码性能做技术拆解
  • 3U 配电盘机柜安装位置选型与布局建议 - 城刊速递
  • D3D8to9完整指南:让经典游戏在现代Windows系统上完美运行的终极方案
  • 极空间怎么搭建自己的笔记系统?Logseq部署与远程访问完整教程
  • 区域创新效率SBM测度:非期望产出约束下的效率评价
  • Anthropic Harness架构解析:托管智能体与大模型编排实践
  • 武汉江夏高三全封闭复读学校|有专职心理老师,专治复读焦虑心态崩盘 - 湖北找学校
  • Windows激活革命:KMS_VL_ALL_AIO智能脚本的极致体验
  • AI编程指南2026-8月补充版:如何让代码一把过后还能最省token
  • OpenClaw AI开发框架:从部署到优化的全流程指南
  • 安庆养老房翻新装修公司甄选全攻略:适老安全、防潮省心、长效靠谱 - 安庆大维装饰
  • OSI七层网络模型详解与实战应用
  • Blender VRM插件终极指南:5个简单步骤创建专业级虚拟角色
  • 2026郑州混凝土搅拌站移动式搅拌站滚筒移动站选购指南 - LYL仔仔
  • ASP.NETX轻量级Web框架核心技术与实践
  • FPGA数字电子钟设计:VHDL模块化实现与同步设计实践
  • K12 学区线上钓鱼财务欺诈与纸质档案泄露双重安全治理研究
  • ​2026年北京知识产权法律服务市场格局解析:企业服务商选择指南 - 博客万
  • i.MX6ULL开发板SD卡启动U-Boot全流程详解与实战指南
  • 2026黄冈下水道堵塞完整处置方案/马桶地漏反水返臭积水倒灌修缮实用指南 - 宅安选房屋修缮
  • React Fragment核心用法与应用场景详解
  • AI写批处理脚本到底靠不靠谱?实测12款大模型生成脚本的执行成功率、权限兼容性与错误率(含权威压测数据)
  • 马斯克派船回收 Starship S40:这不是捞残骸,而是星舰复用的第一次硬件复盘
  • 专业级Windows和Office智能激活方案:KMS_VL_ALL_AIO脚本全面解析