2011-10-06 200 views
13

这里是我尝试:网络摄像头流媒体使用的GStreamer通过UDP

gst-launch -v udpsrc port=1234 ! fakesink dump=1

我测试:

gst-launch -v audiotestsrc ! udpsink host=127.0.0.1 port=1234

,一切工作正常,我可以看到包到达从audiotestsrc

现在让我们来测试网络摄像头的来源:

gst-launch -v v4l2src device=/dev/video0 ! queue ! videoscale method=1 ! "video/x-raw-yuv,width=320,height=240" ! queue ! videorate ! "video/x-raw-yuv,framerate=(fraction)15/1" ! queue ! udpsink host=127.0.0.1 port=1234

没有任何反应,转储中不显示任何软件包。

以下是服务器中详细显示的logdump

有没有人有这方面的线索?

+1

忘了提:与autovideosink更换udpsink例如我可以看到摄像头就好了 –

回答

17

尝试这些(你可能必须安装这一个的GStreamer丑插件)

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

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 

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

gst-launch udpsrc port=1234 ! "application/x-rtp, payload=127" ! rtph264depay ! ffdec_h264 ! xvimagesink sync=false 

更新

为了确定流结束的有效载荷只需使用详细选项与gst-launch -v ...

+2

这是一个好主意,包括编码和流之间的队列。允许更好的计时和更少的抖动回放。 –

+0

@AtillaFiliz我倾向于在使用'tee'时使用'队列',尽管在这种情况下你的观点可能是有效的。 – enthusiasticgeek

+0

我做了一些我自己的实验。我在编码器端使用了一些专门的硬件,添加一个队列没有任何区别。然而,当我在rtpdepay和ffdec之间添加一个队列时,播放质量有了很大提高。 –

4

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