GStreamer rtp stream to vlc

93,524

Solution 1

I've solved the issue, it just needs an sdp file like this:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 MP4V-ES/90000

and the option "send-config=true" for the rtpmp4vpay element:

gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay send-config=true ! udpsink host=127.0.0.1 port=5000

and then, it can be played with

vlc <filename>.sdp

Solution 2

How to for H264 and new gstreamer (windows)

gst-launch-1.0 videotestsrc ! openh264enc ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5000

sdp file:

v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 H264/90000

for other codec see https://en.wikipedia.org/wiki/RTP_audio_video_profile and corresponding SDP example in RFC link

Solution 3

For some of you just check the answers, but not comments below the answers

For GStreamer 1.18.xxx. ffenc_mpeg4 was renamed to avenc_mpeg4(This confuses me alot) So try command:

gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay config-interval=1 ! udpsink host=127.0.0.1 port=5000

About VLC same as Dave's answer

Share:
93,524
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

    I'm having some trouble figuring out how to create a simple rtp stream with gstreamer and display it on vlc.

    I've installed GStreamer 0.10.30 and VLC 1.1.3. My only requirement is to use MPEG4 or H.264 codecs.

    Right now, I can stream the GStreamer videotestsrc through this simple pipeline:

    gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay ! udpsink host=127.0.0.1 port=5000
    

    which outputs the "caps" needed by the client to receive the stream:

    /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink: caps = application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d8800f50a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)365697461, clock-base=(uint)390754204, seqnum-base=(uint)10399
    

    I'm also able to display the stream using the following pipeline:

    gst-launch udpsrc uri=udp://127.0.0.1:5000 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1, config=(string)000001b001000001b58913000001000000012000c48d88007d0a041e1463000001b24c61766335322e3132332e30, payload=(int)96, ssrc=(uint)298758266, clock-base=(uint)3097828288, seqnum-base=(uint)63478" ! rtpmp4vdepay ! ffdec_mpeg4 ! autovideosink
    

    but when I try to receive the stream with vlc:

    vlc -vvv rtp://127.0.0.1:5000
    

    I get nothing...

  • Alex Bezuglyi
    Alex Bezuglyi over 8 years
    I've found how to write sdp file for any codec. See en.wikipedia.org/wiki/RTP_audio_video_profile then go to coresponding RFC link that have sample of SDP syntax
  • nayana
    nayana over 8 years
    You mistyped the port number, otherwise it is working - tested but with x264enc (on Linux).. good tip on the RFC
  • Einar Sundgren
    Einar Sundgren over 8 years
    This is the kind of behaviour that deserves multiple upvotes. The question was super relevant to me but without the self answer it would be kind of useless.
  • Einar Sundgren
    Einar Sundgren over 8 years
    Using gstreamer 1.0 the line should be gst-launch videotestsrc ! ffenc_mpeg4 ! rtpmp4vpay config-interval=3 ! udpsink host=127.0.0.1 port=5000 Where config-interval=3 is the interval in seconds sending the config data. send-config is now deprecated.
  • beemaster
    beemaster almost 8 years
    How to generate SDP file for MJPEG stream? rfc2435 seems too large. Also rtpjpegpay don't have option like send-config.
  • Adam Plocher
    Adam Plocher almost 8 years
    Since using 127.0.0.1 isn't clear, I just thought I would mention: in a multiple machine environment, this would be causing your client (VLC or whatever) to open an inbound port (so possibly firewall rules needed) and the stream would be sending to it. This solution isn't providing you with a way to easily have multiple VLC clients connect to a single endpoint. (that confused me a bit).
  • Adam Plocher
    Adam Plocher almost 8 years
    It will also require the server to define the outbound connection to each client - so no chance of having a URL that any client can connect to.
  • Jose V
    Jose V almost 6 years
    developer.ridgerun.com/wiki/index.php/… This was useful to me to figure out the parameters.
  • Roy Shilkrot
    Roy Shilkrot almost 6 years
    And the OSX equivalent: gst-launch-1.0 videotestsrc ! vtenc_h264 ! rtph264pay config-interval=10 pt=96 ! udpsink host=127.0.0.1 port=5000 (instead of openh264enc)