So streamen Sie Videos von der Raspberry Pi-Kamera und sehen sie sich live an

93

Ich bin neu in der Himbeer-Pi und sogar neu in der Himbeer-Pi-Kamera. Ich habe viele Online-Tutorials für die Raspberry Pi-Kamera gesehen, habe aber noch keine gefunden, mit denen ich direkt von der Raspberry Pi-Kamera streamen kann, wie Sie es mit einer Webcam können (mit SimpleCV oder OpenCV). Ich hatte gehofft, jemand könnte mich in die richtige Richtung lenken.

Angehender Ingenieur
quelle
hast du mjpgstreamer ausprobiert? Shell poste ich die Lösung?
Jaromrax
3
Personen, die nach einer Lösung ohne Latenz suchen, sollten raspberrypi.stackexchange.com/a/32521/30681
igaurav
Wenn Sie ssh und mpv haben: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25(das "--speed 2" verhindert, dass es zu sehr nacheilt).
Metamorphic

Antworten:

81

Die von Diego vorgeschlagene Lösung ist gut, mit der Ausnahme, dass sie ziemlich langsam ist und eine enorme Videoverzögerung aufweist, da der VLC dort einen Stream des Raspvid erneut streamt. Seit 12/2013 ist ein offizieller v4l2-Treiber verfügbar: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Dies macht das erwähnte Re-Streaming überflüssig. Laden Sie einfach das Modul und benutzen Sie es:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Dadurch wird ein http-Stream an Port 12345 erstellt. Sie können auch andere Formate verwenden, z. B. das rtcp-Format aus der Antwort von Diego. Lesen Sie hier mehr darüber: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/en/ch03.html

Lao
quelle
2
In dieser Antwort , ist es vorgeschlagen hinzufügen :demux=264zu CVLC weil der Strom RAW h264 ist , und Sie müssen die Demuxer festlegen: cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. So können Sie beispielsweise den Stream in VLC für Android ansehen.
Jaime M.
8
In dem bereitgestellten Link autoreconf -vfisolltest du jetzt./bootstrap.sh
JuJoDi
1
Gibt es eine Möglichkeit, das Video sowohl zu streamen als auch auf der RPi-SD-Karte zu speichern?
Oder Weinberger
4
Der Link videolan.org/doc/streaming-howto/en/ch03.html ist nicht mehr vorhanden.
Kal
4
Ich denke, es ist möglicherweise erwähnenswert / zu bestätigen, dass diese Methode in einer kopflosen Umgebung nicht funktioniert. Ich
Nick
41

Sie können zwischen mehreren Optionen wählen. Bei meiner Arbeit verwenden wir VLC, um mit Raspberry Pi Camera aufgenommene Videos von unseren Serverräumen ins Büro zu streamen . Ein Nachteil davon ist, dass es ungefähr 5 Sekunden Verzögerung gibt und ich keine Lösung dafür gefunden habe. Folgendes ist unser Setup:

  1. Haben Sie raspbian installiert und aktualisiert und stellen Sie sicher, dass Ihre Kamera aktiviert ist (Sie aktivieren dies, indem Sie sudo raspi-config ausführen und Kamera aktivieren wählen)

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Installieren Sie vlc

    sudo apt-get install vlc
    
  3. Erstellen Sie ein Skript, um den Stream mit dem folgenden Inhalt zu starten, oder führen Sie den Befehl aus (Sie können nichts anderes tun, wenn Sie nur den Befehl ausführen).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Machen Sie das Skript ausführbar

    sudo chmod +x myscript.sh
    
  5. Wenn Sie den Stream automatisch starten möchten, müssen Sie das Skript zu crontab hinzufügen. Damit dies funktioniert, musste ich ein weiteres von cron ausgeführtes Skript erstellen (OBS! VLC kann nicht als sudo ausgeführt werden, stellen Sie also sicher, dass Sie sich im richtigen cron befinden). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Dann:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Um den Videostream anzusehen, öffnen Sie VLC auf einem Computer im selben Netzwerk wie das Himbeer-Pi, das Sie für das Streaming verwenden. Drücken Sie Medien -> Öffnen Sie Networkstream und fügen Sie Folgendes in das Feld ein:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Wenn Sie sich nicht für FPS (Bilder pro Sekunde) interessieren und keine Verzögerung wünschen, können Sie MJPEG verwenden. Mehr dazu können Sie HIER lesen

Sehen Sie sich DIESES Wiki über das Raspberry Pi Camera Module an. Hoffe du findest was du suchst.

