web-dev-qa-db-de.com

Wie streame ich Video von meiner USB-Webcam auf eine Remote-HTML-Seite?

Ich möchte ein Programm erstellen, das Video von meiner USB-Webcam über das Internet auf eine Webseite überträgt.

Derzeit verwende ich einen Webservice, der bei Aufruf fswebcam aufruft, um ein Bild zu erfassen, im Datenspeicher zu speichern, in Base64-Binärdatei zu konvertieren und diese Daten an die HTML-Seite zu senden, wo sie in das 'src'-Attribut von' img 'gerendert werden. Die HTML-Seite enthält JavaScript, das diesen Dienst einmal pro Sekunde aufruft.

Wie Sie feststellen können, ist dies ein schrecklicher Weg. Ich hätte lieber einen richtigen Stream, wenn ich kann. Ich weiß jedoch nicht, welche Technologien dafür verfügbar sind.

Der Webservice ist in nodeJS geschrieben. Der Server läuft auf einem Raspberry Pi 2. Ich habe diese Frage nicht in den Raspberry Pi forum gestellt, weil ich denke, dass es sich um ein allgemeines Linux/programming-Problem handelt. 

11
X0r0N

Der Artikel hier erklärt den gesamten Vorgang auf einfachste Weise mit Arbeitsbildern. Dies ist die Linux-Methode und kein node.js-Skript. Ich sage hier den Hauptteil davon.

  • Stellen Sie über die IP-Adresse eine Verbindung zu Ihrem Pi her. "pi" & "raspberry" ist die Standardeinstellung für "Anmelden als" und "Kennwort" in Raspbian.

  • Um das System zu aktualisieren, geben Sie nacheinander den Befehl Sudo apt-get update und Sudo apt-get upgrade ein.

  • Geben Sie den Befehl Sudo apt-get install motion ein, um die Installation zu starten.

  • Um sicherzustellen, dass die Kamera korrekt erkannt wird, geben Sie den Befehl lsusb ein und geben Sie ein. Sie sollten den Namen Ihrer Kamera sehen. Ist dies NICHT der Fall, liegt ein Problem mit Ihrer Kamera vor oder die Kamera wird bei "Bewegung" nicht unterstützt.

  • Geben Sie nach Abschluss der Installation den Befehl Sudo nano /etc/motion/motion.conf ein und drücken Sie die Eingabetaste.

  • Dann müssen Sie einige Einstellungen in der Datei .conf ändern. Es kann manchmal schwierig sein, die Einstellungen zu finden, aber zu verwenden Ctrl+W es zu finden. Also folge den Schritten:

    1. Stellen Sie sicher, dass der Dämon eingeschaltet ist.
    2. Stellen Sie die Framerate zwischen 1000 und 1500 ein.
    3. Behalten Sie 'Stream_port' für 8081 bei.
    4. 'Stream_quality' sollte 100 sein.
    5. Ändern Sie 'Stream_localhost' in OFF.
    6. Ändern Sie 'webcontrol_localhost' in OFF.
    7. Stellen Sie "Qualität" auf 100 ein.
    8. Stellen Sie 'width' & 'height' auf 640 & 480 ein.
    9. Setze 'post_capture' auf 5.
    10. Drücken Sie zum Beenden Strg + x. Geben Sie zum Speichern y ein, und drücken Sie die Eingabetaste, um die Eingabe zu bestätigen.
  • Geben Sie erneut den Befehl Sudo nano /etc/default/motion ein und drücken Sie die Eingabetaste.

  • Setzen Sie start_motion_daemon auf yes. Speichern und schließen.

  • Zunächst müssen Sie die Motion-Software neu starten. Geben Sie dazu den Befehl Sudo service motion restart ein und drücken Sie die Eingabetaste.

  • Geben Sie erneut den Befehl Sudo motion ein und drücken Sie die Eingabetaste. Jetzt ist Ihr Server bereit.

  • Öffnen Sie jetzt Ihren Browser. Geben Sie die IP-Adresse Ihres Raspberry Pi und die Portnummer folgendermaßen ein:

    192.168.0.107:8081 (Zuerst gibt es die IP-Adresse, dann ein ':' und dann die Portnummer). Drücken Sie Enter.

Jetzt können Sie den Live-Feed, der von Ihrer Webcam kommt, direkt auf Ihrem Laptop oder Handy oder auf beiden gleichzeitig sehen. Dies ist jedoch eine lokale Verbindung. Um es öffentlich zu machen, richten Sie Ihre IP mit einer öffentlichen ein, so dass Sie von überall auf der Welt darauf zugreifen können.

1
Rakibul Islam

Verwenden Sie ein Framework wie livecam .

Webcam-Live-Streaming-Lösung mit GStreamer und Node.js

Mit diesem Modul können Sie Ihre Webcam über ein Netzwerk streamen, um von Ihrem Browser verwendet und/oder in eine Datei gestreamt zu werden. Weitere Informationen finden Sie in der Dokumentation.

Verwendung:

// npm install livecam

const LiveCam = require('livecam');
const webcam_server = new LiveCam({
    'start' : function() {
        console.log('WebCam server started!');
    }
});

webcam_server.broadcast();
0
Dean Meehan