1. 方案选型:为什么是QCW5007加5004的双芯片组合
1.1 一发一收,为什么不用单芯片搞定
我第一次拿到这套方案时,第一反应也是“两颗芯片是不是有点浪费”。说结论:无线HDMI投屏要做到60ms这个级别,一颗芯片同时干活很难。QCW5007是发射端,负责把HDMI信号采集进来,编码成适合无线传输的码流;QCW5004是接收端,负责把无线信号接住、解码、重新恢复成HDMI输出。两颗芯片通过私有射频协议配对工作,中间不依赖手机App,也不依赖路由器,是典型的点对点无线投屏链路。
单芯片方案不是没有,很多廉价无线投屏器用的是集成度更高的SoC,把编码、射频、解码全部塞进一颗芯片里。好处是BOM成本低,坏处是天线布局、散热、固件耦合、延迟优化都会互相牵制。QCW5007+5004这种分离设计,发射端和接收端可以独立布局,比如发射端放在电脑旁边,接收端挂在显示器背面锁孔上,各自走独立的电源和天线,物理安装自由度高很多。从系统稳定性角度看,两颗芯片独立成板,出现问题时也容易定位到底是编码端还是解码端出问题。
1.2 编码器选型背后的取舍
延迟60ms听起来很简单,实际上链路里最花钱的就是编码。HDMI进来的原始视频如果是1080p60,RGB 4:4:4 8bit,像素时钟是148.5MHz,数据速率大约4.86Gbps。这种裸数据量直接走无线是不现实的,频段再宽也扛不住稳定传输,所以必须压缩。QCW5007内部视频编码器走的是低延迟帧内编码路线,说白了就是把每一帧画面当成独立图像去压缩,而不是像H.264那样依赖大量前向预测帧。
这种编码方式有两个直接后果。第一,延迟低,因为解码端不需要等后面的帧才能还原当前画面。第二,带宽占用高,但换来的是抗误码能力强。做无线投屏最怕的就是画面“一卡卡半秒”,因为参考帧坏了,后面的帧全都要跟着错。帧内编码把这种风险切成了一帧一帧的独立单元,丢了一帧最多闪一下,不会引发连锁崩溃。实际测试中,QCW5007在1080p60下的编码延迟大约在15到20毫秒之间,这个数字接近我这边能稳定复现的量级。
还有一种选择是用通用视频编码芯片,比如H.264硬编,指标上也能做到低延迟,但问题在于需要额外配置编码参数,比如关闭B帧、限制参考帧数量、开启低延迟切片,这些参数如果调不到位,延迟轻松飙到100ms朝上。专用方案的好处就是这些参数出厂前已经针对无线场景调过了,省去大量调参的时间。
1.3 四路HDMI输入与切换逻辑
QCW5007支持4路HDMI输入、1路HDMI输出到内部的无线编码模块,这个“4进1出”的切换是很多人选它的原因。它解决的场景很明确:会议室里一台投屏器,两台电脑轮流投,再加一个视频会议终端,不用来回拔线。四路输入分别对应四个物理HDMI接口,每一路都有自己的HPD检测和EDID管理。
切换逻辑有自动和手动两种。自动模式下,芯片检测哪一路有“源设备插入”事件,就切换到哪一路;手动模式则通过I2C寄存器或GPIO强制选路。实际工程里有个坑:有些笔记本的HDMI输出在开机时会给一个短暂信号,但EDID还没读完,此时自动切换会导致投屏器误选到一个“空信号”输入。我的做法是手动模式居多,配合MCU去读取四路的5V检测引脚和HPD信令,稳定后再切换。这套逻辑放到MCU里很简单,但直接依赖芯片默认自动切换,大概率会在多设备环境下翻车。
2. 60ms链路怎么拆:每一段延迟花在哪
2.1 从源设备到发射端:HDMI输入的采集延迟
要拆60ms,先把链路分成三个大段:发射端采集与编码、无线传输、接收端解码与显示。每一段都不能只看理论值,必须实测。
第一段是HDMI信号进入QCW5007之后的采集延迟。HDMI信号本身是TMDS差分对,芯片要做的是恢复时钟、解析数据、完成色彩格式转换。这里有个概念要明确:HDMI输入不是“进来看见什么传什么”,它要先把串行数据解成并行RGB数据,再放进行场同步的框架里。这一步通常需要缓存几行像素来对齐时序,所以会带来约1到3ms的固定延迟。
有些源设备本身也会引入延迟,比如笔记本电脑的显卡在克隆模式和扩展模式下的输出延迟不同。扩展模式下显卡要做画面合成,延迟会比克隆模式高一点。所以测试整链路时,不要把电脑端鼠标移动的视觉延迟全部算在投屏系统头上。我实测过同一台笔记本,克隆模式到显示器上的光标延迟比扩展模式低大约5到8ms,这部分不是投屏器能优化的。
2.2 编码与打包:60ms里最重的一块
QCW5007完成采集后,视频进入编码器。编码的延迟并不是固定的,它跟分辨率、帧率、码率控制方式都有关。1080p60下,如果按帧内编码来处理,至少需要缓存一整帧才能开始编码,也就是16.67ms。加上编码计算本身的流水线延迟,编码段通常占20ms上下。
这里有人会问:为什么不能采一行编一行,减少缓存?因为压缩算法必须利用整帧的空间相关性和码率分配策略。比如画面暗部纹理少,可以分配少一点码率;亮部细节多,要多给一点码率。如果只拿到半帧就编码,码率控制会失去全局视野,画质波动很大。所以整帧缓存是必要的妥协。
编码之后还有打包、加校验、封装成私有协议,这部分通常1到2ms。整个发射端从HDMI入口到射频口输出,实测在22到25ms左右。
2.3 无线传输与纠错重传:延迟波动的根源
无线传输这一段,很多人理解成“信号飞过去只要零点几毫秒”,但实际上空口传输开销不小。以1080p60、帧内编码、码率设定在40到60Mbps来算,一帧画面大约0.8Mbps到1Mbps。Wi-Fi或私有射频系统还要分片,加前导码、加MAC头、加校验字段。分片发送的时间是毫秒级的,再加上信道竞争和确认重传机制,实际空口延迟一般在15到25ms之间。
重传机制是个双刃剑。理想无线环境下,重传很少发生,延迟稳定;一旦信道受到干扰,丢包率上升,重传次数增加,延迟就会从20ms跳到35ms甚至更高。这也是为什么无线投屏器在同一空间里遇到蓝牙音箱、微波炉、其他Wi-Fi信号时,画面会突然“顿一下”。QCW5007+5004在固件里有一个“延迟优先”和“可靠优先”的模式选择。延迟优先模式下,丢包直接跳过,不重传,画面会偶尔出小方块;可靠优先模式下,丢包重传,画质稳定但延迟会波动。我自己的策略是固定用延迟优先,因为花屏比延迟飘更容易被用户接受。
2.4 接收端解码显示:最后的缓冲与重建
QCW5004收到码流后,先要做解包、去校验、排序,然后进入解码器。解码过程同样需要整帧缓冲,因为帧内编码的每一帧都是完整的,必须集齐一整帧才能解。解码器输出是YUV数据,要再接一个显示控制器把格式转回HDMI的RGB或YUV 4:4:4,重新生成行场同步信号。
这一段延迟大约5到10ms。接收端还有个隐藏延迟来源:显示器的自身处理。显示器收到HDMI信号后,内部还要做画质增强、过扫调整、响应时间优化,这部分完全不归投屏器管,但用户感知上算的是“投屏延迟”。我用低延迟游戏显示器测过,端到端大约60到65ms;用普通办公显示器测,可能直接跑到70到80ms。所以对外讲60ms的时候,最好说明“这是发射端到接收端HDMI输出的延迟,不包含显示器自身”。
3. 关键参数和工程配置要点
3.1 像素时钟和带宽:先把账算清楚再做配置
确定分辨率前,先把带宽算明白。1080p60的典型像素时钟是148.5MHz,RGB 4:4:4 8bit下,每个像素需要三个8bit通道数据,所以数据速率是148.5乘以24,约3.56Gbps;如果算上TMDS编码的8b/10b开销,实际链路速率要到4.45Gbps左右。注意这里还没算音频和其他数据岛。这套数据走HDMI线缆没问题,但走无线就必须压缩。
QCW5007内部会把输入视频转换成YUV 4:2:0再编码,因为人眼对色度细节不敏感,这样数据量直接减半。这也是为什么无线投屏显示文字时边缘偶尔有一点彩色杂边,其实是色度抽样造成的。需要精细呈现文字的场景,建议在源端把分辨率降到1440p或1080p,避免4K强行压缩导致锐度下降。
支持的分辨率表大致是这样的:
| 分辨率 | 帧率 | 像素时钟 | 推荐码率 |
|---|---|---|---|
| 1920x1080 | 60 | 148.5MHz | 35-50Mbps |
| 1920x1080 | 30 | 74.25MHz | 20-30Mbps |
| 1280x720 | 60 | 74.25MHz | 20-30Mbps |
| 3840x2160 | 30 | 297MHz | 75-100Mbps |
注意4K30和1080p60在屏幕上看起来的运行流畅度接近,但4K30的像素时钟翻倍,编码器负载也翻倍,延迟会明显变大。如果应用场景是演示文稿、视频会议,1080p60通常比4K30更合适。
3.2 EDID和HDCP:源头不对,后面全白搭
EDID是源设备读取显示器能力的关键。发射端四路HDMI输入每一路都有独立的EDID,可以向电脑声明“我支持什么分辨率”。如果EDID配置成最高支持1080p,电脑就只会输出1080p;如果配置成4K,电脑可能输出4K,但后面的无线链路根本吞不下,延迟和画质一起崩。
工程中建议把EDID限制在目标分辨率以内,比如只声明1080p60,这样电脑自动匹配到合适格式,避免超带宽。如果需要支持4K,那么要在固件里确认编码模块能撑住4K30的像素吞吐,同时把码率拉高,延迟要有心理准备。
HDCP是另一个坑。QCW5007支持HDCP 1.4,但无线链路传输受保护内容时,收发两端需要完成密钥协商。如果源设备(比如蓝光播放器)检测到接收端不支持HDCP或协商失败,会直接黑屏。调试时遇到“有信号但没画面”,先去查HDCP状态寄存器,很多所谓“花屏”其实是HDCP加密后无法解密的表现。办公场景建议直接关闭HDCP,会议场景基本不需要保护内容。
3.3 寄存器配置和初始化顺序
QCW5007和QCW5004之间有自己的配对机制。初次上电,发射端和接收端需要做无线对码。我的初始化顺序是:先给接收端上电,等待它就绪;再给发射端上电,让它扫描接收端;确认链路锁定后,再把HDMI输入使能打开。这个顺序看起来很傻,但能避免很多奇怪的“找不到设备”问题。
寄存器配置上,需要重点关注三个寄存器组:输入检测状态、编码参数控制、无线信道和功率。输入检测状态寄存器可以读到四路输入的5V、HPD、TMDS时钟锁定等信息。编码参数控制寄存器里可以设置码率上下限、是否开启低延迟模式、帧率是否跟随源端。无线信道和功率寄存器则决定射频工作频段和发射功率,多台设备同时使用时,要手动错开信道,避免互相干扰。
配置过程中有一个容易忽略的点:HDMI热插拔。当一个源设备接入时,发射端需要先把HPD拉低,等EDID读取稳定后再拉高。如果HPD时序不对,笔记本可能识别到的是一个不完整的EDID,输出分辨率就会异常。这个问题在四路输入的方案里尤其突出,因为每一路都要单独管理HPD,一旦哪一路处理慢了,投屏器就会在“有输入但显示黑屏”的状态里卡住。
4. 调试、避坑与优化心得
4.1 延时测试方法:不靠手感,靠像素和时间戳
很多人在办公室用手感测延迟:“鼠标动了,感觉屏幕慢半拍。”这种测试只能用来初步判断是否有大问题,不能指导调优。我常用的办法是高速摄像对比法:把源端屏幕和接收端显示器放在同一个画面里,用240帧以上的手机慢动作拍摄一个毫秒级计时器跳动,逐帧数时间差。更准一点的做法是HDMI协议分析仪,直接抓发射端输入和接收端输出的时间戳差,不过这套设备成本不低,一般小团队不一定有。
没有分析仪时,可以做一个简单的嵌入式测试脚本:用MCU控制源端屏幕每隔一秒改变一次颜色标记,同时在接收端接一个光敏传感器采集显示器亮度变化,两个MCU之间用有线GPIO同步时间。这个方法能把整链路延迟测到10ms以内的精度,比肉眼靠谱得多。
4.2 常见问题速查表:直接把排查路径走完
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 完全无画面 | HDCP协商失败 | 关闭HDCP,查状态寄存器 |
| 完全无画面 | EDID读取失败 | 查HPD时序和5V检测 |
| 完全无画面 | 无线未配对 | 检查收发端配对指示灯 |
| 画面花屏 | 无线丢包严重 | 切换信道,换延迟优先模式 |
| 画面不定时冻结 | 信号干扰 | 检查附近Wi-Fi信道占用 |
| 延迟从60ms漂到100ms以上 | 重传过多 | 降低码率或强制延迟优先 |
| 某一路输入切不到 | HPD检测异常 | 手动模式强制切换 |
| 文字边缘彩色杂边 | 色度抽样 | 源端换4:4:4或降低分辨率 |
花屏和冻结这两个问题最容易混。花屏通常是丢包导致,冻结通常是被强制等待参考帧或者接收缓冲耗尽。帧内编码方案里冻结概率比帧间编码低很多,如果还是出现冻结,优先怀疑射频驱动状态机崩溃,检查接收端是否长时间收不到完整帧头,必要时重启接收端。
4.3 天线布局和供电的实战经验
QCW5004放在显示器背面时,天线位置上有很多隐藏的坑。显示器金属外壳会屏蔽信号,天线贴在外壳上直接让信号缩水一半。在我的实测里,SMA外置天线离金属外壳至少3到5厘米,信号强度才有明显改善。如果用的是内置PCB天线,最好让天线区远离螺丝孔和金属支架,并朝向发射端一侧。
供电也值得单说。接收端不要用显示器的USB口供电,很多显示器USB口电流不稳,无线模块在峰值发射时会掉压,导致射频功率骤降。我踩过一次坑:接收端接在显示器USB口上,画面每隔几分钟闪一下,后来换独立5V 2A电源就好了。凡是无线设备,供电宁可多给,不要抠门。
延迟的判断也要分场景。60ms这个数字在演示文稿和视频播放场景下可接受,但如果是无线鼠标写字、互动白板、游戏操作,60ms的体感已经比较明显。QCW5007+5004优化的方向是固定延迟,让用户通过适应来抵消迟滞感,这比忽快忽慢的延迟体验好很多。
最后再分享一个经验:码率不要一味调高。码率高了,画质确实好,但射频链路的重传概率也高。我会先按表里的推荐码率设一个值,然后在实际环境里跑10分钟,看丢包统计。找一个“画质刚好够用、丢包率最低”的码率点,而不是找“看起来最清晰”的码率点。经过几次实测对比,码率在45Mbps左右的时候,画质和稳定性平衡最好。这个数值在不同环境会有差异,但思路可以参考。