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
Stefan
quelle

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.)?

Maciej Piechotka
quelle
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.

erik
quelle
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.

msw
quelle
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.

Konfetti
quelle
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.

Kevin M
quelle
Ich habe versucht, meine Frage zu klären. Bitte
Stefan