Raspberry Pi Low-Latency Stream with GStreamer
waymond91
waymond91 at gmail.com
Thu Oct 26 06:52:24 UTC 2017
Hello All!
I am trying to setup a raspberry pi as a low latency network camera (max.
latency 200ms).
In an ideal world, the raspberry pi would read the camera, send it over wifi
to a host pc.
This host PC would both display the video stream and save it to a file.
A key aspect that I am really struggling with is:
I would like the displayed image to be saved to a file that included a
timestamp of when an individual frame was actually displayed.
That being said, this is my first time doing any video processing
whatsoever.
I was able to find and build a gstreamer source for the pi camera from the
git repository here:
https://github.com/thaytan/gst-rpicamsrc
This seems to work. With the raspberry pi I am able to start a network
pipeline with the following command:
*$ gst-launch-1.0 rpicamsrc bitrate=1000000 \
! 'video/x-h264,width=640,height=480' \
! h264parse \
! queue \
! rtph264pay config-interval=1 pt=96 \
! gdppay \
! udpsink host=[MY IP] port=5000*
And on my host PC I can display a live stream with about 150mS latency with:
*$ gst-launch-1.0 udpsrc port=5000 \
! gdpdepay \
! rtph264depay \
! avdec_h264 \
! videoconvert \
! autovideosink sync=false*
Or save the stream with:
*$ gst-launch-1.0 udpsrc port=5000 \
! gdpdepay \
! rtph264depay \
! avdec_h264 \
! videoconvert \
! filesink location=video.h264*
So I am beginning to feel like I am on track.
Ultimately, however, I feel like I need to decode the h264 into some other
format (MP4?) so that I can actually start displaying and saving individual
frames and associating them with the current time (or at the least the time
between frames).
At the very least, I would like to be able to save and display the h264
stream with one pipeline.
On my host side, I have tried a tee element like so:
*$ gst-launch-1.0 udpsrc port=5000 \
! gdpdepay \
! rtph264depay \
! avdec_h264 \
! videoconvert \
! tee name = t \
t. ! autovideosink sync=false \
t. ! filesink location=tee.h264*
However, the video stream freezes up shortly after initialization. Any ideas
of how I can fix this?
Any ideas of how I can save the decoded, displayed frames and the time it
was displayed? I don't mind doing a little post-processing to get this lined
up correctly :P
Any ideas on how to cut latency?
Thanks again for the help!
PS Sorry I couldn't get code tags to work...
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
More information about the gstreamer-devel
mailing list