如何计算/检测原始H.264比特流中的帧(图片)?我知道有5种VCL NALU类型,但我不知道如何rec(k)将它们的序列识别为访问单元。我想检测一个帧意味着检测一个访问单元作为访问单元
一组NAL单元,它们按解码顺序连续并包含 恰好是一个主要编码图片。除了主要编码 图片中,访问单元还可以包含一个或多个冗余编码 图片,一个辅助编码图片,或其他NAL单元 包含编码图像的切片或切片数据分区。该 访问单元的解码总是产生解码图像。
我希望它知道实时流出服务器的FPS是什么。
答案 0 :(得分:5)
您的解释是正确的,如果您想自己解析流,请查看here
但是要以易于阅读和解析的格式(使用任何文本解析器)快速提取流信息,您可以使用ffprobe
ffprobe -show_streams -count_frames -pretty filename
您将在输出中找到:
对于fps,我听说ffprobe可能会报告fps的一些错误,请尝试一个简单的ffmpeg -i
命令。
ffmpeg -i filename 2>&1 | sed -n "s/.*, \(.*\) fps.*/\1/p"
答案 1 :(得分:4)
7.4.1.2.3 NAL单位和编码图片的顺序以及与访问单元的关联
本小节规定了NAL单元和编码图像的顺序以及与符合附件A中规定的一个或多个配置文件的编码视频序列的访问单元的关联,这些配置文件是使用第2-9条规定的解码过程解码的。
访问单元包括一个主要编码图像,零个或多个相应的冗余编码图像,以及零个或多个非VCL NAL单元。 VCL NAL单元与主要或冗余编码图像的关联在7.4.1.2.5中描述。
比特流中的第一个访问单元从比特流的第一个NAL单元开始。
在主要编码图片的最后一个VCL NAL单元之后的以下任何NAL单元中的第一个指定新访问单元的开始:
主要编码图像的第一个VCL NAL单元的检测限制在7.4.1.2.4中规定。
7.4.1.2.4检测主要编码图像的第一个VCL NAL单元
本小节规定了对VCL NAL单元语法的约束,这些约束足以使每个主要编码图像的第一个VCL NAL单元能够检测符合附件A中指定的一个或多个被解码的配置文件的编码视频序列使用第2-9节中指定的解码过程。
任何编码切片NAL单元或编码切片数据分区当前存取单元的主要编码图像的NAL单元应不同于任何编码切片NAL单元或编码切片数据分区A NAL单元的主要编码图像。先前的访问单元有以下一种或多种方式:
(注2 - 冗余编码图像中的一些VCL NAL单元或一些非VCL NAL单元(例如,访问单元定界符NAL单元)也可用于检测访问单元之间的边界,并且可以因此有助于检测新的主要编码图像的开始。)
答案 2 :(得分:0)
NAL单位与帧必然没有1-1的关系。帧可以分成多个NAL单元。如果要手动解析流,则需要处理下面的博客文章中定义的每种类型。如果流有一个SPS NAL数据包,它应该包含帧速率,但这不一定是实际帧速率,只是容器认为它具有的速率。
当您询问如何找到AU的实际开始时,如果它是“附件B”比特流,则每个NALU将具有起始码0x000001或0x00000001。 AVCC使用一个小标题来定义NALU的长度。
查看以下精彩博文,了解更多详情:szatmary.org
希望有所帮助!