¿Puedo canalizar / dev / video sobre ssh

27

Tengo dos computadoras, una computadora de escritorio en mi oficina (con una cámara web conectada) y una computadora portátil en otro lugar de la red.

Por lo general, miro mi oficina a través de mi cámara web ejecutando

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

de mi laptop No me gusta Xforwarding mplayer, así que ¿por qué no puedo hacer un túnel /dev/videoa mi PC ejecutando esto en mi computadora portátil?

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

y luego mirar la cámara web (en mi computadora portátil )

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

Respuestas:

14

Algo como:

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

funciona para mí (SOA # 1) localmente. También lo hace:

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

Tanto como

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

Por lo tanto:

  1. Probar sin tubo con nombre
  2. Verificar ancho de banda

También - ¿cómo de no trabajo (pantalla en negro la pantalla, se queja de dispositivo desconocido, etc.)?

Maciej Piechotka
fuente
Creo que algo está mal con mi mplayer. Si ejecuto dd if=/dev/video0 | mplayer tv://device=/dev/stdinme dice que el recurso está ocupado. De lo contrario, funciona (veo el video) incluso cuando corromplayer tv://device=/dev/null
Stefan
1
Esta respuesta es bastante engañosa. La invocación "correcta" de mplayersería mplayer tv:// -tv device=/dev/stdino similar, pero esto no funciona (los dispositivos de caracteres son más especiales de lo que ddpueden manejarse correctamente). Cuando lo ejecutas mplayer tv://device=/dev/stdin, no se ve una especificación del dispositivo y, por lo tanto, retrocede /dev/video0directamente, dando la ilusión de "trabajar". Pero no funcionará en absoluto cuando la cámara y el mplayerproceso estén separados por la red.
Daniel Wagner
Sí, parece que está funcionando bien porque estás enviando SSH a localhost, pero en realidad está fallando y mplayer está volviendo a / dev / video0 en localhost. Si prueba estos comandos SSHing en una computadora diferente (es decir, no localhost), verá su cámara web local, no la remota.
Jason Antman
Intentó en el host local, pero ¿cómo ejecutar el comando ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdincuando usa dos computadoras diferentes?
Francesco Boi
¿Cuál es una alternativa de mplayer tv://device=/dev/stdinen OSX?
Francesco Boi
15

Si tiene un ancho de banda bajo, recomiendo la compresión de la transmisión de video:

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

dónde

  • -anapaga la codificación de audio. Si desea audio, reemplácelo -ancon -f alsa -ac 1 -i hw:3(donde hw: 3 también podría ser hw: 0 o hw: 1, ... Consulte arecord -lsu dispositivo). Si solo desea audio (sin video), use esto )
  • -s 640x480 es el tamaño de tu video en dimensión xey
  • -r 10 es la velocidad de fotogramas que desea recibir (menor hace mejores imágenes a bajas velocidades de bits, pero se ve más irregular)
  • -b:v 500k es un bitrate de 500 kilobit / s

Necesita ffmpeg en el host remoto y mplayer en la máquina local instalada.

erik
fuente
4

El Proyecto VideoLAN existe en gran parte para hacer exactamente lo que desea.

No he usado sus capacidades de transmisión, pero en su uso con una sola máquina ha demostrado ser muy sólido para mí.

msw
fuente
Y entonces, ¿podría elaborar para este escenario, por favor ...?
MikeW
2

La respuesta aceptada no funciona para mí. ddsimplemente no lo leeré. nces malo si no puedes ahorrar otro puerto (de todos modos tampoco conseguí que funcionara). cattampoco funcionó para mí.

Lo que terminó funcionando para mí fue esto en el extremo receptor:

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

Esto tiene el beneficio de estar codificado, por lo que ahorra ancho de banda como un bono. Nada más en ningún foro / sitio web me funcionaba en una máquina Debian.


Combínalo con tee y podrás ver y grabar al mismo tiempo:

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

Esto abrirá mplayer para la transmisión en vivo y lo guardará en un archivo que contiene la fecha y hora actual al mismo tiempo (nombre de archivo de ejemplo:) 2018-11-22_01-22-10_recording.mkv.

papel picado
fuente
0

No sé si hay alguna razón por la que no puede hacerlo, pero un problema que veo con su implementación es que el sistema remoto buscará / dev / video1 en su sistema, pero no podrá encontrarlo porque lo creaste en tu sistema local.

Lo que haría es algo a lo largo de lo siguiente

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

y luego intente algo diciéndole que vaya al puerto TCP 12345 de su sistema local.

Kevin M
fuente
Traté de aclarar mi pregunta. por favor vea la versión actualizada
Stefan