Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Gstreamer to serve RTSP stream, working example sought

Tags:

We are trying to get Gstreamer working on a DM368 Leopardboard*, we've successfully persuaded it to create a test video (videotestsrc), encode it, and dump it into a file.

The pipe that worked is:

gst-launch -v videotestsrc num-buffers=100 ! queue ! ffenc_mpeg4 bitrate=800000 ! ffmux_mp4 ! filesink location=video_test.mp4 

The next step is to modify the pipe to stream the testcard over the network, to be viewed on a PC with VLC using something like rtsp://ip_addr:port/streamname but the documentation on how to do this seems quite thin on the ground (and often outdated), and the examples seem to blur source code and command line ways of doing it.

I'll freely admit that >50% of the problem is our lack of familiarity with Gstreamer & its various parts, I've always found that if I have a working example to start from I can poke it with sticks and work out the rest from there.

I've got this far:

gst-launch -v videotestsrc ! queue ! ffenc_mpeg4 bitrate=800000 ! rtpmp4vpay ! tcpserversink host=<PC_ip> port=5000 

Which seems to make something happen in VLC (using tcp://board_ip:port)- it seems to think there's something going on (doesn't throw an error) but doesn't play/show anything. When I break (^C) the gst process, VLC notices.

So, basically - any guidance/feedback would be great, a working one-liner would be fantastic.

Edited to add: Yes I see the test_video.c example, but that's compiling a special program to do something which looks like it should be possible to just invoke from the command line to prove the concept.

* = Linux version 2.6.32-17-ridgerun /CPU: ARM926EJ-S 
like image 772
John U Avatar asked Dec 06 '12 13:12

John U


People also ask

Does GStreamer support rtsp?

GStreamer - ZED RTSP Server ZED RTSP Server is a GStreamer application for Linux operating system that allows to instantiate an RTSP server from a text launch pipeline using the “gst-launch” style.

What is GST rtsp server?

gst-rtsp-server is a library on top of GStreamer for building an real-time streaming protocol server (RTSP). RTSP is a presentation-layer protocol that lets you command media servers via pause and play capabilities, whereas RTP is the transport protocol used to move the data.

How do I stop rtsp stream?

node-rtsp-stream has been updated to node-rtsp-stream-es6. In the latter, there is a function . stop() that you can call to stop the streaming.


2 Answers

Source: In contradiction to RTP, a RTSP server negotiates the connection between a RTP-server and a client on demand (Link). The gst-rtsp-server is not a gstreamer plugin, but a library which can be used to implement your own RTSP application. The following test case was applied on a Ubuntu 12.04.5 machine:

  • Preliminars
    • Install gstreamer-1.0 with base/good/ugly/bad plugins
    • Install autoconf automake autopoint libtool and the other missing essential build tools
  • Build gst-rtsp-server
    • git clone git://anongit.freedesktop.org/gstreamer/gst-rtsp-server && cd gst-rtsp-server
    • We use gstreamer 1.2: git checkout remotes/origin/1.2
    • Build: ./autogen.sh --noconfigure && GST_PLUGINS_GOOD_DIR=$(pkg-config --variable=pluginsdir gstreamer-plugins-bad-1.0) ./configure && make (For some reason, GST_PLUGINS_GOOD_DIR is not set by pkg-config, so we set it explicitly)
  • Test run
    • Run test application: cd examples && ./test-launch "( videotestsrc ! x264enc ! rtph264pay name=pay0 pt=96 )"
    • One can now access the stream (e.g. using VLC) remotely by the address: rtsp://HOST_IP:8554/test
like image 188
Tik0 Avatar answered Oct 02 '22 09:10

Tik0


Finally found a working example here:

GStreamer rtp stream to vlc

But it does require creating an .SDP file for VLC and specifying IP addresses which is not really how we want to end up... but hey it's a start!

like image 23
John U Avatar answered Oct 02 '22 11:10

John U