STM32MP1 没有硬件编解码,如何用 CPU 实现 H.264 编码支持 WebRTC?
关键词: STM32MP1、H.264、WebRTC、x264、CPU 编码、OpenSTLinux、Yocto
💡 背景:为什么要在 STM32MP1 上用 CPU 编 H.264?
STM32MP157/153 等 MP1 系列 SoC(Dual Cortex-A7 + Cortex-M4)性能不弱,但 没有专用的硬件视频编解码器(VPU)。
而 WebRTC 通信中,视频流通常要求编码为 H.264 或 VP8/VP9。这带来了一个现实问题:
❓ 没有硬编,STM32MP1 是否能靠 CPU 实时编码视频?
于是,我决定探索一下:
用纯 CPU 实现 H.264 编码(x264),让 STM32MP1 也能跑 WebRTC!
H264编码库使用x264
获取x264源码
git clone https://github.com/corecodec/x264
使用GCC编译源码 - 在PC上测试
cd x264
./configure --disable-asm
make
交叉编译x264 - 在板子上验证
cd x264
./configure --host=arm-none-linux --cross-prefix=arm-none-linux-gnueabihf-make
参考v4l2-examples
https://github.com/kmdouglass/v4l2-examples
参考example-5代码实现,完成demo编写,思路是:
- 打开/dev/video0节点
- 初始化设备
- 初始化x264
- 捕获视频 -> H264编码 ->保存成output.h264

在PC上验证


在STM32MP1上运行
- CPU 占用率约 150%(双核满载)
- 编码效率低,无法满足实时要求
- 统温度显著上升,持续高负载运行风险较高



最终结论
STM32MP1 由于缺乏硬件视频编解码单元,仅依靠 Cortex-A7 CPU 进行 H.264 软件编码时:
- CPU 占用高(>150%);
- 编码效率低;
- 无法满足实时 WebRTC 视频传输需求。
因此在实际项目中,应:
- 优先使用 带硬件编码的摄像头 或 外部 VPU 模块;
- 或考虑在 边缘节点仅进行采集与转发,将编码交由上位机/云端完成。
