Aufnahme h.264-stream von der Kamera mit Gstreamer
Ich versuche zu erfassen H264-stream von lokal installierten Logitech C920 Kamera aus /dev/video0
mit Gstreamer 1.0
v4l2src
element.
v4l2-ctl --list-formats
zeigt, dass die Kamera ist in der Lage zu geben H264 video-format:
# v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
...
Index : 1
Type : Video Capture
Pixel Format: 'H264' (compressed)
Name : H.264
...
Aber pipeline
# gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! fakesink
gibt mir immer not-negotiated (-4)
Fehler:
/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2809): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-negotiated (-4)
Execution ended after 67687169 ns.
Jede Hilfe!!!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist gstreamer-obligatorisch für Ihre Bedürfnisse? Ich habe auch viel von Problemen mit der Logitech C920 im H264 Modus und gstreamer. Aber ich schaffte es zu verwenden VLC als RTSP-server zur Verwendung der C920 mit H264:
Dann kann ich eine Verbindung mit einem anderen VLC auf den rtsp-URI://localhost:8554/live
Wenn GStreamer ist obligatorisch für Sie, es gelang mir nur mit einem capture-Dienstprogramm, das können Sie hier finden: https://github.com/csete/bonecam - Verzeichnis "capture"
Sie haben, um es zu kompilieren, aber wenn Sie einige Programmierkenntnisse, es soll sehr einfach sein, da es nur eine C-Datei und ein Skript, um zu helfen. Geben Sie einfach "host" als parameter an das Skript :
Können Sie die "capture" - Programm mit sowas :
Wenn Sie nicht möchten geben Sie die Anzahl von frame zu erhalten ("-c" - parameter mit "capture"), gibt es eine Gabel, um dieses Dienstprogramm finden Sie hier: https://github.com/DeLaGuardo/bonecam
Ich weiß, es ist ein plugin, kategorisiert als "schlecht", rief uvch264 für gstreamer 0.10, das sollte funktionieren mit der C920. Aber ich weiß nicht, für gstreamer 1.0, und ich konnte es nicht testen.
UPD:
Vergessen Sie nicht, fügen Sie
--rtsp-timeout=-1
zucvlc
Befehlszeile wieOhne diese option streaming nur dauert 60 Sekunden standardmäßig.
cvlc
funktioniert wie ein Charme! Ich verwende es auf Rasperry Pi.Habe ich versucht, das gleiche zu tun, und ich habe den gleichen Fehler. Ich glaube, ich war mit GStreamer 1.0.6.
Was ich gefunden habe, vielleicht auch Dank Fergal Butler ' s Antwort war die folgende Seite:
http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/
Hier Youness Alaoui beschreibt die uvch264_src element machte er zu bringen H264-Kamera-Unterstützung für GStreamer.
Er beschreibt den port, auf GStreamer 1.0 als "ausstehend" in seinem Artikel. So im Laufe der letzten Woche habe ich gesucht, in dieser. Es stellt sich heraus, dass es hat jetzt portiert wurde GStreamer 1.0, aber nur in einem Entwickler-release (Version 1.1.2).
Erhalten Sie version 1.1.2 hier:
http://gstreamer.freedesktop.org/src/
Es heißt "uvch264src" jetzt, und es ist ein Teil des gst-plugins-bad. Ich denke, es ist auch vorhanden in der version 1.1.1, aber ich habe nicht wirklich sah in das.
Hatte ich ein bisschen eine harte Zeit, es installiert, ich glaube, vor allem wegen der Konflikte mit GST-1.0 Pakete installiert auf meinem PC (also meine eigene Schuld). Aber beachten Sie, dass Abhängigkeiten von libgudev-1.0-dev und libusb-1.0-0-dev so installieren Sie diese Pakete zuerst - es dauerte eine Weile, bis Arbeit heraus, es war die zwei, die mir fehlte.
Hier ist eine pipeline, die ich habe zu arbeiten, die verwendet uvch264:
gst-launch-1.0 uvch264src device=/dev/video0 name=src auto-start=true src.vfsrc ! video/x-raw, format=YUY2, width=160, height=90, framerate=5/1 ! xvimagesink src.vidsrc ! queue ! video/x-h264, width=800, height=448, framerate=30/1 ! h264parse ! avdec_h264 ! xvimagesink
Wenn Sie nicht möchten, verwenden Sie das Vorschau-video (von der vfsrc pad) einfach den Haken src.vfsrc geradeaus bis zu einer fakesink. Ich sollte auch erwähnen, dass, obwohl diese pipeline ist für mich arbeiten, bekomme ich eine Menge Warnungen über "Bekam Datenfluss-vor-segment-Ereignis". So offensichtlich bin ich nicht etwas Recht, aber ich bin mir nicht sicher, was.
Sowieso, nach all dem Durcheinander zu bekommen, 1.1.2 und uvch264src komplett installiert und funktioniert, habe ich beschlossen, v4l2src eine schnelle wieder gehen. Und es stellt sich heraus, dass v4l2src unterstützt H264 richtig, nachdem alle :/. (Siehe die kurze Antwort.)
Kurze Antwort:
Also die kurze Antwort auf Ihre Frage ist, dass, wenn Sie glücklich sind, zu installieren 1.1.2 von der Quelle, du wirst in der Lage sein, genau das zu tun, was Sie wollen, in der gleichen Weise, wie Sie versucht haben, es zu tun. Sie sollten nicht brauchen, uvch264src. Ich habe getestet, Ihre pipeline und es funktionierte mit meiner installation. Ich habe auch versucht diese einfache pipeline, um die Anzeige der video-on-Bildschirm, und es funktionierte gut für mich:
gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! avdec_h264 ! xvimagesink sync=false
Ich glaube nicht, dass v4l2src unterstützt h264 im moment. Siehe hier:
http://www.oz9aec.net/index.php/gstreamer/473-using-the-logitech-c920-webcam-with-gstreamer
und hier:
http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/
Versuchen, videoconvert für Sie automatisch konvertieren Sie das video in ein format verstanden, das von der video sink
Ich habe auch eine Logitech C920 Kamera und haben die folgende pipeline zum aufzeichnen von H. 264-video von der Kamera:
Diese bittet, die Kamera zu produzieren, die H. 264-Daten, die ich dann mux in ein MPEG transport stream container, und auf die Platte schreiben. Ich kann die resultierende Datei erfolgreich mit Totem.
Den oben genannten pipeline-Aufzeichnungen in 720p. Die Kamera kann auch aufzeichnen in 1080p, wenn Sie ändern Sie die angeforderten format zu
width=1920,height=1080
.