要判断从编码器中获取到的一帧Byte数组是I帧还是P帧,首先需要了解H264数据的基本格式
I帧:帧内编码 P帧:前向预测编码(与前一个I帧比较差异) B帧:双向预测编码(与前后帧比较差异)
H264流:首帧数据为SPS和PPS,后面为IPPPPIPPPP(忽略B帧)
单帧H264数据:带有00 00 00 01分割,后面接NALU类型,可以使用NALU类型判断是否为I帧
Java代码如下
public static boolean checkIsIFrame(byte[] data) {
if( data == null || data.length < 5) {
return false;
}
//data[4]为NALU类型
if (data[0] == 0x0 && data[1] == 0x0 && data[2] == 0x0 && data[3] == 0x1 && data[4] == 0x67) {
return true;
}
byte nalu = data[4];
return ((nalu & 0x1F) == 5) ? true : false;
}