从一段264码流中循环获取一个nalu的函数,先用fopen把码流读入buf,码流总长度复制给bufLen.
//获取一个nalu的长度
int getNalu(unsigned char *buf, int bufLen)
{
int i = 0;
if (bufLen < 5 || (buf[i] != 0x00 && buf[i + 1] != 0x00 && buf[i + 2] != 0x00 && buf[i + 3] != 0x01))
{
return 0;
}
for (i = 5; i < bufLen - 9; i++)
{
if (buf[i] == 0x00 && buf[i + 1] == 0x00 && buf[i + 2] == 0x00 && buf[i + 3] == 0x01)
{
return i;
}
}
return bufLen;
}
参数 buf 是一段264码流的指针(sps pps i p i p ...),
参数 bufLen是这段码流的总长度
返回值 是每次获取到nalu的长度,
使用方法:循环执行以下代码,返回0说明码流结束。
naluLen = getNalu(h264buf, h264len);
h264buf += naluLen;指针移动到下一个nalu头
h264len -= naluLen;总长度每次减小
naluLen不等于0 的时候, h264buf就是一个nalu分片指针,naluLen就是这个分片的长度。