通过UDP使用gstreamer的网络摄像头流媒体

通过UDP使用gstreamer的网络摄像头流媒体,gstreamer,Gstreamer,以下是我正在尝试的: gst启动-v udpsrc端口=1234!fakesink dump=1 我用以下方法进行测试: gst发布-v audiotestsrc!udpsink主机=127.0.0.1端口=1234 一切正常,我可以看到来自audiotestsrc 现在让我们使用网络摄像头源进行测试: gst启动-v v4l2src设备=/dev/video0!队列视频比例法=1!“视频/x-raw-yuv,宽度=320,高度=240”!队列视频速率!“视频/x-raw-yuv,帧率=(分数)

以下是我正在尝试的:

gst启动-v udpsrc端口=1234!fakesink dump=1

我用以下方法进行测试:

gst发布-v audiotestsrc!udpsink主机=127.0.0.1端口=1234

一切正常,我可以看到来自
audiotestsrc

现在让我们使用网络摄像头源进行测试:

gst启动-v v4l2src设备=/dev/video0!队列视频比例法=1!“视频/x-raw-yuv,宽度=320,高度=240”!队列视频速率!“视频/x-raw-yuv,帧率=(分数)15/1”!队列udpsink主机=127.0.0.1端口=1234

并且什么也没有发生,转储中没有出现任何包

下面是详细说明服务器中显示的内容


有人对此有线索吗?

可能数据包对于udp来说太大了?它们限制为64K。尝试将帧大小调整为非常小的大小,以检查这是否是原因。如果是这样,您可能会对一些压缩和付费/付费加载程序感兴趣(
gst-inspect | grep-pay
)。

试试这些(您可能需要为此安装gstreamer丑陋的插件)

来自网络摄像头的UDP流(通过网络传输)

从网络摄像头接收UDP流(通过网络接收)

更新


要确定流端的有效负载,只需将verbose选项与gst launch-v…gstreamer1-1.16.0-1.fc30一起使用即可

gst-launch-1.0-v filesrc location=/…/…/…/…/sample-mp4-file.mp4!qtdemux!h264parse!队列rtph264pay配置间隔=10pt=96!udpsink端口=8888主机=127.0.0.1


忘了提及:例如,用autovideosink替换udpsink,我可以看到网络摄像头很好。在编码和流媒体之间加入一个队列是个好主意。允许更好的计时和更少的抖动播放。@AtillaFiliz我倾向于在使用“tee”时使用“queue”,尽管您的观点在这种情况下可能是有效的。我自己做了一些实验。我在编码器端使用了一些专门的硬件,添加一个队列没有任何区别。然而,当我在rtpdepay和ffdec之间添加一个队列时,播放质量得到了很大的提高。队列元素通过在另一个线程中发送数据来解耦流。你能解释一下你的答案吗?
gst-launch v4l2src device=/dev/video0 ! 'video/x-raw-yuv,width=640,height=480' !  x264enc pass=qual quantizer=20 tune=zerolatency ! rtph264pay ! udpsink host=127.0.0.1 port=1234
gst-launch udpsrc port=1234 ! "application/x-rtp, payload=127" ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false