Diego
quelle
Irgendeine Idee, warum ich das folgende auf VLC auf Windows erhalten würde? Ihre Eingabe kann nicht geöffnet werden: VLC kann die MRL 'rtsp: //192.168.1.78: 8554' nicht öffnen. Überprüfen Sie das Protokoll auf Details. Die Pi-Seite scheint in Ordnung zu sein - keine Fehler und scheint auf den verbundenen Client zu reagieren?
Monojohnny
@monojohnny Ist die Himbeer-Pi-Streaming? Überprüfen Sie, ob das Video tatsächlich funktioniert, indem Sie einen Bildschirm anschließen. Wenn das Video funktioniert, sollte der Stream auf dem Bildschirm mit dem Himbeer-Pi verbunden sein.
Diego
@monojohnny Danke für das Schreiben Diego ... funktioniert einwandfrei beim ersten Versuch! monojohnny ... du musst das abschließende "/" setzen, sonst beschwert sich vlc. Versuchen Sie Folgendes: rtsp: //192.168.1.78: 8554 /
Sujay Phadke
Danke @Diego, das hat bei mir großartig funktioniert, aber wie kann ich meinen Stream beenden?
Denoteone
Ich habe das gleiche Problem unter Windows und kann das Video nicht von meinem Pi streamen. Angesichts dessen sehe ich das Video-Streaming von der Pi-Kamera auf einem Bildschirm, der mit dem Pi verbunden ist, aber nicht über VLC, das auf meinem Windows 10-PC installiert ist.
Mostafa
23

Ich habe einige Optionen ausprobiert. Mit diesem Projekt habe ich jedoch das beste Ergebnis erzielt : RPi-Cam-Web-Interface von der eLinux-Community

Der Stream hat fast keine Verzögerung.

Viel Glück :)

user2998302
quelle
4
Wenn Sie keine Latenz benötigen, überprüfen Sie dies auf jeden Fall. Requisiten an @ user2998302. Ich kann es nicht glauben, seit einem Jahr gibt es dazu keine Gegenstimmen.
Igaurav
Während dies eine schnelle und einfache Einrichtung ist, ist die Software alles andere als optimiert, so dass die Schnittstelle trotz ihrer geringen Latenz (keine Latenz von Null) sehr gesprächig ist und einige zusätzliche CPU-Zyklen benötigt. Kein Problem, wenn Sie nichts anderes
Nick
Das ist fantastisch!
Hamza Ouaghad
Das schnellste Web-Video-Streaming, das ich bisher getestet habe (auch nativer v4l2-Treiber, der über VLC gestreamt wurde), fast ohne Latenz. Es macht keinen Sinn, sich über die Optimierung zu beschweren, während jede Ressource im Internet in Bezug auf dieses Problem zu keinem besseren Ergebnis führt als diese Anwendung.
Gabber
woah, ich muss zugeben, dass dieser rockt!
L.Trabacchin
18

Der einfachste Weg, den ich gefunden habe, ist es, ein Live-Video von einem Himbeer-Pi ohne Kopf mit einer Himbeer-Pi-Kamera zu bekommen.

Diese Lösung ist sofort einsatzbereit, ohne dass zusätzliche Software auf dem PI installiert werden muss.

Auf dem PI:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

Auf dem Computer kann man mit VLC streamen:

vlc tcp/h264://192.168.66.154:3333

(unter der Annahme, dass 192.168.66.154 die IP-Adresse des PI ist)

Per Hansen
quelle
Willkommen bei Raspberry Pi! Wir raten im Allgemeinen davon ab, Ihre Antworten wörtlich von einer Frage zur nächsten zu kopieren. Wenn Sie 15 Wiederholungen erreicht haben, können Sie Fragen, die identisch sind, als "doppelt" kennzeichnen, sodass nur eine Kopie Ihrer Antwort vorhanden ist. Vielen Dank für Ihre Antwort auf das Problem!
Aurora0001
@Per Hansen Funktioniert nicht für mich ... Möglicherweise muss außer der Zuweisung eines Ports noch etwas anderes getan werden.
Amit Ray
Das funktioniert super! Mit einem RPi3B + und Raspbian 9.4 (stretch) kopflos.
Dparkar
5

Ich stellte eine mögliche Lösung in Himbeer - Forum unter Verwendung eines leichten RTSP - Server auf Basis LIVE555 , die mit einem V4L2 Treiber unterstützt H264 Erfassung zugeführt wird:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Als nächstes sollten Sie in der Lage sein, auf den RTSP-Stream zuzugreifen, indem Sie:

