video-streaming - 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:1和display_aspect_ratio=0:1!非常感谢任何想法,信息和意见,谢谢。
解决方案
来自 H.264 规范章节“E.2.1 VUI 参数语义”:
sar_width 和 sar_height 应互质或等于 0。当 aspect_ratio_idc 等于 0 或 sar_width 等于 0 或 sar_height 等于 0 时,本建议书应认为样本纵横比未指定 | 国际标准。
所以这意味着 SAR 是未指定的。
推荐阅读
- firebase - ReactNatice 应用程序(Android)没有收到来自 Firebase Cloud 消息的通知
- scala - 使用 Witness 提取类型标签
- node.js - 从邮递员发送 json 数据时未定义 request.body
- swiftui - 如何通过自定义 ListStyle 删除列表中的单独行?
- java - 如何将我的 R 图形/文件集成到 Java 的 Swing 中?
- vb.net - Pkcs#11 异常:未找到带有序列号和标签的令牌
- javascript - React (HTML) 视频标签不会在移动设备上自动播放
- php - 将 PHP 变量添加到 HTML href
- java - 自动化的 Electron 桌面应用程序在 Electron 版本 4.0 中不工作,而在版本 2.0 上工作
- three.js - 三.js/WebGL 使透视相机缩小直到所有物体都可见