一、H264/H265编码基础:视频编码发展史、H264与H265核心区别、编码标准在嵌入式领域的地位
1.1 视频编码发展史:从模拟到数字的演进
做嵌入式视频开发这么多年,我经常被问到:"为什么视频编码这么重要?"
其实道理很简单。一段未经压缩的1080p视频,每秒的数据量接近1.5Gbps。你想想看,这数据量别说嵌入式设备了,就是现在的台式机也扛不住。所以编码技术,说白了就是给视频"减肥"。
视频编码的发展,大致经历了这么几个阶段:
- H.120(1984年):最早的数字化视频编码标准,用于会议电视。现在看简直是古董,但它是开山鼻祖。
- H.261(1990年):第一个实用的视频编码标准。我在一个老项目中见过它的实现,代码量少得可怜,但效果嘛...嗯,只能说能用。
- MPEG-1(1993年):VCD就是用它。我记得当年用VCD看《泰坦尼克号》,画质虽然一般,但已经是革命性的了。
- H.262/MPEG-2(1995年):DVD和数字电视的标准。这个标准生命力极强,到现在有些广电系统还在用。
- H.263(1996年):专为低码率视频通话设计。我早期做手机视频通话项目时,就是跟它打交道。
- H.264/AVC(2003年):划时代的产物。后面我会重点讲它。
- H.265/HEVC(2013年):4K/8K时代的基石。也是我们今天的重点。
- H.266/VVC(2020年):最新的标准,压缩率又提升了30%-50%。但目前嵌入式领域用得还不多。
核心观点:每一代编码标准的升级,目标都是"用更少的带宽,传更好的画质"。这个目标从未改变。
1.2 H264与H265核心区别:到底强在哪?
很多刚入行的朋友问我:"H265比H264到底好在哪?"
我一般会反问一句:"你见过H265编码的1080p视频吗?码率只有H264的一半,画质还更好。"
这就是最直观的区别。但背后的技术原理,咱们得掰开揉碎了讲。
1.2.1 编码效率的飞跃
H265的压缩率比H264提升了约50%。什么意思呢?
同样一段视频,H264需要4Mbps才能达到的画质,H265用2Mbps就能搞定。这在嵌入式领域意味着什么?意味着你的设备可以省一半的带宽,或者存两倍时长的视频。
我在一个安防监控项目中遇到过这种情况:客户要求4路1080p同时录制,原来的H264方案需要8Mbps上行带宽,客户那边只有10Mbps的宽带,几乎跑满。换成H265后,码率降到4Mbps,带宽绰绰有余。这就是实实在在的好处。
1.2.2 核心技术的差异
咱们从几个关键技术点来对比:
| 技术点 | H264 | H265 | 我的评价 |
|---|---|---|---|
| 宏块/编码树单元 | 固定16x16宏块 | 64x64到4x4可变CTU | H265更灵活,大块省码率,小块保细节 |
| 帧内预测 | 9种方向模式 | 33种方向模式 | H265预测更准,残差更小 |
| 帧间预测 | 1/4像素精度 | 1/8像素精度 + 更多参考帧 | H265运动估计更精细 |
| 变换 | 4x4/8x8 DCT | 4x4到32x32 DCT + DST | H265大块变换更高效 |
| 环路滤波 | 去块滤波 | 去块滤波 + SAO | SAO能减少振铃效应 |
| 熵编码 | CAVLC/CABAC | CABAC(改进版) | H265的CABAC吞吐量更高 |
个人经验:在嵌入式平台上,H265的CTU(编码树单元)结构对内存访问模式影响很大。我建议你在做移植时,重点关注CTU大小对cache命中率的影响。64x64的CTU如果处理不当,很容易造成cache thrashing。
1.2.3 计算复杂度的代价
你可能会问:"H265这么好,为什么不全用H265?"
原因很简单——算力。H265的编码复杂度大约是H264的2-3倍。在嵌入式设备上,这意味着更高的功耗、更高的芯片成本。
我曾经在一个海思3519A平台上做H265编码优化,同样的分辨率,H265编码器的CPU占用率比H264高了将近40%。后来通过SIMD优化和算法裁剪,才把差距缩小到20%以内。
避坑指南:千万不要在低端MCU上跑H265编码。我曾经试过在Cortex-M4上跑H265的软件编码,结果帧率只有0.5fps,完全不可用。H265至少需要Cortex-A系列处理器,最好带NEON指令集。
1.3 编码标准在嵌入式领域的地位
说到嵌入式领域的编码标准,我得先泼一盆冷水:不是所有嵌入式设备都需要H265。
咱们分场景来看:
- 安防监控:H265是主流。海康、大华的IPC基本都支持H265。因为监控需要长时间录制,码率省一半意味着存储成本省一半。
- 行车记录仪:H264还是主力。因为行车记录仪对实时性要求高,H265的编码延迟是个问题。我做过一个项目,H265编码延迟比H264多了30ms,这在高速行驶时会影响关键帧的捕捉。
- 无人机图传:H265越来越流行。带宽有限,画质要求高,H265正好合适。大疆的很多机型已经全面转向H265。
- 视频通话:H264仍然是主流。因为兼容性,你没法要求所有手机都支持H265硬解码。
- IoT设备:H264甚至MJPEG就够了。很多IoT设备分辨率只有VGA甚至更低,用H265纯属浪费算力。
我的建议:在做嵌入式视频产品选型时,不要盲目追求最新的编码标准。先问自己三个问题:
- 目标码率是多少?
- 目标分辨率是多少?
- 目标平台的算力够不够?
这三个问题想清楚了,选H264还是H265,答案自然就有了。
1.4 嵌入式编码的硬件加速
说到嵌入式编码,不得不提硬件加速。纯软件编码在嵌入式设备上基本行不通,除非你只做低分辨率。
常见的硬件编码方案有:
- 海思平台:Hi3516/Hi3519系列,内置H264/H265硬件编码器,性能强悍。我最早接触H265就是在海思平台上,当时被它的编码质量震惊了。
- 安霸平台:主打低功耗,适合运动相机。GoPro用的就是安霸方案。
- 瑞芯微平台:RK3399/RK3588,内置MPP硬件编码器,支持H264/H265。性价比很高。
- 全志平台:V系列,主打低成本。适合入门级产品。
- NVIDIA Jetson:带GPU加速,适合AI+视频的场景。但功耗偏高。
经验之谈:用硬件编码器时,一定要仔细看datasheet。不同芯片的硬件编码器支持的参数范围不一样。比如有些芯片的H265编码器不支持B帧,有些芯片的码率控制精度不够。我踩过这个坑,后来学乖了,每次选型前先跑一遍编码器的极限测试。
1.5 未来趋势:嵌入式编码往哪走?
最后聊聊趋势。我个人判断,未来3-5年嵌入式视频编码会有几个方向:
- H266/VVC开始渗透:虽然现在H266的硬件编码器还很少,但海思、安霸已经在研发了。预计2025年左右会有量产芯片。
- AI辅助编码:用神经网络来做编码参数决策,可以进一步提升压缩率。我在一个预研项目中试过,在同等码率下PSNR提升了0.5dB左右。
- 编码+AI一体化:比如在编码过程中直接提取特征信息,用于后续的目标检测、人脸识别。这样可以省掉解码的步骤,降低延迟。
- 低功耗编码:随着IoT设备的普及,如何用极低的功耗完成编码,会成为一个热点。比如用事件相机做编码,只在画面变化时传输数据。
嗯,这一章的内容就到这里。下一章我们会深入H264的编码原理,从帧内预测开始讲起。到时候我会结合具体的代码实现,带大家一步步理解编码器的内部机制。