gstreamer h264 多播缺少 SPS/PPS 信息

gstreamer h264 multicast missing SPS/PPS information

我有两个视频流单元能够流式传输实时视频输入:

我正在使用 gstreamer 在客户端上查看这些流 运行 linux。我对 h264、rtp 多播流(这两个单元都支持)感兴趣。

我可以使用以下 gstreamer 管道流式传输 Epiphan 视频: gst-launch-0.10 udpsrc multicast-group=ADDRESS port=PORT caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! ffdec_h254 ! autovideosink

但是,此管道不适用于 Axis 单元,因为我反复收到以下错误:

ffmpeg:0:: non-existing PPS referenced
ffmpeg:0:: non-existing PPS 0 referenced
ffmpeg:0:: decode_slice_header error
ffmpeg:0:: no frame!
ffdec_h264: decoding error (len:-1, have_data: 0)

我读到这个错误意味着 ffmpeg 解码器缺少关键帧提供的 SPS/PPS 信息。轴单元有一个GOV参数,它是发送i帧的间隔;它设置为 32。

请注意,我可以通过以下方式在单播中查看两个单元的 rtp 流: gst-launch-0.10 rtspsrc location=rtsp://ADDRESS:PORT/... latency=100 ! rtph264depay ! ffdec_h264 ! autovideosink

由于单播有效并且单播和多播管道相同(源除外),我的猜测是:

感谢您提出任何建议,因为我对 gstreamer 和媒体格式的了解有限,无法决定接下来要做什么。

如 szatmary 的评论所述,轴硬件似乎不会传输 SPS/PPS 信息。我已经就此问题联系了 AXIS 的支持,我收到了回复,指出我的问题是 "outside of the scope of support staff"。

我找到的解决方案是在接收管道中包含 "sprop-parameter-sets"。此参数似乎每个流都是唯一的,可以通过以下任一方式获得:

  • 使用 rtsp 启动单播接收器(上面提供的示例)将提供可以复制的上限集,或者
  • 从硬件访问 .sdp 文件,通常可以通过 http(例如,http://<USERNAME:PASSWORD>@<ADDRESS:PORT>/axis-cgi/alwaysmulti.sdp?camera=1)访问

请注意,访问 sdp 文件是按流进行的(因此 camera=1),因此如果您的硬件有多个输入,请确保选择正确的输入。