首页 > 解决方案 > H.264 流可以说它的 SAR 和 DAR 是 [0:1]

问题描述

我已经实现了一个视频查看应用程序来显示来自摄像机的视频流。它使用 FFMPEG 库接收 (H.264) 多播视频流并将其解码为图像,这些图像由我的应用程序显示。它工作得很好,但现在有一个特定的相机流导致我的应用程序崩溃。用ffprobe探测流时,根据流信息显示,SAR和DAR都是[0:1]。我以前从未在其他相机上见过这种情况。这是导致我的应用程序出现问题的 SAR,所以现在我已经对其进行了修补,假设 SAR 为 [1:1],以防流指示无效 SAR。

我的问题相当笼统,并没有特别针对我的应用程序:

是否允许摄像机报告 [0:1] 的 SAR(和/或 DAR),这似乎没有意义?如果允许,在这种情况下是否应该假设一些默认的 SAR 和/或 DAR?

在 ffprobe 输出的一部分下方,以防相关...

$ ffprobe -v info -show_streams -protocol_whitelist udp,rtp,file stream_system_1_cam_11_live.sdp
ffprobe version 3.2.14-1~deb9u1 Copyright (c) 2007-2019 the FFmpeg developers
  built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
Input #0, sdp, from 'stream_system_1_cam_11_live.sdp':
  Metadata:
    title           : /videoinput_1:0/h264_1/media.stm
  Duration: N/A, start: 0.333700, bitrate: N/A
    Stream #0:0: Video: h264 (Main), yuvj420p(pc, bt470bg/bt470bg/smpte170m, progressive), 1920x1080, 30 fps, 29.97 tbr, 90k tbn, 60 tbc
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=Main
codec_type=video
codec_time_base=1/60
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=1920
height=1080
coded_width=1920
coded_height=1080
has_b_frames=0
sample_aspect_ratio=0:1
display_aspect_ratio=0:1
pix_fmt=yuvj420p
level=42
color_range=pc
color_space=bt470bg
color_transfer=smpte170m
color_primaries=bt470bg
chroma_location=left
field_order=progressive
[/STREAM]

让我吃惊的是sample_aspect_ratio=0:1display_aspect_ratio=0:1!非常感谢任何想法,信息和意见,谢谢。

标签: video-streamingh.264

解决方案


来自 H.264 规范章节“E.2.1 VUI 参数语义”:

sar_width 和 sar_height 应互质或等于 0。当 aspect_ratio_idc 等于 0 或 sar_width 等于 0 或 sar_height 等于 0 时,本建议书应认为样本纵横比未指定 | 国际标准。

所以这意味着 SAR 是未指定的。


推荐阅读