vlc rtsp://<raspberry>:8554/unicast
mpromonet
quelle
Was ist mit der Zeitverzögerung?
Kuhajeyan
kürzer als cvlc.
mpromonet
cmake beschwerte sich über "ALSA konnte nicht gefunden werden (fehlt: ALSA_LIBRARY ALSA_INCLUDE_DIR)", bis ich ein paar weitere Pakete für mein Projekt hinzufügte. Die Lösung ist in diesen: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (meine Vermutung ist, dass es hier ausreichen könnte).
MoonCactus
oh, und es funktioniert ziemlich gut (leichte Lösung), danke. Die Zeitverzögerung ist annehmbar, ungefähr 2 Sekunden, und sie ist im Vergleich zu anderen Lösungen imho günstig.
MoonCactus
@ MoonCactus: Ich glaube, ich habe die ALSA-Installation repariert (es wird nur libasound2-dev benötigt). Die Verzögerung sollte unter einer Sekunde liegen. Wenn Sie vlc verwenden, können Sie die Netzwerkpufferung mit--network-caching 300
mpromonet
4

UV4L unterstützt (auch) Standard-HTML5-Video- und -Audio- Streaming, ohne dass eine Konfiguration erforderlich ist. Andere Optionen sind ebenfalls möglich, wie MJPEG über http.

Aktualisieren:

UV4L unterstützt jetzt auch die Live- Übertragung von Audio und Video an Jitsi Meet Rooms über das Web. Es ist keine spezielle Konfiguration erforderlich. Es ist so einfach, wie Sie Ihren Namen, Ihr Zimmer und klicken Sie auf Start .

2. Update:

UV4L unterstützt jetzt auch H264-Hardware-codierte Videos mit Full-fps, HD und möglicherweise in Zukunft auch Full-HD.

