前提說明:
在做gstreamer項目的時候某些時候需要主動發送設備中采集的數據到服務端,
這樣就可以利用tcpclientsink和udpsink插件,主動發送數據到指定的服務器。
tcpclientsink 用法
說明:如果想主動往服務器發送數據,可以通過tcpclientsink插件進行傳輸
具體的代碼如下
data-client:
發送到linux:
raspivid -t 0 -w 800 -h 600 -fps 25 -g 5 -b 4000000 -vf -p 20,20,640,480 -o - | gst-launch-1.0 fdsrc ! h264parse ! gdppay ! tcpclientsink host=192.168.11.35 port=3000
發送到windows:
raspivid -t 0 -w 800 -h 600 -fps 25 -g 5 -b 4000000 -vf -p 20,20,640,480 -o - | gst-launch-1.0 fdsrc ! h264parse ! rtph264pay config-interval=2 ! tcpclientsink host=192.168.11.35 port=3000
server:
linux:
gst-launch-1.0 tcpserversrc host=192.168.11.35 port=3000 ! fdsink fd=2
windows:
gst-launch-1.0 tcpserversrc host=192.168.11.35 port=3000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
rtsp server:(在gst-rtsp-server example項目中)
linux:
./test-launch "( tcpserversrc host=192.168.11.35 port=3000 ! gdpdepay ! rtph264pay name=pay0 pt=96 )"
windows:
./test-launch "( tcpserversrc host=192.168.11.35 port=3000 ! application/x-rtp,payload=96 ! rtpjitterbuffer ! rtph264depay ! h264parse ! rtph264pay name=pay0 pt=96 )"
這樣就可以在手機或者客戶端用rtsp軟件進行實時視頻傳輸了,
rtsp-server需要注意:
因為rtsp服務器是需要數據的時候才接受來自tcpserversrc的數據,所以必須在手機或者客戶端連接上rtsp的服務器端的時候,打開data-client才有效。
打開順序為 rtsp-server->rtsp-client->tcpclientsink
udpsink 用法:
data-client:
發送到linux:
raspivid -t 0 -w 800 -h 600 -fps 16 -g 5 -b 1000000 -vf -p 20,20,640,480 -n -o - | gst-launch-1.0 --gst-debug=3 fdsrc ! h264parse ! gdppay ! udpsink host=192.168.11.12 port=3000
發送到windows:
raspivid -t 0 -w 800 -h 600 -fps 16 -g 5 -b 1000000 -vf -p 20,20,640,480 -n -o - | gst-launch-1.0 --gst-debug=3 fdsrc ! h264parse ! rtph264pay config-interval=2 ! udpsink host=192.168.11.36 port=3000
server:
linux:
gst-launch-1.0 udpsrc port=3000 ! fdsink fd=2
windows:
gst-launch-1.0 udpsrc port=3000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
rtsp-server:
linux :
./test-launch "( udpsrc port=3000 ! gdpdepay ! rtph264pay name=pay0 pt=96 )"
windows:
./test-launch --gst-debug=3 "( udpsrc port=3000 ! application/x-rtp,payload=96 ! rtpjitterbuffer ! rtph264depay ! h264parse ! rtph264pay name=pay0 pt=96 )"
需要注意:
在udp的模式下,無論有沒有開啟rtsp-server,在data-client端都將耗費流量進行數據的傳輸。
rtsp-server需要注意:
在linux下,必須在手機或者客戶端連接上rtsp的服務器端的時候,打開data-client才有效。
打開順序為 rtsp-server->rtsp-client->udpsink
而windows下不會如此