我不确定自己是否需要计算sar_width和 sar_height
我在尝试从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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