prinxis
quelle
1
Die einzige Sache ist, dass du nur den Elementarstrom bekommen kannst, den so ziemlich alles NICHT versteht. Traurigerweise nicht viel. Sie brauchen etwas, um WebRTC auszustrahlen (was Sie mit UV4L tun können, wenn Sie einen Pi2 und später haben. Wenn Sie (aufgrund von Leistungs- / Größenbeschränkungen) eine Null brauchen, um dies zu tun, ist Ihr SOL.
Svartalf
3

Beide mjpeg_streamerund motionscheinen eine bessere Latenz zu haben als cvlc.

Verwenden mjpg_streamer

mjpeg_streamer Kompilierung erforderlich, aber die Anweisungen auf dem Github sind unkompliziert.

Nach dem Kompilieren kann es durch Starten start.shaus dem Projektverzeichnis oder durch direktes Ausführen (im Projektverzeichnis) ausgeführt werden:

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

Wo 8090ist der TCP-Port? Wenn nicht angegeben, 8080wird standardmäßig der Port verwendet. Das start.shSkript enthält einige Verwendungsbeispiele mit zusätzlichen Optionen.

Verwenden motion

Motion enthält einen systemd-Dienst, der den automatischen Start beim Booten, Stoppen oder Neustarten erleichtert.

Um es im IP-Webcam-Modus zu verwenden, sollten folgende Einstellungen vorgenommen werden /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Als nächstes im /etc/default/motionSet:

start_motion_daemon=yes

So starten Sie den Dienst automatisch beim Booten:

systemctl enable motion

Verwenden Sie systemctl start/stop/restart motionfür die entsprechende Aktion.

Der Standard-Streaming-Port ist 8081. Der Port ist unter stream_portin eingestellt /etc/motion/motion.conf.

ccpizza
quelle
1

Ich weiß nicht, ob Sie nach einer Überwachungssoftware suchen, aber es ist mir gelungen motion, einen Software-Bewegungsmelder zu installieren und auszuführen. Sie sollten einen Blick in die offizielle Anleitung werfen .

Morgan Courbet
quelle
Bewegung gilt nur für USB-Kameras
Genorama
3
@geneorama motion verwendet die video4linux-Schnittstelle, die nicht auf die USB-Kamera beschränkt ist. Das bcm2835-v4l2-Modul ermöglicht über diese Schnittstelle den Zugriff auf die Kamerakarte.
Mpromonet
1

Ich konnte Videos mit uv4l WebRTC auf Raspberry Pi 2 streamen . Es ist super einfach. Folgen Sie einfach diesem Tutorial. Ich hoffe diese Hilfe.

bdsys
quelle
Bitte fügen Sie hier relevante Teile des Tutorials ein, um ein Verrotten des Links zu verhindern.
Bex,
Gilt nur für Pi2 und höher. Funktioniert nicht mit 1A / 1A + / Zero. Ich bin mir nicht ganz sicher, warum er das nicht kann, da die Leute es zu können scheinen, aber hey ...
Svartalf
1

Ich hatte Probleme, den Videostream unter Windows 7 abzurufen. Es gab viele Linux-Lösungen, aber ich konnte sie bis jetzt nicht unter Windows replizieren. Ich habe irgendwann eine ziemlich schnelle Lösung:

  1. Holen Sie sich eine Windows-Version von Netcat: http://joncraton.org/files/nc111nt.zip , entpacken Sie es und fügen Sie es dem Pfad hinzu
  2. Besorgen Sie sich eine neue Version von mpc-hc, die möglicherweise von stdin gelesen wird: https://mpc-hc.org/downloads/ install und fügen Sie den Pfad ebenfalls dem Pfad hinzu (meine 64-Bit- Version , 32-Bit- Version ist hoffentlich ausreichend) auch)

Auf Himbeer-Pi:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

Auf Windows-Maschine:

nc -l -p 5001 | mpc-hc64 -

Ich denke also, nichts wird neu gepackt oder gestreamt, remuxt oder was auch immer. Binärer Stream von Raspvid wird in MPC eingespeist und angezeigt. Meine Himbeere funktioniert über WLAN, also bekomme ich zuerst eine angemessene Verzögerung, die sich in einer halben Minute auf diese 0,2-0,3 Sekunden Verzögerung reduziert.

Leider konnte ich vlc nicht auf die gleiche Weise verwenden, da nc -l -p 5001 | vlc -nur das vlc-Fenster ohne Video geöffnet wird.

Grigory Makeev
quelle
1

Ich habe Nginx mit RTMP-Unterstützung für das Streamen in die Welt und avconv für die Verarbeitung von Kameraeingaben verwendet. Code ist auf Github verfügbar .

TTT
quelle
Gut, würdest du etwas über die zeitliche Verzögerung von Videoerfahrungen erzählen?
Kuhajeyan
2
Ja, es gab eine Verzögerung von ungefähr 5 Sekunden.
TTT
0

Während der Code von Peter Hansen möglicherweise in einem LAN einwandfrei funktioniert, geht es der Vollständigkeit halber bei TCP um Datenintegrität im Gegensatz zu Echtzeit. In einem Echtzeitstrom kann ein gewisser Datenverlust zum Zwecke der rechtzeitigen Anzeige akzeptabel sein. In diesem Fall ist UDP möglicherweise besser. Ich habe diesen Code nicht getestet.

Wenn es sich um eine Überwachungskamera handelt, kann Multicasting in Betracht gezogen werden. Moderne Router können es sogar mit den 100-Dollar-Modellen.

Rechnung
quelle
0

Ich habe eine ONVIF- Lösung von https://github.com/BreeeZe/rpos auf meinem Pi installiert. Befolgen Sie dazu die Anweisungen auf README.md .

Der einzige Unterschied ist, dass ich installiert habe node v8.4.0. Auf diese Weise kann ich die Ausgabe meiner Kamera in einem NVR sehen, der mit demselben Netzwerk verbunden ist. Die Kamera kann auch direkt über den Netzwerk-Stream des VLC-Players unter Verwendung der Adresse wiedergegeben werdenrtsp://192.168.1.3:8554/h264

KrIsHnA
quelle
0

Eine Weile später gab es ein ähnliches Problem:

https://www.npmjs.com/package/ws-avc-player

Es ist mehr Barebone als andere vorgeschlagene Lösungen, aber ich denke, es funktioniert gut, wenn eine geringe Latenz gegenüber dem Web die Priorität hat.

Funktioniert auf den meisten Browsern (sogar mobil mit 480p), ohne dass Plugins für den Browser benötigt werden.

MatijaG
quelle
Ich schrieb nicht der Decoder selbst, sein ein separates Projekt github.com/mbebenita/Broadway jedoch überraschend gut optimiert ist, und wie ich in der Antwort gesagt kann es easly eine 480p auf einem Droiden behandeln. Der Grund, warum ich mich für Brodway entschieden habe, ist, dass es auf rpi keinen vp8 / 9-Hardware-Encoder gibt, so dass h264 wirklich die einzig vernünftige Option ist. Wenn Sie jedoch einen nativen h264-Decoder im Browser verwenden möchten, können Sie die geringe Latenz vergessen.
MatijaG
Es klingt so unglaublich, dass ich es versuchen muss.
Kwasmich
Jedes Feedback wird sehr willkommen sein :)
MatijaG
Erst jetzt hatte ich etwas Freizeit. Ich habe Probleme, das Beispiel mit dem raspividKamera-Feed zum Laufen zu bringen . Mit ffmpegauf der anderen Seite bin immer ich gerade Zehntel Frames pro Sekunde. Ich habe einen sauberen Raspbian und einen Pi Zero verwendet. Hast du ein paar Tipps für mich?
Kwasmich
Ja, mit ffmpeg wird es wegen mangelnder Hardwarebeschleunigung kein Problem sein. Versuchen Sie das Beispiel mit: node example/index.js raspividEs sollte sofort funktionieren, wenn Sie Probleme haben, versuchen Sie es einfach node example/index.jsund separat /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000und prüfen Sie, ob Sie irgendwelche Fehler von raspivid bekommen
MatijaG