2017-10-26 2 views
0

Also, ich fange mit gstreamer zu spielen, um und ich bin in der Lage sehr einfache Rohre zu tun, wieExtract h264 Stream von USB-Webcam (logitech C920)

gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-raw,format=YUY2,width=640,height=480,framerate=10/1 ! videoconvert ! autovideosink 

Jetzt, da mein USB-Webcam (Das ist video1, video0 ist die eingebaute Kamera des Computers) unterstützt h264 (ich habe überprüft mit lsusb), möchte ich versuchen, den h264-Feed direkt zu bekommen. Ich verstehe, dass dieses Futter im Mjpeg gemuxed ist, aber wenn man sich im Internet umschaut, scheint es, dass der Gstreamer es trotzdem bekommen kann.

Da mein Endziel des Streamings von einem BeagleBone ist, machte ich einen Versuch, die Lösung zu this post gegeben mit (einem Hörer von einem anderen Terminal hinzufügen):

#sender 
gst-launch-1.0 v4l2src device=/dev/video1 ! video/x-264,width=320,height=90,framerate=10/1 ! tcpserversink host=192.168.148.112 port=9999 

Aber dies ergibt die folgende Fehlermeldung:

WARNING: erroneous pipeline: could not link v4l2src0 to tcpserversink0 

ich habe auch versucht, etwas ähnliches zu meinem ersten Befehl, um die Quelle von rohen zu h264 Wechsel (basierend auf that post, da der vollständige Befehl versucht es die gleiche Fehlermeldung gibt)

gst-launch-1.0 -v v4l2src device=/dev/video1 ! video/x-h264,width=640,height=480,framerate=10/1 ! h264parse ! avdec_h264 ! autovideosink 

Aber auch dies hat nicht funktioniert entweder:

Setting pipeline to PAUSED ... 
Pipeline is live and does not need PREROLL ... 
Setting pipeline to PLAYING ... 
New clock: GstSystemClock 
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2948): gst_base_src_loop(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: 
streaming task paused, reason not-negotiated (-4) 
Execution ended after 0:00:00.036309961 
Setting pipeline to PAUSED ... 
Setting pipeline to READY ... 
Setting pipeline to NULL ... 
Freeing pipeline ... 

Ich gebe zu, das ist mir fahren ziemlich verrückt: Suche auf SO oder anderswo auf dem Netz, scheint es eine Menge Leute, die gemacht es funktioniert mit genau der gleichen Webcam wie die, die ich habe (Logitech C920), aber ich laufe immer wieder auf Probleme zu.

Was wäre ein Beispiel für eine korrekte Rohrleitung, um das h264 von dieser Webcam zu extrahieren?

Antwort

0

Sie müssen auf jeden Fall einen Payloader verwenden, bevor er auf die Leitung trifft. Zum Beispiel rtph264pay. Hier ist ein Beispiel, das nicht getestet werden kann, da ich Ihre Hardware nicht zur Verfügung habe. Ich habe udp Beispiele aus alternativen Quellen, wenn dies nicht in die richtige Richtung steuert.

Server

gst-launch v4l2src device=/dev/video1 \ 
! video/x-264,width=320,height=90,framerate=10/1 \ 
! x264enc \ 
! queue \ 
! rtph264pay, config-interval=3, pt=96, mtu=1500 \ 
! queue \ 
! tcpserversink host=127.0.0.1 port=9002 

Client

gst-launch tcpserversrc host=127.0.0.1 port=9002 \ 
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \ 
! rtph264depay \ 
! video/x-h264 \ 
! queue \ 
! ffdec_h264 \ 
! queue \ 
! xvimagesink 
Verwandte Themen