2、ARC工作原理:HDMI ARC通道的物理层、音频数据包的封装与传输、EDID与音频格式协商
好,咱们接着聊ARC。上一章我们把ARC的“前世今生”捋了一遍,这一章咱们深入内部,看看它到底是怎么工作的。
ARC这条通道,说白了就是在HDMI这根线里,硬生生挤出来的一条“回传小路”。它不像主视频通道那么宽,但干的事儿一点也不简单。我个人习惯把ARC的工作流程拆成三个层面来看:物理层怎么连、数据包怎么传、以及最关键的——两边怎么“商量”好该传什么格式。
2.1 物理层:那条被“复用”的线
你想想看,HDMI线里本来就有好几对差分线,分别传视频、音频、时钟和控制信号。ARC占用了哪一对呢?
答案是:它复用了原本用于SPDIF或以太网的那对线(具体取决于HDMI版本)。在HDMI 1.4里,ARC用的是原本的SPDIF引脚(Pin 14),而在HDMI 2.0及以后,它用的是HEAC(HDMI Ethernet and Audio Return Channel)通道里的保留引脚。
嗯,这里要注意:ARC并不是一条独立的物理线路。它是在HDMI连接建立后,通过一个“握手”过程,把这对线的功能从“输出”切换成“双向”的。我在项目中遇到过好几次,客户抱怨ARC没声音,最后查出来是HDMI线质量太差,这对复用线的信号衰减太厉害,导致握手失败。
关键点:ARC的物理层依赖HDMI线的第14脚(ARC/SPDIF)和第17脚(GND)。线材质量直接影响ARC的稳定性。
所以,如果你遇到ARC断断续续,别急着怀疑电视或音响,先换根好点的HDMI线试试。我建议至少用支持“高速HDMI with Ethernet”的线材。
2.2 音频数据包的封装与传输
物理层搞定了,接下来就是数据怎么打包发出去。ARC传输音频的方式,其实借鉴了SPDIF的很多思路,但做了一些改进。
ARC传输的是IEC 60958标准的音频数据流。这个标准定义了音频数据的基本帧结构。每一帧包含一个子帧,子帧里又包含了音频样本数据、前导码、状态位和校验位。
但ARC和普通SPDIF有个关键区别:ARC的传输是包交换的,而不是流式的。什么意思呢?
普通SPDIF是连续不断的比特流,而ARC会把音频数据切成一个个小包,塞进HDMI的TMDS(Transition Minimized Differential Signaling)通道的消隐期里传输。这样做的好处是,它不需要独占一条通道,而是“见缝插针”,不影响主视频的传输。
我记得有一次调试一个回音壁的ARC功能,发现声音总是卡顿。用分析仪抓包一看,原来是电视端发送的音频包间隔不均匀,导致回音壁的缓冲区溢出。说白了,就是电视的打包逻辑有问题。
避坑指南:我曾经遇到过某些电视在播放Dolby Digital Plus时,ARC输出的音频包会夹杂一些“空包”。回音壁如果没做好容错处理,就会产生“噗噗”的爆音。解决办法是在固件里增加一个“空包丢弃”的逻辑。
ARC支持的音频格式,最高可以到5.1声道。常见的格式包括:
- PCM 2.0:最基本的双声道立体声
- Dolby Digital:5.1声道有损压缩,最常用
- DTS:5.1声道有损压缩,和Dolby Digital竞争
- Dolby Digital Plus:增强版,码率更高,但ARC只支持其核心部分
注意,ARC不支持无损格式,比如Dolby TrueHD或DTS-HD Master Audio。这些格式需要eARC才能传输。
2.3 EDID与音频格式协商
好,物理层通了,数据包也能发了。但电视怎么知道回音壁支持什么格式?回音壁又怎么知道电视要发什么格式?
这就轮到EDID出场了。EDID(Extended Display Identification Data)是一段存储在显示设备(或音频设备)里的数据,它告诉源设备:“我能支持什么分辨率、什么刷新率、什么音频格式。”
在ARC场景里,协商过程是这样的:
- 电视(作为源)通过HDMI线读取回音壁(作为接收端)的EDID。
- EDID里有一个叫“Short Audio Descriptor”(SAD)的字段,里面列出了回音壁支持的所有音频格式。
- 电视根据这个列表,选择一种它自己也能支持的、且优先级最高的格式来发送。
- 如果电视不支持回音壁列出的任何格式,那就退回到最基本的PCM 2.0。
这个过程,说白了就是两边在“讨价还价”。我见过最典型的坑是:回音壁的EDID里同时列出了Dolby Digital和DTS,但电视只支持Dolby Digital。结果电视选了Dolby Digital,一切正常。但如果回音壁的EDID里把DTS的优先级写高了,电视又支持DTS,那就会优先用DTS。这本身没问题,但有些老电视的DTS解码器有bug,会导致声音断断续续。
警告:EDID的音频格式列表是有顺序的。第一个列出的格式优先级最高。如果你希望电视优先使用PCM,就把PCM写在最前面。我曾经帮一个客户调试,他的回音壁总是自动切换到Dolby Digital,导致人声很小。最后发现是EDID里Dolby Digital排在了PCM前面。调整顺序后问题解决。
下面我用一张图来总结ARC的整个工作流程:
这张图把整个流程串起来了。从电视读取回音壁的EDID开始,到协商出具体的音频格式,最后通过ARC通道把音频数据包传回去。每一步都环环相扣。
最后,我再说一个实际项目中遇到的EDID问题。有一次,一个客户说他的电视通过ARC连接回音壁后,只有立体声,没有环绕声。我让他把回音壁的EDID导出来一看,发现SAD字段里只写了PCM 2.0,根本没列出Dolby Digital。这显然是回音壁固件的一个bug。升级固件后,EDID里正确列出了Dolby Digital,问题就解决了。
所以,如果你遇到ARC只能出立体声,先检查一下EDID。很多廉价回音壁的EDID写得不完整,导致电视“以为”它只支持PCM。
小技巧:你可以用HDMI分析仪(比如Quantum Data或Teledyne LeCroy的设备)抓取EDID数据,直接查看SAD字段。如果手头没有专业设备,有些电视的工程菜单里也能看到EDID摘要。
好了,ARC的工作原理就讲到这里。物理层、数据包封装、EDID协商,这三个环节搞清楚了,ARC的大部分问题你都能自己排查了。