我正在寻找一个在h264流中寻找参考帧的算法。我在不同的解决方案中看到的最常见的metod是找到IDR类型的访问单元、分隔符和NAL。不幸的是,我检查过的大多数溪流都没有IDR类型的NAL。我会很感激你的帮助。问候Jacek
发布于 2012-06-25 06:50:54
H264帧由一个名为startcode前缀的特殊标记分割,它要么是0x000x000x01,要么是0x000x000x000x01。两个启动码之间的所有数据都由H264语音中的NAL单元组成。因此,您要做的是在h264流中搜索startcode前缀。startcode前缀后面的字节是NAL头。NAL头的最低5位将给您NAL单元类型。如果nal_unit_type = 5,那么这个特殊的NAL单元就是一个参考框架。
就像这样:
void h264_find_IDR_frame(char *buf)
{
while(1)
{
if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x01)
{
// Found a NAL unit with 3-byte startcode
if(buf[3] & 0x1F == 0x5)
{
// Found a reference frame, do something with it
}
break;
}
else if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x00 && buf[3]==0x01)
{
// Found a NAL unit with 4-byte startcode
if(buf[4] & 0x1F == 0x5)
{
// Found a reference frame, do something with it
}
break;
}
buf++;
}
}https://stackoverflow.com/questions/10946496
复制相似问题