gpt4 book ai didi

video - 获取 H264Video 流的尺寸

转载 作者:行者123 更新时间:2023-11-28 21:38:38 25 4
gpt4 key购买 nike

我正在尝试从 H264 流中获取尺寸(高度和宽度)。我知道要从 mpeg2 流中获取相同的详细信息,您必须查看序列头起始代码 ((01B3)) 之后的四个字节。同样的逻辑适用于 H264 吗?非常感谢我得到的任何帮助..

最佳答案

不!!!

您必须运行一个复杂的函数来从序列参数集中提取视频维度。这个怎么做?好吧,首先你必须编写自己的 Exp-Golomb 解码器,或者在网上找到一个...例如在 live555 源代码中有一个...

那么你必须得到一个SPS框架。它具有 NAL=0x67(NAL 是 H.264 帧中的第一个字节),您可以在 sprop-parameter-sets 下的 SDP 中找到它作为 Base64 编码的字符串第一个逗号之前的第一个 Base64 字符串。其他逗号分隔的字符串还有图片参数集...这是来自 SDP Z0KAKYiLQDIBL0IAAB1MAAK/IAg= 的一个 SPS,您需要将类似的内容从 Base64 解码为字节数组。

然后你必须提取 RAW BYTE SEQUENCE PAYLOAD,然后是该字节数组中的 NAL UNIT HEADER!它通常是一个字节长,但请继续阅读以确保... RBSP 包含运行 seq_parameter_set_data( ) 函数所需的字节。所以你需要先剥离 NAL UNIT HEADER(一个或多个字节)。

这里是从SPS NAL UNIT中提取RBSP字节的函数:

NAL UNIT

然后当你有 SPS(RBSP 字节)时,你需要执行一个函数来解析这个字节数组中的位。这是其中解析了所有参数的函数(可以在此处找到整个文档:http://www.itu.int/rec/T-REC-H.264-201003-I/en 及其免费): How to decode SPS

在那里你可以看到一些奇怪的东西......首先,你的视频尺寸是这样计算的:

Width = ((pic_width_in_mbs_minus1 +1)*16) - frame_crop_right_offset*2 - frame_crop_left_offset*2;
Height = ((2 - frame_mbs_only_flag)* (pic_height_in_map_units_minus1 +1) * 16) - (frame_crop_top_offset * 2) - (frame_crop_bottom_offset * 2);

其次,也是最重要的,在此代码表的 DESCRIPTOR 列中,说明了您应该如何阅读第一列中的粗体文本参数。这就是其中的值的含义:

  • u(N) - 读取一个 N 位长的无符号数
  • s(N) - 读取一个 N 位长的有符号数
  • ue(v) - 读取一个无符号的 Exp-Golomb 数(v 是可变长度的,所以它与 ue() 相同)
  • se(v) - 读取带符号的 Exp-Golomb 数

这就是您的 Exp-Golomb 解码器派上用场的地方...

所以,实现这个函数,解析SPS,就可以得到你的Width和Height了。享受...:)

关于video - 获取 H264Video 流的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6394874/

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