Kann ich / dev / video über ssh leiten


26

Ich habe zwei Computer, einen Desktop in meinem Büro (mit angeschlossener Webcam ) und einen Laptop an einer anderen Stelle im Netzwerk.

Normalerweise schaue ich durch meine Webcam in mein Büro, indem ich laufe

ssh Office -Y "mplayer tv://device=/dev/video0"

von meinem Laptop. Ich mag den Xforwarding-Player nicht. Warum kann ich also nicht /dev/videoauf meinen PC tunneln , indem ich ihn auf meinem Laptop ausführe ?

sudo mkfifo /dev/video1
ssh Office 'dd if=/dev/video' | sudo dd of=/dev/video1'

und dann die webcam gucken (auf meinem laptop )

mplayer tv://device=/dev/video1

Antworten:


14

So etwas wie:

dd if=/dev/video0 | mplayer tv://device=/dev/stdin

arbeitet für mich (SOA # 1) vor Ort. So auch:

ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdin

Ebenso gut wie

mkfifo test
dd if=/dev/video0 of=test &
mplayer tv://device=test

Daher:

  1. Versuchen Sie es ohne Named Pipe
  2. Überprüfen Sie die Bandbreite

Auch - wie funktioniert das nicht (Display schwarzer Bildschirm, beschwert sich über unbekanntes Gerät etc.)?


Ich denke etwas stimmt mit meinem mplayer nicht. Wenn ich ausgeführt werde dd if=/dev/video0 | mplayer tv://device=/dev/stdin, wird mir mitgeteilt, dass die Ressource ausgelastet ist. Ansonsten funktioniert es (ich sehe Video) auch wenn ich laufemplayer tv://device=/dev/null
Stefan

1
Diese Antwort ist ziemlich irreführend. Der "richtige" Aufruf von mplayerwäre mplayer tv:// -tv device=/dev/stdinoder ähnlich, aber das funktioniert nicht (Zeichengeräte sind spezieller, als ddsie richtig handhaben können). Wenn Sie es ausführen mplayer tv://device=/dev/stdin, wird keine Gerätespezifikation angezeigt und es wird /dev/video0direkt darauf zurückgegriffen, was die Illusion von "Arbeiten" erzeugt. Es funktioniert jedoch überhaupt nicht, wenn die Webcam und der mplayerProzess durch das Netzwerk getrennt sind.
Daniel Wagner

Ja, das sieht so aus, als ob es richtig funktioniert, weil Sie SSH für localhost verwenden, aber in Wirklichkeit schlägt es fehl und mplayer greift auf / dev / video0 auf localhost zurück. Wenn Sie mit diesen Befehlen SSHing auf einen anderen Computer (dh nicht localhost) ausführen, sehen Sie Ihre lokale Webcam, nicht die entfernte.
Jason Antman

Sie haben es auf einem lokalen Host versucht, aber wie wird der Befehl ausgeführt, ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinwenn zwei verschiedene Computer verwendet werden?
Francesco Boi

Was ist eine Alternative mplayer tv://device=/dev/stdinzu OSX?
Francesco Boi

14

Wenn Sie eine geringe Bandbreite haben, empfehle ich die Komprimierung des Videostreams:

ssh USER@REMOTEHOST ffmpeg -an -f video4linux2 -s 640x480 -i /dev/video0 -r 10 -b:v 500k -f matroska - | mplayer - -idle -demuxer matroska

woher

  • -anDeaktiviert die Audiokodierung. Wenn Sie Audio wünschen, ersetzen Sie es -andurch -f alsa -ac 1 -i hw:3(wobei hw: 3 auch hw: 0 oder hw: 1 sein kann,… siehe arecord -lfür Ihr Gerät). Wenn Sie nur Audio (kein Video) möchten, verwenden Sie diese Option.
  • -s 640x480 ist die Größe Ihres Videos in x- und y-Dimension
  • -r 10 ist die Framerate, die Sie erhalten möchten (niedriger macht bessere Bilder bei niedriger Bitrate, sieht aber unruhiger aus)
  • -b:v 500k ist eine Bitrate von 500 Kilobit / s

Sie müssen ffmpeg auf dem Remote-Host und mplayer auf dem lokalen Computer installiert haben.


4

Das VideoLAN-Projekt existiert zu einem großen Teil, um genau das zu tun, was Sie wollen.

Ich habe seine Streaming-Fähigkeiten nicht genutzt, aber bei der Verwendung auf einem einzelnen Computer hat es sich für mich als absolut zuverlässig erwiesen.


Könnten Sie also bitte auf dieses Szenario eingehen ...?
MikeW

1

Die akzeptierte Antwort funktioniert bei mir nicht. ddIch werde es einfach nicht lesen. ncist schlecht, wenn man keinen anderen Port verschonen kann (das habe ich auch gar nicht zum Laufen gebracht). cathat auch bei mir nicht funktioniert.

Was für mich letztendlich funktioniert hat, war das auf der Empfängerseite:

ssh user@host "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | mplayer - -idle

Dies hat den Vorteil, dass es codiert wird, sodass Sie Bandbreite als Bonus sparen. Nichts anderes in irgendeinem Forum / auf keiner Website funktionierte für mich auf einem Debian-Rechner.


Mit Tee kombinieren und gleichzeitig ansehen und aufnehmen:

ssh user@host "ffmpeg  -r 14 -s 640x480 -f video4linux2 -i /dev/video0 -f matroska -" | tee $(date +%Y-%m-%d_%H-%M-%S)_recording.mkv | mplayer - -idle

Dies öffnet mplayer für das Live-Streaming und speichert es gleichzeitig in einer Datei, die die aktuelle Datumszeit enthält (Beispieldateiname:) 2018-11-22_01-22-10_recording.mkv.


0

Ich weiß nicht, ob es einen Grund gibt, warum Sie das nicht können, aber ein Problem, das ich bei Ihrer Implementierung sehe, ist, dass das ferne System auf seinem System nach / dev / video1 sucht, es aber nicht finden kann, weil Sie haben es auf Ihrem lokalen System erstellt.

Was ich tun würde, ist Folgendes

nc -l 12345 | sudo tee /dev/video > /dev/null &
ssh Office

und versuchen Sie es dann, indem Sie ihm mitteilen, dass er zum TCP-Port 12345 Ihres lokalen Systems wechseln soll.


Ich habe versucht, meine Frage zu klären. Bitte
Stefan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.