进行H.264编码,C++中比较好用库为libx264,此库封装了H.264编码功能,编码的功能分为几步
1、初始化H.264编码器,指定输入源YUV的格式,m_x264_param中主要配置流尺寸,码率,帧率,等参数,图片输入源设定YUV格式,一般YUV420格式居多,节省存储空间,设置H.264流的尺寸需要和YUV图片尺寸一致。
注意此参数需要设置为1,m_x264_param.b_repeat_headers = 1;由于每帧都需要带帧头
m_hx264 = x264_encoder_open(&m_x264_param);
m_x264_picin = (x264_picture_t*)malloc(sizeof(x264_picture_t));
int nRet = x264_picture_alloc(m_x264_picin, X264_CSP_I420, m_nwidth, m_nheight);
2、编码输入为YUV帧,输出为H.264帧数据,和是否关键帧数据
memcpy(m_x264_picin->img.plane[0], indata, inlen);
outlen = x264_encoder_encode(m_hx264, &m_x264_nal, &m_inal, m_x264_picin, &m_x264_picout);
m_x264_picin->i_pts++;
判断关键帧 m_x264_picout.b_keyframe H.264帧数据 m_x264_nal[0].p_payload
3、释放,编码器使用完毕需要释放。
x264_encoder_close(m_hx264);
C++使用常用参数对x264方法封装DLL
在C#中使用静态导入方法即可实现H.264编码