Ich habe eine Logitech C920 Webcam. Es hat die Fähigkeit, das Video in H264 direkt zu kodieren.
Ich möchte reproduzieren, was mit einem Beaglebone gemacht wurde, aber mit einem Raspberry Pi: Senden Sie einen H264-Stream an das Netzwerk . Der Raspberry Pi ist dann nur hier, um den Stream in RTP zu paketieren, die Videokomprimierung erfolgt durch die Webcam selbst. Der H264-Modus wird mit video4linux erzwungen.
Bisher und wenn ich einen gemeinsamen Computer mit der neuesten Version von Ubuntu verwende, funktioniert dies mit VLC als Server oder GStreamer. Wenn ich zum Beispiel auf Raspberry Pi einen VLC-Server mit dem folgenden Befehl starte:
cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'
... und wenn ich dann den Stream mit VLC auf einem anderen Computer lese, ist alles in Ordnung.
Wenn ich jedoch den Himbeer-Pi zum Senden des Videostreams verwende, ist das Ergebnis ziemlich schlecht. Viel Müll im Bild, sobald sich etwas bewegt. Image-Keys werden alle 10 Sekunden gut empfangen, aber in der Zwischenzeit ist es im Vergleich zum Stream von einem normalen Computer nicht gut genug.
Ich habe auch die für das Beaglebone beschriebene Methode mit dem mitgelieferten "Capture" -Dienstprogramm ausprobiert : ok, wenn ich von einem echten Computer streame , dasselbe Müllproblem, wenn ich von einem Raspberry Pi streame.
Es ist kein Netzwerkproblem: Ich habe einige Netzwerkprüfungen mit Wireshark und den Statistiken von VLC durchgeführt, es ist kein Paketverlust aufgetreten. Ich habe es mit Raspbian und Arch Linux für Raspi versucht (gstreamer 0.10 in raspbian, gstreamer 1.0 in Arch Linux).
Ich weiß nicht, ob es relevant ist oder nicht, aber ich habe es auch mit der Soft-Float-Support-Version von Raspbian getestet. Um einen 3.2-Kernel zu verwenden, muss zuerst ein Update durchgeführt werden. aber das gleiche problem, das video hat etwas müll.
Irgendeine Idee, was ich tun könnte, um die Videoqualität zu verbessern?
quelle
Antworten:
Ich hatte das gleiche Problem, fand diesen Thread bei der Suche nach einem Hardware-Encoder, nicht bei c920-Problemen.
Führen Sie dennoch ein Firmware-Update für den Himbeer-Pi durch und der Müll sollte verschwunden sein
$> sudo rpi-update
Ich selbst habe die Lösung hier gefunden: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi
quelle
Sie können FFMPEG ausprobieren und verwenden. Das Problem ist jedoch, die Repository-Version nicht zu verwenden, da sie veraltet ist. Es gibt eine gegabelte Version, die sehr gut funktioniert.
Sie müssen es kompilieren, was ungefähr 5 Stunden dauert, oder eine vorkompilierte Binärdatei herunterladen.
Mit diesen Einstellungen können Sie die Daten vom V4L-Treiber an FFMPEG leiten. Wo das
-i "fifo"
nur sein sollte, um-i
den Pipe-Stream zu erfassen und-f
zu überprüfen, wie der H264 ausgegeben wird. Das FLV packt es erneut in das FLV, das mit HTML-Playern abgespielt werden kann.oder ein Beispiel Ich fand, dass Ziele V4L direkt, aber oyu muss die Kamera vorhanden sein, in der
/dev/video*
* ist1
oder mehr ...Das gibt
-f
das Format an, in dem die Ausgabe erfolgen soll. Das bedeutet nicht, dass es wie H264 in FLV transkodiert wird, sondern nur in das FLV-Format gewickelt wird. Ändern Sie dann die Adresse des VLC-Players Ihres Kunden. beispielsweise-f mpegts udp:192.168.1.19:1234
VLC scheint auf dem Pi nicht allzu gut zu funktionieren. Ich hatte sehr wenig Erfolg damit, das Pi cmaera-Modul über UDP auf meinen PC zu übertragen. Es hat funktioniert, aber es war nicht stabil.
Sie können sich auch ansehen, wie Sie nginx mit dem rtmp-Modul installieren, das ein Vergnügen ist. Schauen Sie sich diese Anleitung an, aber Sie müssen die Einstellungen etwas anpassen. Sie verbinden dann Ihren VLC-Player mit dem nginx-rtmp-Stream und es wird wie ein Zauber funktionieren.
quelle
Das scheint bei mir am wenigsten zu funktionieren ...
cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy
quelle
Versuchen Sie es mit einem größeren Puffer auf dem Client, der das Video anzeigt. Für mich gibt es dramatische Unterschiede zwischen 1000ms Buffer und 200ms Buffer. 5000ms Buffer sieht besser aus als 1000ms Buffer.
: Network-Caching = 2000
quelle
Ich habe im Himbeerforum eine mögliche Lösung veröffentlicht , die einen leichten RTSP-Server auf der Basis von live555 verwendet , der H264 von einem V4L2-Treiber aufzeichnet. Es ist über github h264_v4l2_rtspserver verfügbar
Dies wurde für die Raspikamera gemacht, sollte aber mit jedem V4L2-Gerät funktionieren, das H264 bietet.
quelle
Wenn ich Ihre Situation gut verstanden habe, möchten Sie, dass Raspberry Videos in H264 umcodiert? Ich denke, das ist der Grund, warum Sie schlechte Leistung erhalten, weil VLC Software-Codierung verwendet und Raspberry für diese Aufgabe nicht leistungsfähig ist.
Ich würde vorschlagen, es mit Gstreamer und
gst-omx
Plugins zu versuchen . Es gibt ein Element für die Hardware-Videokodierung, das einen guten Server aus Ihrer Himbeere machen würde.quelle