Чи можу я передавати / 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. Перевірте пропускну здатність

Також - як це не працює (відображає чорний екран, скаржиться на невідомий пристрій тощо)?


Я думаю, що з моїм плеєром щось не так. Якщо я запускаю, dd if=/dev/video0 | mplayer tv://device=/dev/stdinто мені кажуть, що ресурс зайнятий. Інакше це працює (я бачу відео) навіть коли я бігаюmplayer tv://device=/dev/null
Стефан

1
Ця відповідь є досить оманливою. "Правильне" виклик mplayerбуде mplayer tv:// -tv device=/dev/stdinчи подібним, але це не працює (символьні пристрої є більш спеціальними, ніж ddвміють керувати належним чином). Коли ви запускаєте, mplayer tv://device=/dev/stdinце не бачить специфікації пристрою, а тому /dev/video0прямо повертається назад , створюючи ілюзію "працювати". Але він не працюватиме взагалі, коли веб-камера та mplayerпроцес розділені мережею.
Даніель Вагнер

Так, це здається, що це працює правильно, тому що ви SSH'єте до localhost, але насправді це не вдається, і mplayer повертається до / dev / video0 на localhost. Якщо ви спробуєте ці команди SSHing на іншому комп'ютері (тобто не localhost), ви побачите вашу локальну веб-камеру, а не віддалену.
Джейсон Ентман

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

Що є альтернативою для mplayer tv://device=/dev/stdinOSX?
Франческо Бой

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 - розмір вашого відео у розмірі x та y
  • -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 для прямої трансляції та збереже його у файл, що містить поточний час дати (наприклад, ім'я файлу:) 2018-11-22_01-22-10_recording.mkv.


0

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

Що я б робив, - це щось наступне

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

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


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