编译安装X264库
git clone http://git.videolan.org/git/x264.git
cd x264
./configure --enable-shared --disable-asm
make
sudo make install
编译完成之后编译的库在/usr/local/lib下面
X264编码需要用到的结构体
typedef struct _X264Encoder
{
x264_param_t *param;
x264_picture_t *picture; //视频序列中的帧特点
x264_t *handle;
x264_nal_t *nal;
} X264Encoder;
X264编码的主要函数
x264_param_default():设置参数集结构体x264_param_t的缺省值。
x264_picture_alloc():为图像结构体x264_picture_t分配内存。
x264_encoder_open():打开编码器。
x264_encoder_encode():编码一帧图像。
x264_encoder_close():关闭编码器。
x264_picture_clean():释放x264_picture_alloc()申请的资源。
X264主要编码属性
param->cpu = x264_cpu_detect(); //CPU自动检测
param->i_threads = X264_THREAD_AUTO; //并行编码线程
param->b_deterministic = 1; //可以非确定时线程优化
param->i_sync_lookahead = X264_SYNC_LOOKHEAD_AUTO; //自动选择线程超前缓冲
//视频属性
param->i_csp = X264_CSP_I420 //输入视频的格式为YUV420;
param->i_width = width; //输入视频的宽高
param->i_height = height;
X264的编码参数很多,我们大多数情况下只需要设置一些参数,其他使用默认的参数就可以了。
开始编码
typedef struct _X264Encoder
{
x264_param_t *param;
x264_picture_t *picture; //视频序列中的帧特点
x264_t *handle;
x264_nal_t *nal;
} X264Encoder;
void h264_Encoder_init(X264Encoder *encoder, int width, int height)
{
//初始化分配空间
encoder->param = (x264_param_t *)malloc(sizeof(x264_param_t));
encoder->picture = (x264_picture_t *)malloc(sizeof(x264_picture_t));
x264_param_default(encoder->param);
encoder->nal = NULL;
encoder->handle = NULL;
//选择编码模型 X264封装了几种现有的编码模型 使用zerolatency编码即刻返回编码后的输出,不用flush
int rc = x264_param_default_preset(encoder->param, "veryfast", "zerolatency");
if (rc == -1)
{
printf("x264_param_default_preset\n");
retu