#020 · MPP H.264 硬编码实验
实验目标
在 RV1126B 上使用 Rockchip MPP(Media Process Platform)将 NV12 格式图像编码为 H.264 码流,测试不同码率和帧率下的编码性能。
实验环境
| 项目 | 内容 |
|---|---|
| 开发板 | RV1126B |
| 内核版本 | 5.10.x |
| MPP 版本 | 1.5.x |
| 输入格式 | NV12 |
| 输出格式 | H.264 (AVC) |
| 分辨率 | 1920×1080 |
| 目标帧率 | 30 FPS |
实验原理
NV12 图像数据
↓
MPP 编码接口 (mpi_enc)
↓
H.264 码流 (NALU)实验步骤
Step 1:确认 MPP 设备节点
shellbash
ls -la /dev/mpp_service
ls -la /dev/rgaStep 2:生成测试用 NV12 数据
shellbash
# 使用 yuv4mpeg 生成一帧 1080P NV12 测试数据
# 或使用 V4L2 采集一帧Step 3:调用 mpi_enc 编码
mpp_enc.cc
#include "mpi_enc.h"
int main() {
// 1. 初始化 MPP 编码
MppEncCfg cfg;
mpp_enc_cfg_init(&cfg);
cfg.type = MPP_VIDEO_CodingAVC;
cfg.width = 1920;
cfg.height = 1080;
cfg.fps = 30;
cfg.bitrate = 4000; // kbps
// 2. 创建编码上下文
MppCtx ctx;
mpp_create(&ctx, NULL);
mpp_init(ctx, MPP_CTX_ENC, MPP_VIDEO_CodingAVC);
// 3. 输入一帧 NV12,输出 H.264 码流
// ...
return 0;
}Step 4:保存码流并播放验证
shellbash
# 使用 ffplay 播放编码后的 H.264 码流
ffplay output.h264实验结果
预期
- 编码输出 H.264 码流可正常播放
- 1080P 30FPS 编码 CPU 占用 < 10%
- 码率控制在目标值 ±10% 范围内
实际
- ⏳ 进行中,目前编码输出画面存在花屏现象
- 🔍 怀疑是 stride 对齐或颜色空间转换问题
遇到的问题
问题:编码输出画面花屏
- 现象:ffplay 播放 output.h264 画面有明显马赛克和绿边
- 初步判断:
- NV12 数据 stride 未对齐
- 颜色空间转换错误
- 编码参数配置错误
- 排查状态:进行中
性能数据(待更新)
| 指标 | 数据 |
|---|---|
| 编码帧率 | TBD |
| CPU 占用 | TBD |
| 实际码率 | TBD |
| 编码延迟 | TBD |
