Могу ли я передать / dev / video через ssh


27

У меня есть два компьютера, рабочий стол в моем офисе (с подключенной веб-камерой ) и ноутбук где-то еще в сети.

Обычно я смотрю на свой офис через веб-камеру, запустив

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

с моего ноутбука. Мне не нравится Xforwarding mplayer, так почему я не могу подключиться /dev/videoк своему компьютеру, запустив это на своем ноутбуке?

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

а затем смотреть веб-камеру (на моем ноутбуке )

mplayer tv://device=/dev/video1

Ответы:


14

Что-то типа:

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

у меня работает (SOA # 1) локально. Так же:

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

Так же как

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

Следовательно:

  1. Попробуй без именованной трубы
  2. Проверьте пропускную способность

Также - как не работает (отображает черный экран, жалуется на неизвестное устройство и т. Д.)?


Я думаю, что-то не так с моим mplayer. Если я запускаю, dd if=/dev/video0 | mplayer tv://device=/dev/stdinон говорит мне, что ресурс занят. В противном случае это работает (я вижу видео), даже когда я бегуmplayer tv://device=/dev/null
Stefan

1
Этот ответ вводит в заблуждение. «Правильный» вызов mplayerбудет mplayer tv:// -tv device=/dev/stdinили подобен, но это не работает (символьные устройства более специфичны, чем ddмогут обрабатывать должным образом). Когда вы запускаете, mplayer tv://device=/dev/stdinон не видит спецификацию устройства и, таким образом, обращается к нему /dev/video0напрямую, создавая иллюзию «работы». Но это не будет работать вообще, когда веб-камера и mplayerпроцесс разделены сетью.
Даниэль Вагнер

Да, похоже, что он работает правильно, потому что вы используете SSH для localhost, но на самом деле он не работает, а mplayer возвращается к / dev / video0 на localhost. Если вы попробуете эти команды SSHing для другого компьютера (т.е. не локального), вы увидите свою локальную веб-камеру, а не удаленную.
Джейсон Антман

Вы пробовали на локальном хосте, но как запустить команду ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinпри использовании двух разных компьютеров?
Франческо Бой

Что является альтернативой mplayer tv://device=/dev/stdinна OSX?
Франческо Бой

15

Если у вас низкая пропускная способность, я рекомендую сжатие видеопотока:

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

где

  • -anотключает кодирование звука Если вы хотите аудио, замените его -anна -f alsa -ac 1 -i hw:3(где hw: 3 также может быть hw: 0 или hw: 1,… Смотрите arecord -lдля вашего устройства). Если вы хотите только аудио (без видео), используйте это )
  • -s 640x480 это размер вашего видео в х и у измерения
  • -r 10 частота кадров, которую вы хотите получить (чем ниже, тем лучше изображения при низких битрейтах, но выглядят более громоздкими)
  • -b:v 500k это битрейт 500 килобит / с

Вам нужен ffmpeg на удаленном хосте и mplayer на локальном компьютере.


4

Проект VideoLAN существует в значительной степени, чтобы делать то, что вы хотите.

Я не использовал его возможности потоковой передачи, но при его использовании на одной машине он показался мне очень надежным.


И так, не могли бы вы уточнить этот сценарий, пожалуйста ...?
MikeW

2

Принятый ответ не работает для меня. ddпросто не буду читать это. ncплохо, если вы не можете сэкономить другой порт (я так или иначе не работал). catу меня тоже не сработало.

То, что закончило работать для меня, было этим на получающем конце:

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

Преимущество кодирования заключается в том, что вы экономите пропускную способность в качестве бонуса. Ничто другое ни на одном форуме / сайте не работало для меня на машине с Debian.


Совместите с тройником, и вы сможете одновременно смотреть и записывать:

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

Это откроет mplayer для прямой трансляции и сохранит его в файл, содержащий одновременно текущую дату и время (например, filename:) 2018-11-22_01-22-10_recording.mkv.


0

Я не знаю, есть ли причина, по которой вы не можете этого сделать, но одна проблема, которую я вижу с вашей реализацией, заключается в том, что удаленная система будет искать / dev / video1 в своей системе, но не сможет найти ее, потому что вы создали его в своей локальной системе.

Что бы я сделал, это что-то вроде следующего

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

а затем попробуйте что-нибудь, сказав, чтобы перейти на TCP-порт вашей локальной системы 12345.


Я пытался уточнить свой вопрос. смотрите обновленную версию
Stefan
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.