Posso canalizar / dev / video por ssh

26

Eu tenho dois computadores, uma área de trabalho no meu escritório (com uma webcam conectada) e um laptop em outro lugar na rede.

Normalmente dou uma olhada no meu escritório pela webcam, executando

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

do meu laptop. Eu não gosto do Xforwarding mplayer, então por que não consigo entrar /dev/videono meu PC executando isso no meu laptop?

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

e depois assistir a webcam (no meu laptop )

mplayer tv://device=/dev/video1
Stefan
fonte

Respostas:

14

Algo como:

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

funciona para mim (SOA # 1) localmente. O mesmo acontece com:

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

Assim como

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

Conseqüentemente:

  1. Tente sem pipe nomeado
  2. Verifique a largura de banda

Além disso - como não funciona (exibir tela preta, reclama de dispositivo desconhecido etc.)?

Maciej Piechotka
fonte
Eu acho que algo está errado com o meu mplayer. Se eu executar, dd if=/dev/video0 | mplayer tv://device=/dev/stdinele informa que o recurso está ocupado. Caso contrário, ele funciona (I ver vídeo), mesmo quando eu corromplayer tv://device=/dev/null
Stefan
11
Esta resposta é bastante enganadora. A chamada "correta" de mplayerseria mplayer tv:// -tv device=/dev/stdinou similar, mas isso não funciona (os dispositivos de caracteres são mais especiais do que ddpodem ser manipulados corretamente). Quando você executa, mplayer tv://device=/dev/stdinele não vê uma especificação de dispositivo e, portanto, volta /dev/video0diretamente para o objeto, dando a ilusão de "trabalhar". Mas não funcionará quando a webcam e o mplayerprocesso estiverem separados pela rede.
Daniel Wagner
Sim, parece que está funcionando corretamente porque você está executando o SSH no localhost, mas na realidade está falhando e o mplayer está voltando para / dev / video0 no localhost. Se você tentar esses comandos SSHing em um computador diferente (por exemplo, não no host local), verá a webcam local, não a remota.
Jason Antman
Você tentou no host local, mas como executar o comando ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinao usar dois computadores diferentes?
Francesco Boi
De que é uma alternativa mplayer tv://device=/dev/stdinno OSX?
Francesco Boi
14

Se você tem uma largura de banda baixa, recomendo a compactação do fluxo de vídeo:

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

Onde

  • -andesativa a codificação de áudio. Se você deseja áudio, substitua -anpor -f alsa -ac 1 -i hw:3(onde hw: 3 também pode ser hw: 0 ou hw: 1,… Consulte o arecord -lseu dispositivo). Se você deseja apenas áudio (sem vídeo), use isto )
  • -s 640x480 é o tamanho do seu vídeo nas dimensões x e y
  • -r 10 é a taxa de quadros que você deseja receber (baixa produz melhores imagens com taxas de bits baixas, mas parece mais irregular)
  • -b:v 500k é uma taxa de bits de 500 kilobit / s

Você precisa do ffmpeg no host remoto e do mplayer na máquina local instalada.

erik
fonte
4

O projeto VideoLAN existe em grande parte para fazer exatamente o que você deseja.

Eu não usei seus recursos de streaming, mas no uso de uma única máquina mostrou ser sólido para mim.

msw
fonte
E então, você poderia elaborar para esse cenário, por favor ...?
MikeW
1

A resposta aceita não funciona para mim. ddsimplesmente não vai ler. ncé ruim se você não pode poupar outra porta (eu também não consegui fazer isso funcionar). cattambém não funcionou para mim.

O que acabou funcionando para mim foi o seguinte:

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

Isso tem o benefício de ser codificado, para que você economize largura de banda como um bônus. Nada mais em nenhum fórum / site estava funcionando para mim em uma máquina debian.


Combine com tee e você poderá assistir e gravar ao mesmo 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

Isso abrirá o mplayer para transmissão ao vivo e o salvará em um arquivo que contém a data e hora atuais ao mesmo tempo (exemplo nome do arquivo:) 2018-11-22_01-22-10_recording.mkv.

confete
fonte
0

Não sei se há algum motivo para você não conseguir fazer isso, mas um problema que vejo na sua implementação é que o sistema remoto procurará / dev / video1 em seu sistema, mas não conseguirá encontrá-lo porque você o criou no seu sistema local.

O que eu faria é algo ao longo do seguinte

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

e tente algo dizendo para acessar a porta TCP 12345 do sistema local.

Kevin M
fonte
Eu tentei esclarecer minha pergunta. por favor, veja a versão atualizada
Stefan