Puis-je diriger / dev / vidéo sur ssh


27

J'ai deux ordinateurs, un bureau dans mon bureau (avec une webcam connectée) et un ordinateur portable ailleurs sur le réseau.

Habituellement, je jette un œil à mon bureau via ma webcam en exécutant

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

de mon ordinateur portable. Je n'aime pas mplayer Xforwarding, alors pourquoi ne puis-je pas tunneler /dev/videovers mon PC en exécutant cela sur mon ordinateur portable?

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

puis regarder la webcam (sur mon portable )

mplayer tv://device=/dev/video1

Réponses:


14

Quelque chose comme:

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

travaille pour moi (SOA # 1) localement. Il en va de même:

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

Aussi bien que

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

Par conséquent:

  1. Essayez sans pipe nommée
  2. Vérifier la bande passante

Aussi - comment cela ne fonctionne pas (afficher un écran noir, se plaindre d'un périphérique inconnu, etc.)?


Je pense que quelque chose ne va pas avec mon mplayer. Si je l'exécute, dd if=/dev/video0 | mplayer tv://device=/dev/stdincela m'indique que la ressource est occupée. Sinon ça marche (je vois la vidéo) même quand je coursmplayer tv://device=/dev/null
Stefan

1
Cette réponse est assez trompeuse. L'invocation "correcte" de mplayerserait mplayer tv:// -tv device=/dev/stdinou similaire, mais cela ne fonctionne pas (les périphériques de caractères sont plus spéciaux que ce qui ddpeut être géré correctement). Lorsque vous l'exécutez, mplayer tv://device=/dev/stdinil ne voit pas de spécification d'appareil et retombe donc /dev/video0directement, donnant l'illusion de "fonctionner". Mais cela ne fonctionnera pas du tout lorsque la webcam et le mplayerprocessus sont séparés par le réseau.
Daniel Wagner

Oui, cela semble fonctionner correctement parce que vous êtes SSH sur localhost, mais en réalité cela échoue et mplayer revient à / dev / video0 sur localhost. Si vous essayez ces commandes SSHing sur un autre ordinateur (c'est-à-dire pas localhost), vous verrez votre webcam locale, pas celle distante.
Jason Antman

Vous avez essayé dans l'hôte local, mais comment exécuter la commande ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinlorsque vous utilisez deux ordinateurs différents?
Francesco Boi

Qu'est-ce qu'une alternative mplayer tv://device=/dev/stdinà OSX?
Francesco Boi

15

Si vous avez une faible bande passante, je recommande la compression du flux vidéo:

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

  • -andésactive l'encodage audio. Si vous voulez de l'audio, remplacez-le -anpar -f alsa -ac 1 -i hw:3(où hw: 3 peut également être hw: 0 ou hw: 1,… Voir arecord -lpour votre appareil). Si vous ne voulez que du son (pas de vidéo), utilisez ceci )
  • -s 640x480 est la taille de votre vidéo en dimension x et y
  • -r 10 est la fréquence d'images que vous souhaitez recevoir (une image plus basse donne de meilleures images à des débits binaires faibles, mais semble plus fade)
  • -b:v 500k est un débit binaire de 500 kilobits / s

Vous avez besoin de ffmpeg sur l'hôte distant et de mplayer sur la machine locale installée.


4

Le projet VideoLAN existe en grande partie pour faire exactement ce que vous désirez.

Je n'ai pas utilisé ses capacités de streaming, mais dans son utilisation sur une seule machine, il s'est avéré solide pour moi.


Et donc, pourriez-vous élaborer pour ce scénario, s'il vous plaît ...?
MikeW

2

La réponse acceptée ne fonctionne pas pour moi. ddne le lira tout simplement pas. ncest mauvais si vous ne pouvez pas épargner un autre port (je n'ai pas réussi à le faire fonctionner de toute façon). catn'a pas fonctionné pour moi non plus.

Ce qui a fini par fonctionner pour moi, c'est à la réception:

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

Cela a l'avantage d'être encodé, vous économisez donc de la bande passante en bonus. Rien d'autre sur aucun forum / site Web ne fonctionnait pour moi sur une machine Debian.


Combinez avec tee et vous pouvez regarder et enregistrer en même temps:

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

Cela ouvrira mplayer pour la diffusion en direct et l'enregistrera dans un fichier contenant la date et l'heure en cours en même temps (exemple de nom de fichier:) 2018-11-22_01-22-10_recording.mkv.


0

Je ne sais pas s'il y a une raison pour laquelle vous ne pouvez pas le faire, mais un problème que je vois avec votre implémentation est que le système distant recherchera / dev / video1 sur son système, mais ne pourra pas le trouver car vous l'avez créé sur votre système local.

Ce que je ferais est quelque chose le long de ce qui suit

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

puis essayez quelque chose en lui disant d'aller sur le port TCP 12345 de votre système local.


J'ai essayé de clarifier ma question. s'il vous plaît voir la version mise à jour
Stefan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.