H.264编码器是基于DSP技术开发的一款高质量的硬件编码器,它拥有高度的压缩比及高速的运算内核,支持业界最常用的压缩算法H.264/AVC编码格式,可独立处理每一路视音频,内嵌去隔行扫描算法,视频码率支持从64Kbps-1.5Mbps,高效的色彩还原机制,视频质量达到运营级别水平。
h264 以及x264编码器相关知识
1、 判断I帧或IDR帧
00 00 00 01 65 、、、、、、 IDR帧
00 00 00 01 41 、、、、、、 I 帧或P帧
2、 X264 keyint 设置的是IDR帧的间隔,不是I帧
3、 应该首先发IDR,可以保证后面的P帧可以正确解码。注意不是普通I帧,因为普通I帧后面的P帧有可能依赖普通I帧前面的帧(最多16个参考帧)
4、 做演示时,可以可虑设置Q值,而不是bitrate,x264的码流控制有时有问题,导致画面不清晰。但是Q值不能保证比特率,网络状态不好的时候,可能导致问题
//the bitrate in kilobits/sec
int err = x264_param_parse(&mParam, "bitrate", ltoa(mBitrate, str, 10));
// use q instead of rate control, can keep video quality good, but can not ensure bitrate
int err = x264_param_parse(&mParam, "qp", "26");
h264 以及x264编码器分层结构
H.264编码器输出的Bit流中,每个Bit都隶属于某个句法元素。句法元素被组织成有层次的结构,分别描述各个层次的信息。
在H.264 中,句法元素共被组织成 序列、图像、片、宏块、子宏块五个层次。在这样的结构中,每一层的头部和它的数据部分形成管理与被管理的强依赖关系,头部的句法元素是该层数据的核心,而一旦头部丢失,数据部分的信息几乎不可能再被正确解码出来,尤其在序列层及图像层。
在 H.264 中,分层结构最大的不同是取消了序列层和图像层,并将原本属于序列和图像头部的大部分句法元素游离出来形成序列和图像两级参数集,其余的部分则放入片层。
参数集是一个独立的数据单位,不依赖于参数集外的其他句法元素。一个参数集不对应某一个特定的图像或序列,同一序列参数集可以被多个图像参数集引用,同理,同一个图像参数集也可以被多个图像引用。只在编码器认为需要更新参数集的内容时,才会发出新的参数集。
复杂通信中的码流中可能出现的数据单位:
IDR: 在H.264中,图像以序列为单位进行组织。一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。 IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像。I帧之后的图像有可能会使用I帧之前的图像做运动参考。
- PC官方版
- 安卓官方手机版
- IOS官方手机版