Versuchen Sie, eine Hardwarekamera mit einem Stream von einem Raspberry Pi/PiCam zu emulieren?

Versuchen Sie, eine Hardwarekamera mit einem Stream von einem Raspberry Pi/PiCam zu emulieren?

Ich habe einen Raspberry Pi und eine Pi Cam v2, die mit WLAN verbunden sind. Ich versuche, den Kamera-Feed über WLAN auf einen Laptop zu streamen und diesen Stream dann so aussehen zu lassen, als wäre er eine Hardware-Kamera auf dem Laptop. Ich möchte dies tun, um es in eine andere Software zu bekommen, die eine Hardware-Kamera erfordert (ich kann diese Software nicht umschreiben, muss einfach einen Umweg machen).

Auf meinem Laptop läuft Ubuntu 18.04. Meiner Recherche nach sollte dies mit einer Kombination aus ffmpeg und vfl2loopback durchaus möglich sein. Ich habe zunächst diese Bibliothek installiert, um die Kamera auf einen Webserver zu streamen:https://github.com/silvanmelchior/RPi_Cam_Web_InterfaceDas funktioniert und ich kann den Kamera-Stream in meinem Browser unterhttp://10.0.0.47/httpIch habe es der Einfachheit halber ohne Benutzername/Passwort eingerichtet. Ich glaube, der Kameraport ist 80, basierend auf der Nmap-Ausgabe.

Ich versuche jetzt, den Stream auf meinem Ubuntu-Laptop umzuleiten. Basierend auf meinen Recherchen und Experimenten komme ich dem am nächsten:

ffmpeg -re -ihttp://10.0.0.47/html-map 0:v -f v4l2 /dev/video0

(oder auch dasselbe mit Port 80 statt /html, nicht sicher, ob das wichtig ist): ffmpeg -re -ihttp://10.0.0.47:80-map 0:v -f v4l2 dev/video0

Dies scheint zunächst zu funktionieren, erzeugt dann aber den folgenden Fehler:

http://10.0.0.47:80: Bei der Verarbeitung der Eingabe wurden ungültige Daten gefunden

Beim Googeln kann es sein, dass dies an der falschen Art von Stream liegt, der aus der rpi_cam_web-Schnittstelle kommt, aber ich bin mir nicht sicher, ob das stimmt und wie man es beheben kann. Ich habe auch den HTML-Code der Seite untersucht, die auf den Webserver zugreift, und ich kann sehen, dass sie eine Reihe von JPGs sendet, die sich ständig ändern und Zeitstempel im Dateinamen enthalten. Vielleicht ist das also das Problem, aber ich bin mir auch hier nicht sicher.

Irgendwelche Ideen? Hilfe wäre sehr willkommen.

Bearbeiten: Ich habe eine andere Methode ausprobiert, die etwas weiter zu kommen scheint, aber ich stoße immer noch auf Probleme:

(auf dem Pi): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

-->dadurch wird ein Stream gestartet, den ich erfolgreich im VLC Media Player anzeigen kann

(dann auf dem Hostsystem): gst-launch-1.0 -v rtspsrc location=rtsp://10.0.0.47:8000/ ! v4l2sink device=/dev/video4

Ich habe verschiedene Geräte ausprobiert, etwa /dev/video0, /dev/video1 usw. Sie alle geben die Meldung „„/dev/videoX“ ist kein Ausgabegerät“ aus, mit Ausnahme von video4, das zunächst zu funktionieren scheint, dann aber die folgende Fehlermeldung ausgibt:

FEHLER: von Element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: Interner Datenstromfehler. Zusätzliche Debuginformationen: gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: Streaming gestoppt, Grund nicht verknüpft (-1) Ausführung beendet nach 0:00:00.082360368

Irgendeine Idee, was da schief laufen könnte?

Danke noch einmal!

Bearbeitung 2:

Mit der folgenden Befehlsfolge kann ich es möglicherweise zum Laufen bringen:

(auf Pi): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264

(auf dem Hostcomputer): ffmpeg -f h264 -i tcp://10.0.0.47:8000/ -f v4l2 -pix_fmt yuv420p /dev/video0

Dies wirft keine Fehler, aber ich bin nicht 100 % sicher, ob es funktioniert, da ich den Stream noch nicht in die Software laden konnte, in die ich versuche, den Kamera-Feed zu übertragen. Ich habe versucht, es mit diesem Website-Tool zu testen:

https://test.webrtc.org/

und das Tool erlaubt mir, „Dummy-Videogerät 0x0000“ auszuwählen, was ich ziemlich sicher bin, aber dann sagt es mir „kein Videogerät erkannt“, findet bei seinen Tests keine Kamera und dann wird dasselbe Dummy-Videogerät bei nachfolgenden Seitenneuladungen nicht als Option angezeigt. Ich denke also, dass etwas falsch daran ist, wie ich den Stream weiterleite

Antwort1

Diese Website zeigt, wie man RPi zu OBS streamt: https://www.instructables.com/Webcam-Over-WiFi-for-OBS/

Dann könnten Sie OBS Virtual Camera verwenden, um eine Hardwarekamera zu simulieren.

(Ich persönlich verwende die OBS Virtual Camera, habe sie aber nicht mit RPi verwendet.)

Alternativ könnten Sie Folgendes versuchen: https://www.tomshardware.com/uk/how-to/use-raspberry-pi-as-pc-webcam

verwandte Informationen