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

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)?


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.


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.


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.


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.


Saya mencoba mengklarifikasi pertanyaan saya. silakan lihat versi terbaru
Stefan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.