一、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纯属浪费算力。

我的建议:在做嵌入式视频产品选型时,不要盲目追求最新的编码标准。先问自己三个问题:

  1. 目标码率是多少?
  2. 目标分辨率是多少?
  3. 目标平台的算力够不够?

这三个问题想清楚了,选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的编码原理,从帧内预测开始讲起。到时候我会结合具体的代码实现,带大家一步步理解编码器的内部机制。