Getested auf Ubuntu 16.04 und 18.04 LTS
apt update && apt upgrade -y && apt autoremove -y apt install gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-libav libgstreamer1.0-0 gstreamer1.0-tools
Dann baut man sich die einzelnen Teile der Pipe (am besten in einem Editor) zusammen.
Nachfolgend beispielhaft für ein Testsignal mit Stereo Ton, H.264 bzw. AAC encodiert zur lokalen Ausgabe als UDP Stream auf Port 5000:
Mux:
mpegtsmux name=mux ! udpsink host=127.0.0.1 port=5000
!Über das Flag „name=“ werden am Ende alle Teile zusammengefügt!
Video:
videotestsrc ! video/x-raw,width=1280,height=720 ! x264enc
Die videotestsrc ist eingebaut / kommt mit GStreamer
Audio:
audiotestsrc ! audioconvert ! audio/x-raw, channels=2 ! avenc_aac compliance=-2
Die audiotestsrc ist eingebaut / kommt mit GStreamer
Das Compliance Flag wird benötigt, da avenc_aac noch nicht als stabil markiert wurde.
Die verschiedenen installieren Plugins, Module, etc. von GStreamer bekommt man mittels gst-inspect-1.0 aufgelistet
Jetzt das Ganze zusammenfügen.
Sinngemäß stellt die Trennung zwischen zwei Ausdrücken mit einem „!“ eine Pipe da, sprich die Ausgabe wird immer zum nächsten Ausdruck weitergeleitet. Eine Trennung nur mit Leerzeichen (also ohne“!“) kann als nächster Parameter verstanden werden.
Also sinngemäß gst-launch-1.0 para1 para2 para3 wobei bspw. para1 == state1 ! state2 ! state ! … enthält.
Ergebnis:
gst-launch-1.0 mpegtsmux name=mux ! udpsink host=127.0.0.1 port=5000 videotestsrc ! video/x-raw,width=1280,height=720 ! x264enc ! mux. audiotestsrc ! audioconvert ! audio/x-raw, channels=2 ! avenc_aac compliance=-2 ! mux.
Den GStreamer nach Möglichkeit in einer Screen starten damit der Streamer nicht mit der SSH Session terminiert wird.