Ich bin neu in gstreamer, und ich möchte Webcam-Video über das Netzwerk mit mpeg2-ts streamen. Ich bin in der Lage, Video mit der folgenden Pipeline zu streamen, aber ich weiß nicht, wie man es mit mpeg2-ts unter Verwendung mpegmux
streamen kann. Jede Hilfe wäre großartig! Vielen Dank.Wie man Webcam-Streaming mit mpegtsmux in Gstreamer
Mein Arbeits pipline (ohne mpegmux
):
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 speed-preset=fast tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! rtph264pay pt=96 \
! udpsink host=localhost port=5000
// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! rtph264depay \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
I wie unten einige Methoden versucht haben, aber immer noch nicht daran zu arbeiten. Absender gibt Fehler "konnte Mux mit rtph264pay nicht verbinden" und Empfänger gibt "konnte Mux mit udpsrc nicht verbinden".
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 speed-preset=fast tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! rtph264pay pt=96 \
! mpegtsmux name=mux mux. \
! udpsink host=localhost port=5000
// Reveiver
gst-launch-1.0 -ve udpsrc port=5000 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! tsdemux name=demux demux.video_00 \
! rtph264depay \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
Beachten Sie, dass, ich benutze tsdemux
statt mpegtsdemux
im Empfänger, da gibt er ‚kein Element‚mpegtsdemux‘‘. Allerdings habe ich, wenn der Typ $ gst-inspect-1.0 mpegtsdemux
druckt:
Plugin Details:
Name mpegtsdemux
Description MPEG TS demuxer
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstmpegtsdemux.so
Version 1.2.4
License unknown
Source module gst-plugins-bad
Source release date 2014-04-18
Binary package GStreamer Bad Plugins (Ubuntu)
Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-bad1.0
tsdemux: MPEG transport stream demuxer
tsparse: MPEG transport stream parser
2 features:
+-- 2 elements
Ich habe keine Ahnung, warum gst-Start-1.0 nicht mpegtsdemux
finden.
EDIT: Dank @otopolsky, ich habe eine funktionierende Pipeline herausgefunden (siehe unten). Und auch, er/sie hat recht damit, keine Kappen im Empfänger zu verwenden, wenn tsparse
vor tsdemux
platziert wird.
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! mpegtsmux \
! udpsink host=localhost port=5000
// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! tsparse \
! tsdemux \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
Nur noch ein paar Fragen:
- Warum brauche ich nicht
rtpmp2tdepay
in der Empfängerseite hinzufügen? (Wenn ich es irgendwo in der Pipeline hinzufüge, wird die "Konnte nicht rtpmp2tdepay mit xx verknüpfen" generiert werden.) - Die Qualität des Streaming-Videos wäre schlechter als die ohne Verwendung von
mpegtsmux
. Warum das? Liegt es daran, dass mpeg2-ts verwendet wird? Gibt es Tipps zur Verbesserung der Streaming-Qualität?
zum Update, 1, nicht ganz sicher, ich habe personaly große Lücken in Verständnis der Parse/Pay/Depay Sachen .. aber ich denke, die Pakete bereits 188 Bytes enthält jede (die MPEG-TS-Paket Größe), die dann nicht depayloaded sein muss (wie es 1: 1 ist) .. Ich weiß nicht, wie es ist, dass Sie den Depay nirgends setzen können. Überprüfen Sie die Kappen von src/sink mit 'gst-inspect-1.0 Element' .. 2, um die Qualität .. Ich denke, die Verarbeitung ist irgendwie anders - sehr niedrige Qualität wird mit Nullelast erreicht, so dass dies möglicherweise verursacht dies ..Wie wäre es mit dem Entfernen der Null-Latenz und dem Hinzufügen einer schönen Geschwindigkeits-Voreinstellung? – nayana
Danke für Ihre Erklärungen. Was die Qualität anbelangt, so wird das Setzen von 'speed-preset' auf einen Wert unter 'ultrafast' (der die gleiche Qualität wie die Null-last hat) dazu führen, dass das Streaming auf meinem Gerät sehr verzögert wird. – j0e1in
Durch Entfernen von 'rtpmp2tpay' im Absender ist die Videoqualität jetzt viel besser. Es scheint überflüssig zu sein. – j0e1in