Posso reindirizzare / dev / video su ssh


27

Ho due computer, un desktop nel mio ufficio (con una webcam collegata) e un laptop da qualche altra parte sulla rete.

Di solito guardo il mio ufficio attraverso la mia webcam correndo

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

dal mio laptop. Non mi piace Xforwarding mplayer, quindi perché non riesco /dev/videoa collegarmi al mio PC eseguendo questo sul mio laptop?

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

e poi per guardare la webcam (sul mio laptop )

mplayer tv://device=/dev/video1

Risposte:


14

Qualcosa di simile a:

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

funziona per me (SOA # 1) localmente. Così fa:

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

Così come

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

Quindi:

  1. Prova senza nome pipe
  2. Controlla la larghezza di banda

Inoltre - come si fa a non lavoro (schermo nero del display, si lamenta dispositivo sconosciuto, ecc)?


Penso che qualcosa non vada nel mio mplayer. Se dd if=/dev/video0 | mplayer tv://device=/dev/stdineseguo mi dice che la risorsa è occupata. Altrimenti funziona (vedo il video) anche quando corromplayer tv://device=/dev/null
Stefan,

1
Questa risposta è abbastanza fuorviante. L'invocazione "corretta" di mplayersarebbe mplayer tv:// -tv device=/dev/stdino simile, ma questo non funziona (i dispositivi a caratteri sono più speciali di quelli che ddpossono gestire correttamente). Quando si esegue mplayer tv://device=/dev/stdinnon si vede una specifica del dispositivo e quindi si ricollega /dev/video0direttamente, dando l'illusione di "lavorare". Ma non funzionerà affatto quando la webcam e il mplayerprocesso sono separati dalla rete.
Daniel Wagner,

Sì, sembra che funzioni correttamente perché stai eseguendo SSH su localhost, ma in realtà sta fallendo e mplayer sta ricadendo su / dev / video0 su localhost. Se provi questi comandi SSHing su un altro computer (cioè non localhost), vedrai la tua webcam locale, non quella remota.
Jason Antman,

Hai provato nell'host locale ma come eseguire il comando ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinquando si utilizzano due computer diversi?
Francesco Boi,

Qual è un'alternativa a mplayer tv://device=/dev/stdinsu OSX?
Francesco Boi,

15

Se hai una larghezza di banda bassa, ti consiglio di comprimere il flusso video:

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

dove

  • -andisattiva la codifica audio. Se vuoi l'audio, sostituiscilo -ancon -f alsa -ac 1 -i hw:3(dove hw: 3 potrebbe anche essere hw: 0 o hw: 1, ... Vedi arecord -lper il tuo dispositivo). Se vuoi solo l'audio (nessun video), usa questo )
  • -s 640x480 è la dimensione del tuo video nelle dimensioni xey
  • -r 10 è il framerate che si desidera ricevere (inferiore rende le immagini migliori a bitrate bassi, ma sembra più incasinato)
  • -b:v 500k è un bitrate di 500 kilobit / s

È necessario ffmpeg sull'host remoto e mplayer sul computer locale installato.


4

Il progetto VideoLAN esiste in gran parte per fare proprio quello che desideri.

Non ho usato le sue capacità di streaming ma nel suo uso su una sola macchina ha dimostrato di essere solido per me.


E quindi, potresti elaborare per questo scenario, per favore ...?
MikeW,

2

La risposta accettata non funziona per me. ddsemplicemente non lo leggerà. ncè un male se non puoi risparmiare un'altra porta (non ho funzionato affatto comunque). catnon ha funzionato neanche per me.

Ciò che alla fine ha funzionato per me è stato questo alla fine della ricezione:

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

Questo ha il vantaggio di essere codificato, quindi risparmi la larghezza di banda come bonus. Nient'altro su qualsiasi forum / sito Web funzionava per me su una macchina debian.


Combina con tee e puoi guardare e registrare allo stesso tempo:

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

Questo aprirà mplayer per lo streaming live e lo salverà contemporaneamente su un file contenente il datetime corrente (esempio nome file:) 2018-11-22_01-22-10_recording.mkv.


0

Non so se c'è qualche motivo per cui non puoi farlo, ma un problema che vedo con la tua implementazione è che il sistema remoto cercherà / dev / video1 sul suo sistema, ma non sarà in grado di trovarlo perché l'hai creato sul tuo sistema locale.

Quello che farei è qualcosa che segue

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

e poi prova qualcosa dicendogli di andare alla porta TCP 12345 del tuo sistema locale.


Ho provato a chiarire la mia domanda. si prega di consultare la versione aggiornata
Stefan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.