Czy mogę sipować / dev / video przez ssh

27

Mam dwa komputery, komputer stacjonarny w moim biurze (z podłączoną kamerą internetową ) i laptop gdzie indziej w sieci.

Zwykle biegam do mojego biura przez kamerę internetową

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

z mojego laptopa. Nie lubię mplayera Xforwarding, więc dlaczego nie mogę tunelować /dev/videodo mojego komputera, uruchamiając go na moim laptopie?

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

a następnie obejrzeć kamerę internetową (na moim laptopie )

mplayer tv://device=/dev/video1
Stefan
źródło

Odpowiedzi:

14

Coś jak:

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

działa dla mnie (SOA # 1) lokalnie. Podobnie jak:

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

Jak również

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

Stąd:

  1. Spróbuj bez nazwanego potoku
  2. Sprawdź przepustowość

Również - jak to nie działa (wyświetla czarny ekran, skarży się na nieznane urządzenie itp.)?

Maciej Piechotka
źródło
Myślę, że coś jest nie tak z moim odtwarzaczem MPlayer. Jeśli uruchomię, dd if=/dev/video0 | mplayer tv://device=/dev/stdinto powie mi, że zasób jest zajęty. W przeciwnym razie to działa (widzę wideo), nawet gdy biegnęmplayer tv://device=/dev/null
Stefan
1
Ta odpowiedź jest dość myląca. „Prawidłowe” wywołanie mplayerbyłoby mplayer tv:// -tv device=/dev/stdinpodobne lub podobne, ale to nie działa (urządzenia postaci są bardziej wyjątkowe niż ddmogą poprawnie obsługiwać). Po uruchomieniu mplayer tv://device=/dev/stdinnie widzi specyfikacji urządzenia, a więc wraca /dev/video0bezpośrednio do niego , dając złudzenie „działania”. Ale to nie będzie działać, gdy kamera internetowa i mplayerproces są oddzielone przez sieć.
Daniel Wagner
Tak, wygląda na to, że działa poprawnie, ponieważ SSH łączy się z localhost, ale w rzeczywistości nie działa, a mplayer wraca do / dev / video0 na localhost. Jeśli spróbujesz wykonać te polecenia SSHing na innym komputerze (tj. Nie localhost), zobaczysz lokalną kamerę internetową, a nie zdalną.
Jason Antman
Próbowałeś na hoście lokalnym, ale jak uruchomić polecenie, ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdingdy używasz dwóch różnych komputerów?
Francesco Boi
Jaka jest alternatywa dla mplayer tv://device=/dev/stdinOSX?
Francesco Boi
15

Jeśli masz niską przepustowość, polecam kompresję strumienia wideo:

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

gdzie

  • -anwyłącza kodowanie audio. Jeśli chcesz dźwięku, wymienić -anz -f alsa -ac 1 -i hw:3(gdzie hw: 3 może być również hw: 0 lub hw: 1, ... zobacz arecord -lna urządzeniu). Jeśli chcesz tylko dźwięk (bez wideo), użyj tego )
  • -s 640x480 to rozmiar Twojego filmu w wymiarze xiy
  • -r 10 to liczba klatek na sekundę, którą chcesz odebrać (niższa robi lepsze obrazy przy niskich przepływnościach, ale wygląda bardziej nieprzyjemnie)
  • -b:v 500k to szybkość transmisji 500 kilobitów / s

Potrzebujesz ffmpeg na zdalnym hoście i mplayera na zainstalowanym komputerze lokalnym.

erik
źródło
4

Projekt VideoLAN istnieje w dużej części, aby robić dokładnie to, czego pragniesz.

Nie korzystałem z jego możliwości przesyłania strumieniowego, ale okazało się, że w przypadku korzystania z jednego komputera jest on solidny.

msw
źródło
A więc, czy mógłbyś rozwinąć ten scenariusz, proszę ...?
MikeW
2

Przyjęta odpowiedź nie działa dla mnie. ddpo prostu tego nie przeczyta. ncjest złe, jeśli nie możesz oszczędzić innego portu (i tak w ogóle nie udało mi się go uruchomić). catteż nie działało dla mnie.

To, co skończyło się dla mnie działaniem, to:

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

Ma to tę zaletę, że jest kodowane, więc oszczędzasz przepustowość jako bonus. Nic innego na żadnym forum / stronie nie działało dla mnie na maszynie debian.


Połącz z Tee , aby jednocześnie oglądać i nagrywać:

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

Otworzy to mplayer do strumieniowego przesyłania na żywo i zapisze go w pliku zawierającym bieżącą datę i godzinę w tym samym czasie (przykładowa nazwa pliku:) 2018-11-22_01-22-10_recording.mkv.

konfetti
źródło
0

Nie wiem, czy jest jakiś powód, dla którego nie możesz tego zrobić, ale jednym z problemów, które widzę w twojej implementacji, jest to, że zdalny system będzie szukał / dev / video1 w swoim systemie, ale nie będzie w stanie go znaleźć, ponieważ utworzyłeś go w systemie lokalnym.

To, co zrobiłbym, jest następujące

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

a następnie spróbuj czegoś, mówiąc, aby przejść do portu TCP lokalnego systemu 12345.

Kevin M.
źródło
Próbowałem wyjaśnić moje pytanie. proszę zobaczyć zaktualizowaną wersję
Stefan