输入的数据准备好了,编码后的数据都在x264_nal_t的数组。我这里设置的参数是Baseline Profile,所以编码后没有B帧,将编码后的数据保存分析后发现,第一次编码的时候会有4个NAl,分别是SPS、PPS、SEI、I帧,也即分别是00 00 00 01 67、 00 00 00 01 68、 00 00 01 06、00 00 01 65开头的四个数据段,这里注意的是SEI和I帧的开头貌似X264中就是00 00 01的起始头了,应该是和源码中这样写的关系,不过没有什么大碍,就是后面在删除这些起始头的时候会有两种判断吧。然后编码第二帧图像,得到的就是一个NAL了,是P帧 00 00 01 41.
这里还讲几个我遇到的一些参数和困惑,起初我发现在分析数据的时候,第一次是5个NAl,即SPS、PPS、SEI、I帧、I帧,第二次编码的时候是2个NAL,即P帧、P帧,这是怎么发生的呢,原来是有多个线程跑的原因,m_param.b_sliced_threads= false;后就会发现正常了。
还有就是我要控制一个I后几个P,即一个GOP的数目,那么需要设置m_param.i_keyint_max 的值。另外就是在m_param.b_repeat_headers = 1; // 重复SPS/PPS 放到关键帧前面,这样设置有利于解码的是每个I帧都会有SPS和PPS。