Posso canalizar / dev / video por ssh

26

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

Normalmente eu dou uma olhada no meu escritório através da minha 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 posso encapsular /dev/video no meu pc rodando isso no meu laptop?

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

e depois para assistir a webcam (no meu laptop )

mplayer tv://device=/dev/video1
    
por Stefan 21.09.2010 / 12:52

5 respostas

11

Algo como:

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

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

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

Além de

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

Por isso:

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

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

    
por 21.09.2010 / 18:37
12

Se você tem pouca largura de banda, 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

  • -an desativa a codificação de áudio. Se você quiser áudio, substitua -an por -f alsa -ac 1 -i hw:3 (onde hw: 3 também pode ser hw: 0 ou hw: 1,… Consulte arecord -l para seu dispositivo). Se você quiser somente áudio (sem vídeo), use isso )
  • -s 640x480 é o tamanho do seu vídeo na dimensão xey
  • -r 10 é o framerate que você deseja receber (menor faz imagens melhores com taxas de bits baixas, mas parece mais bumby)
  • -b:v 500k é uma taxa de bits de 500 kilobits / s

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

    
por 27.02.2014 / 23:45
4

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

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

    
por 21.09.2010 / 16:05
1

A resposta aceita não funciona para mim. dd simplesmente não vai ler. nc é ruim se você não puder dispensar outra porta (eu também não consegui que funcionasse). cat não funcionou para mim também.

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 bônus. Nada mais em qualquer fórum / site estava funcionando para mim em uma máquina debian.

Combine com tee e você pode 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 contendo o datetime atual ao mesmo tempo (nome do arquivo de exemplo: 2018-11-22_01-22-10_recording.mkv ).

    
por 22.11.2018 / 00:58
0

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

O que eu faço é algo ao longo do seguinte

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

e tente algo dizendo que vá para a porta TCP 12345 do seu sistema local.

    
por 21.09.2010 / 14:49