识别 RTSP 流是否包含 PPS 和 SPS 信息

Identify if an RTSP Stream contains PPS and SPS information

我正在使用 gstreamer 摄取不同种类的安全摄像头 RTSP 流。在大多数情况下,我使用类似于此的管道

gst-launch-1.0 rtspsrc location=rtsp://<username:password@$RTSPURL> protocols=4 name=rtspsrc0 rtspsrc0. ! rtph264depay ! tee name=t t.! queue ! hlssink2 name=ingest2 playlist-length=5 max-files=10 target-duration=2 playlist-location=stream.m3u8 location=segment_%d.ts

然而,Axis 相机似乎根本不发送 SPS 和 PPS NALU。为了解决这个问题,我必须使用 h264parse config-interval=-1 以便插入 SPS 和 PPS。

我想确定哪些流具有 SPS PPS 信息并相应地添加 H264parse。

在gstreamer中有没有办法,ffmpeg/ffprobe识别数据包中是否发送了PPS,SPS,然后动态添加h264parse元素?

你可以运行

ffmpeg -i INPUT -an -c copy -t 10 -bsf:v trace_headers -f null - 2>&1 | grep Parameter

这将检查 10 秒的视频流数据并记录所有 NALU 数据。如果存在 PS,您将看到

形式的行
[trace_headers @ 000002951294c4c0] Sequence Parameter Set
[trace_headers @ 000002951294c4c0] 0           forbidden_zero_bit              0 = 0
[trace_headers @ 000002951294c4c0] 1           nal_ref_idc                    11 = 3

请检查 PS 部分正上方的行,如果它显示

[trace_headers @ 000002951294c4c0] Extradata

忽略它。这可以是 out-of-band 传输,例如来自 SDP。