https://zhuanlan.zhihu.com/p/147315845?utm_id=0

如果你编译的ffmpeg没有启用h264库,在编码时指定-vcodec h264就会报错:

[h264_v4l2m2m @ 0x3830dde0] Could not find a valid device                                                                                                                                            
[h264_v4l2m2m @ 0x3830dde0] can't configure encoder                                                                                                                                                  
Error initializing output stream 0:0 -- Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height                                      
Conversion failed!

常用数据结构说明

https://blog.csdn.net/qq_34732729/article/details/87717540

  • x264_image_t
/********************************************************************************************

 x264_image_t 结构用于存放一帧图像实际像素数据。该结构体定义在x264.h中

*********************************************************************************************/

typedef struct

{

    int     i_csp;           // 设置彩色空间,通常取值 X264_CSP_I420,所有可能取值定义在x264.h中

    int     i_plane;        //  图像平面个数,例如彩色空间是YUV420格式的,此处取值3

    int     i_stride[4];    // 每个图像平面的跨度,也就是每一行数据的字节数

    uint8_t *plane[4];   //  每个图像平面存放数据的起始地址, plane[0]是Y平面,

// plane[1]和plane[2]分别代表U和V平面

}  x264_image_t;
  • x264_picture_t
/********************************************************************************************

x264_picture_t 结构体描述一视频帧的特征,该结构体定义在x264.h中。

*********************************************************************************************/

typedef struct

{

int   i_type;           // 帧的类型,取值有X264_TYPE_KEYFRAME、X264_TYPE_P、

                            // X264_TYPE_AUTO等。初始化为auto,则在编码过程自行控制。

int   i_qpplus1;     // 此参数减1代表当前帧的量化参数值

int   i_pic_struct; // 帧的结构类型,表示是帧还是场,是逐行还是隔行,

                           // 取值为枚举值 pic_struct_e,定义在x264.h中

int   b_keyframe; // 输出:是否是关键帧

int64_t   i_pts;    // 一帧的显示时间戳

int64_t   i_dts;     // 输出:解码时间戳。当一帧的pts非常接近0时,该dts值可能为负。

/* 编码器参数设置,如果为NULL则表示继续使用前一帧的设置。某些参数

   (例如aspect ratio) 由于收到H264本身的限制,只能每隔一个GOP才能改变。

   这种情况下,如果想让这些改变的参数立即生效,则必须强制生成一个IDR帧。*/ 

x264_param_t    *param;

x264_image_t     img;          // 存放一帧图像的真实数据

x264_image_properties_t    prop;

x264_hrd_t    hrd_timing;     // 输出:HRD时间信息,仅当i_nal_hrd设置了才有效

void    *opaque;                     // 私有数据存放区,将输入数据拷贝到输出帧中

} x264_picture_t ;
  • x264_nal_t

/****************************************************************************************************************

x264_nal_t中的数据在下一次调用x264_encoder_encode之后就无效了,因此必须在调用

x264_encoder_encode 或 x264_encoder_headers 之前使用或拷贝其中的数据。

*****************************************************************************************************************/

typedef struct

{

int  i_ref_idc;        // Nal的优先级

int  i_type;           // Nal的类型

int  b_long_startcode; // 是否采用长前缀码0x00000001

int  i_first_mb;       // 如果Nal为一条带,则表示该条带第一个宏块的指数

    int  i_last_mb;        // 如果Nal为一条带,则表示该条带最后一个宏块的指数

    int  i_payload;        // payload 的字节大小

    uint8_t *p_payload;    // 存放编码后的数据,已经封装成Nal单元

} x264_nal_t;
  • cli_opt_t
/****************************************************************************************************************

cli_opt_t结构体主要记录一些与编码关系较小的设置信息,其变量可通过读取main()的参数获得。

*****************************************************************************************************************/

typedef struct

{

       int   b_progress;     // bool类型的变量,用来控制是否显示编码进度。取值为0或1。

       int   i_seek;             // 整数类型 表示开始从哪一帧开始编码。

                                                 // 因为不一定从文件的第一帧开始编码,这是可以控制的。

   /* hnd_t(hnd=handle)是一个空指针, 定义在x264cli.h 中。void *在C语言里空指针是有几个

    特性的,它是一个一般化指针,可以指向任何一种类型,但却不能解引用,需要解引

    用的时候,需要进行强制转换。采用空指针的策略,是为了声明变量的简便和统一。 */

       hnd_t   hin;              // 指向输入yuv文件的指针

       hnd_t  hout;            // 指向编码过后生成的文件的指针。

   /* 一个指向文件类型的指针,它是文本文件,其每一行的格式是 :framenum frametye  

      QP用于强制指定某些帧或者全部帧的帧类型和QP(quant param量化参数)的值. */

       FILE   *qpfile;

} cli_opt_t;

sps句法元素

https://blog.csdn.net/houxiaoni01/article/details/100013749

分类: x264

0 条评论

发表回复

您的电子邮箱地址不会被公开。