我有两个能够直播视频输入的视频流媒体单元:
我正在使用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
由于单播工作以及单播和多播管道相同(源代码除外),我的猜测是:
我的udpsrc上限对于轴流来说是不正确的(我不知道在哪里/如何验证它)
或者,轴多播格式/编码是不同的,需要修改管道(我发现这不太可能,因为单播正在工作,我不明白为什么编码会在单播/多播之间改变)
任何建议都值得赞赏,因为我对gstreamer和媒体格式的了解仅限于接下来要尝试的内容。
答案 0 :(得分:0)
正如szatmary评论中所述,轴硬件似乎没有流式传输SPS / PPS信息。我已经联系过AXIS'对此问题的支持我收到了回复,说我的问题是"超出了支持人员的范围"。
我找到的解决方案是包含" sprop-parameter-sets"在接收管道中。此参数似乎每个流都是唯一的,可以通过以下任一方式获得:
rtsp
启动单播接收器(上面提供的示例),它将提供可以复制的大写字母集,或者http://<USERNAME:PASSWORD>@<ADDRESS:PORT>/axis-cgi/alwaysmulti.sdp?camera=1
)请注意,访问sdp文件是按流(因此camera=1
),因此如果您的硬件有多个输入,那么一定要抓住正确的输入。