gpt4 book ai didi

android - 如何通过一些特殊标签区分 H264 编码的视频帧?

转载 作者:太空宇宙 更新时间:2023-11-03 12:42:01 24 4
gpt4 key购买 nike

我有来自 Android 移动相机的 H264 编码视频文件,我想获取帧并将它们一一存储为文件。问题是,我如何区分帧,帧是否被一些特殊标签分割?现在我有这个函数可以按字节获取帧长度,也许它有助于理解我的问题,Thx:)

  public static int h263Parse(byte[]buf, int offset, int nLen)
{
int vop_found, i;
vop_found = 0;
i=0;
if(vop_found == 0)
{
for(i=(offset + 3); i<(offset+nLen); i++)
{
if(buf[i-3] == 0x00)
if(buf[i-2] == 0x00)
if((buf[i-1]&0xff) < 0x84)
if((buf[i-1]&0xff) >= 0x80)
{
i++;
vop_found=1;
break;
}
}
}

if(vop_found == 1)
{
for(; i<(offset+nLen); i++)
{
if(buf[i-3] == 0x00)
if(buf[i-2] == 0x00)
if((buf[i-1]&0xff) < 0x84)
if((buf[i-1]&0xff) >= 0x80)
{
return i-3-offset;
}
}
}
return -1;
}

最佳答案

我真的不知道你的代码在做什么(因为它被命名为 h263parse)而且你问的是 h264。

无论如何,H264 帧确实被一个特殊的标签分开,称为起始码前缀,它是 0x00 0x00 0x010x00 0x00 0x00 0x01
两个起始码之间的所有数据组成了 H264 语言中的一个NAL 单元。所以也许你想要做的是在你的 h264 流中搜索 startcode 前缀,并对流中后面的 NAL 单元(直到下一个 startcode 前缀)做一些事情。

也许是这样的:

void h264parse_and_process(char *buf)
{
while(1)
{
if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x01)
{
// Found a NAL unit with 3-byte startcode, do something with it
do_something(buf); // May be write to a file
break;
}
else if (buf[0]==0x00 && buf[1]==0x00 && buf[2]==0x00 && buf[3]==0x01)
{
// Found a NAL unit with 4-byte startcode, do something with it
do_something(buf); // May be write to a file
break;
}
buf++;
}
}

关于android - 如何通过一些特殊标签区分 H264 编码的视频帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com