背景
最近由于项目需求,搞了一段时间的H264视频编解码,做的过程中还是踩了不少坑,而且在查询资料的过程中发现网上的很多博客里面有一些有误导性的内容,所以自己打算把这段时间的工作记录一下,免得以后再犯。
RGB转YUV420
我们的编码库采用的是libx264,解码用的FFmpeg,由于H264只支持yuv420的编码,所以需要把rgb的像素点转成yuv420。
代码
这块需要注意的是,我们项目中原始的像素点是bgra格式,转yuv420调用的libyuv库。具体的调用实现如下:
static void bgra_to_yuv420(uint8_t *pixels, int width, int height, int stride,
uint8_t *bufY, uint8_t *bufU, uint8_t *bufV)
{
//根据像素格式的不同可能需要调整Y U V分量的stride
ARGBToI420(pixels, stride, bufY, width, bufU, width >> 1, bufV, width >> 1, width, height);
}
调用libx264编码
编码主要是编码器参数的设置,同时需要注意libx264编码的width、height都得是偶数,一些硬件编码卡可能需要width是16的倍数,这块需要注意。我的编码配置:
x264_param.