h264视频数据一帧的起始一般为00 00 00 01(视频首帧)和00 00 01(首帧之外每一帧),然后接下来的一位则表示帧类型,具体判断如下:
/**
* 检测是否是关键帧
* @param buffer 编码后的h264视频数据
*/
public static boolean isKeyFrame(@NonNull byte[] buffer) {
if (buffer.length < 5) {
return false;
}
//00 00 00 01
if (buffer[0] == 0
&& buffer[1] == 0
&& buffer[2] == 0
&& buffer[3] == 1) {
int nalType = buffer[4] & 0x1f;
if (nalType == 0x07 || nalType == 0x05 || nalType == 0x08) {
return true;
}
}
//00 00 01
if (buffer[0] == 0
&& buffer[1] == 0
&& buffer[2] == 1) {
int nalType = buffer[3] & 0x1f;
if (nalType == 0x07 || nalType == 0x05 || nalType == 0x08) {
return true;
}
}
return false;
}