Bisakah saya mem-pipe / dev / video lewat ssh

26

Saya memiliki dua komputer, desktop di kantor saya (dengan webcam terpasang) dan laptop di tempat lain di jaringan.

Biasanya saya melihat kantor saya melalui webcam saya dengan menjalankan

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

dari laptop saya. Saya tidak suka mplayer Xforwarding, jadi mengapa saya tidak bisa tunnel /dev/videoke pc saya dengan menjalankan ini di laptop saya?

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

dan kemudian menonton webcam (di laptop saya )

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

Jawaban:

14

Sesuatu seperti:

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

bekerja untuk saya (SOA # 1) secara lokal. Begitu juga:

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

Sebaik

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

Karenanya:

  1. Coba tanpa pipa bernama
  2. Periksa bandwidth

Juga - bagaimana tidak bekerja (menampilkan layar hitam, mengeluh tentang perangkat yang tidak dikenal dll)?

Maciej Piechotka
sumber
Saya pikir ada sesuatu yang salah dengan mplayer saya. Jika saya menjalankannya dd if=/dev/video0 | mplayer tv://device=/dev/stdinmemberitahu saya sumber daya sedang sibuk. Kalau tidak bekerja (saya melihat video) bahkan ketika saya menjalankanmplayer tv://device=/dev/null
Stefan
1
Jawaban ini cukup menyesatkan. Doa "benar" mplayerakan mplayer tv:// -tv device=/dev/stdinatau serupa, tetapi ini tidak berfungsi (perangkat karakter lebih istimewa daripada yang ddbisa menangani dengan benar). Ketika Anda menjalankannya mplayer tv://device=/dev/stdintidak melihat spesifikasi perangkat dan jatuh kembali ke /dev/video0langsung, memberikan ilusi "bekerja". Tetapi itu tidak akan berfungsi sama sekali ketika webcam dan mplayerproses dipisahkan oleh jaringan.
Daniel Wagner
Ya, ini sepertinya berfungsi dengan baik karena Anda SSH'ing ke localhost, tetapi kenyataannya gagal dan mplayer kembali ke / dev / video0 di localhost. Jika Anda mencoba perintah ini SSHing ke komputer lain (mis. Bukan localhost), Anda akan melihat webcam lokal Anda, bukan yang jauh.
Jason Antman
Anda mencoba host lokal tetapi bagaimana menjalankan perintah ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinketika menggunakan dua komputer yang berbeda?
Francesco Boi
Apa alternatif mplayer tv://device=/dev/stdindi OSX?
Francesco Boi
14

Jika Anda memiliki bandwidth rendah saya sarankan kompresi aliran video:

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

dimana

  • -anmematikan pengodean audio. Jika Anda ingin audio, ganti -andengan -f alsa -ac 1 -i hw:3(di mana hw: 3 bisa juga hw: 0 atau hw: 1,… Lihat arecord -luntuk perangkat Anda). Jika Anda hanya ingin audio (tidak ada video), gunakan ini )
  • -s 640x480 adalah ukuran video Anda dalam dimensi x dan y
  • -r 10 adalah framerate yang ingin Anda terima (lebih rendah membuat gambar lebih baik pada bitrate rendah, tetapi terlihat lebih gagah)
  • -b:v 500k adalah bitrate 500 kilobit / s

Anda memerlukan ffmpeg pada host jarak jauh dan mplayer pada mesin lokal yang diinstal.

erik
sumber
4

The VideoLAN Project ada sebagian besar untuk melakukan apa yang Anda inginkan.

Saya tidak menggunakan kemampuan streaming tetapi dalam penggunaan mesin tunggal itu telah terbukti sangat solid bagi saya.

msw
sumber
Jadi, bisakah Anda menjelaskan skenario ini, tolong ...?
MikeW
1

Jawaban yang diterima tidak bekerja untuk saya. ddtidak akan membacanya. ncburuk jika Anda tidak bisa menggunakan port lain (toh saya tidak bisa menggunakannya sama sekali). catjuga tidak bekerja untuk saya.

Apa yang akhirnya berhasil bagi saya adalah ini pada sisi penerima:

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

Ini memiliki manfaat karena dikodekan, sehingga Anda menghemat bandwidth sebagai bonus. Tidak ada hal lain di forum / situs web yang berfungsi untuk saya di mesin debian.


Kombinasikan dengan tee dan Anda dapat menonton dan merekam pada saat yang sama:

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

Ini akan membuka mplayer untuk streaming langsung dan menyimpannya ke file yang berisi datetime saat ini pada saat yang sama (misalnya nama file:) 2018-11-22_01-22-10_recording.mkv.

konfeti
sumber
0

Saya tidak tahu apakah ada alasan Anda tidak dapat melakukannya, tetapi satu masalah yang saya lihat dengan implementasi Anda adalah bahwa sistem remote akan mencari / dev / video1 pada sistemnya, tetapi tidak akan dapat menemukannya karena Anda membuatnya di sistem lokal Anda.

Apa yang akan saya lakukan adalah sesuatu di bawah ini

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

dan kemudian coba sesuatu dengan menyuruhnya pergi ke port TCP sistem 12345 lokal Anda.

Kevin M.
sumber
Saya mencoba mengklarifikasi pertanyaan saya. silakan lihat versi terbaru
Stefan