it-swarm-pt.com

Posso canalizar / dev / video por ssh

Eu tenho dois computadores, uma área de trabalho no meu escritório (com uma webcam conectada) e uma laptop em outro lugar da 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 encapsular /dev/video No 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
28
Stefan

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. Experimente sem pipe nomeado
  2. Verifique a largura de banda

Também - como funciona em not (exibe uma tela preta, reclama de um dispositivo desconhecido etc.)?

14
Maciej Piechotka

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

ssh [email protected] 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ê deseja áudio, substitua -an com -f alsa -ac 1 -i hw:3 (onde hw: 3 também pode ser hw: 0 ou hw: 1,… Veja arecord -l para o seu dispositivo). Se você deseja apenas áudio (sem vídeo), se isso )
  • -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 acidentada)
  • -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.

15
erik

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.

4
msw

A resposta aceita não funciona para mim. dd simplesmente não o lê. nc é ruim se você não pode poupar outra porta (eu também não consegui fazer isso funcionar). cat também não funcionou para mim.

O que acabou funcionando para mim foi o seguinte:

ssh [email protected] "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 [email protected] "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).

2
confetti

Não sei se há algum motivo para você não conseguir 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 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, em seguida, tente algo solicitando que ele vá para a porta 12345 TCP do sistema local.

0
Kevin M