我不确定自己是否需要计算sar_width和 sar_height

编程语言 2026-07-08

我在尝试从SPS获取宽度和高度。
H264从序列参数集(SPS)NAL单元获取帧的宽高

逐步

步骤1.解析序列参数字段(chroma_format_idc、separate_colour_plane_flag)

步骤2.获取宽度和高度。

int width = PicWidthInMbs * 16 - SubWidthC * (crop_left + crop_right);
int height = FrameHeightInMbs * 16 - SubHeightC * (2 - sps->frame_mbs_only_flag) * (crop_top + crop_bottom);

步骤3.计算sar_width和 sar_height。然后,我对是否需要计算sar_width和 sar_height感到困惑。

if (sps.vui_parameters_present_flag && sps.tVUIParameters.sar_width && sps.tVUIParameters.sar_height)
{
display_width = width * sps.tVUIParameters.sar_width /    sps.tVUIParameters.sar_height;
}

width = display_width;
height = display_height;

这个宽度和高度将用于FMP4打包(muxing)和M3U8元数据信息。

在此输入图片描述
在此输入图片描述

我应该只做到步骤2,还是也做步骤3?

解决方案

像素宽高比是每行像素数(像素宽度)与像素行数(像素高度)之比。它很少直接使用(像素比率本身几乎没用),通常使用的是尺寸,即宽度/高度。把它乘以样本像素宽高比(SAR——单个像素维度的比率),就能得到显示宽高比或画面宽高比(DAR),这是在屏幕上呈现的画面的实际物理纵横比。

你给出了两个位置。第一个是在stsd/avc1盒中。它在ISO标准14496-15中有描述:

VisualSampleEntry中的宽度和高度字段必须正确记录该条目所描述的AVC流的裁剪后帧尺寸(视觉呈现尺寸)

我认为这意味着显示宽高比(DAR)。

第二个是HLS流元数据。它在RFC 8216中描述:

RESOLUTION

该值以十进制表示的分辨率,描述变体流中显示所有视频的最佳像素分辨率。

这是像素分辨率,而不是显示比例。它不用于呈现,而是用于流的变体选择,可能受解码器能力的约束。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章