I'm trying to stream webcam video from a Raspberry to a VLC player using gstreamer 1.0. Right now i got the following command for the Raspberry:
gst-launch-1.0 -vv -e v4l2src device=/dev/video0 \
! videoscale \
! "video/x-raw,width=352,height=288,framerate=10/1" \
! queue \
! x264enc \
! h264parse \
! rtph264pay config-interval=10 pt=96 \
! udpsink host=239.255.12.42 port=5004
And the following sdp file to play the stream with vlc:
c=IN IP4 239.255.12.42
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
When i run the gst-launch-1.0 command i can see with wireshark that it is sending udp packets but when i try to play the stream with vlc and the sdp file i get nothing. The vlc log says:
es error: cannot peek
es error: cannot peek
live555 error: no data received in 10s, aborting
I don't know what's wrong. I probably have'nt build the pipeline properly and that's why the vlc does not recognize the stream as a proper video stream. Any ideas?
Thanks in advance for your help.
VLC understand ts stream combined with RTP protocol. The approach is to use rtp payloader after mpegtsmux which will payload the generated ts buffers (packets).
So instead of this:
You can do this:
And then use just
rtp://@:port
in vlc In this way the mpegtsmux will encapsulate information about what streams does it containsI should note that your approach is not incorrect, and could be even more effective (mpegtsmux will slice video into 188 Byte packets, but your approach will slice into ~ 1400 Bytes udp packets), but you need to provide correct SDP file for vlc in order to stream it. For example like this but I do not have much experience with this..
So this is your current pipe which works:
You can maybe achieve better results when using zerolatency:
like this
x264enc tune=4
it will discard all other quality parameters like speed-preset etc..This is from docs about tune property: