DRT*_*DRT 22 video video-processing mpeg-2 h.264 mpeg-4
我试图从H264流中获取尺寸(高度和宽度).我知道要从mpeg2流中获取相同的详细信息,您必须查看序列头开始代码后面的四个字节((01B3)).H264的逻辑是否相同?非常感谢我得到的任何帮助..
Cip*_*ipi 46
没有!!!
您必须运行复杂函数才能从序列参数集中提取视频维度.这该怎么做?那么首先你必须编写自己的指数哥伦布解码器,或者找到一个在线...在LIVE555源代码某处有一个例子...
然后你必须得到一个SPS帧.它具有NAL=0x67
(NAL是H.264帧中的第一个字节),您可以sprop-parameter-sets
在第一个逗号之前的第一个Base64字符串下找到SDP中的Base64编码字符串.其他逗号分隔字符串有图像参数集...这是一个SDP SPS Z0KAKYiLQDIBL0IAAB1MAAK/IAg=
你需要从Base64的是这样的解码成字节数组.
然后你必须提取RAW BYTE SEQUENCE PAYLOAD,然后是该字节数组中的NAL UNIT HEADER!它通常是一个字节长,但读取只是为了确保... RBSP包含运行该seq_parameter_set_data( )
函数所需的字节.因此,您需要首先剥离NAL UNIT HEADER(一个或多个字节).
这是从SPS NAL UNIT中提取RBSP字节的函数:
然后,当你有SPS(RBSP字节)时,你需要执行一个解析这个字节数组中的位的函数.这是在那里解析所有参数的函数(整个文档可以在这里找到:http://www.itu.int/rec/T-REC-H.264-201003-I/en及其免费):
在那里你可以看到一些奇怪的东西......首先,你的视频尺寸计算如下:
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);
Run Code Online (Sandbox Code Playgroud)
其次,最重要的是,在此代码表的DESCRIPTOR列中,说明了您应该如何阅读第一列中的粗体文本参数.这就是那里的价值观:
ue()
)这是你的Exp-Golomb解码器派上用场的地方......
因此,实现此功能,解析SPS,您将获得您的宽度和高度.请享用... :)
小智 21
不幸的是,大小计算是错误的,应该是:
width = ((pic_width_in_mbs_minus1 +1)*16) - frame_crop_left_offset*2 - frame_crop_right_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);
Run Code Online (Sandbox Code Playgroud)