h264

基础

H.264高清算法压缩格式,码流更小,便于网络传送以及节省存储空间;相较MJPEG算法,可节省2/3带宽,更利于高清视频传输。H.264压缩比是200:1。

H.264 的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL,Network Abstraction Layer)。VCL 数据即编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL 数据传输或存储之前,这些编码的VCL 数据,先被映射或封装进NAL 单元中。每个NAL 单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL 头信息。RBSP 的基本结构是:在原始编码数据的后面填加了结尾比特。一个bit“1”若干比特“0”,以便字节对齐。

H.264标准没有规定编码器的实现或流程,常用的为VideoLan的x264和思科的openh264。

注:H264编码的输入数据需要是YUV420P。

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_picture_t:存储压缩编码前的像素数据。

x264_nal_t:存储压缩编码后的码流数据。

参考:V4L2视频采集与H264编码3—X264移植 V4L2视频采集及H264实时压缩

H.264格式

参考:视音频数据处理入门:H.264视频码流解析 leixiaohua
h264分析工具code-leixiaohua

H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的,结构如下图所示。

H264

其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。

H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。

详细H264格式可参考:

H.264参数

ffmpeg -h encoder=libx264

参考:FFmpeg从入门到精通》读书笔记(三)

posted @ 2016-07-30 07:48  yuxi_o  阅读(643)  评论(0编辑  收藏  举报