Tôi có thể đặt ống / dev / video qua ssh không


26

Tôi có hai máy tính, máy tính để bàn trong văn phòng của tôi (có gắn webcam ) và máy tính xách tay ở một nơi khác trên mạng.

Thông thường tôi nhìn vào văn phòng của tôi thông qua webcam của tôi bằng cách chạy

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

từ máy tính xách tay của tôi. Tôi không thích Xplaywarding mplayer, vậy tại sao tôi không thể đào hầm /dev/videomáy tính của mình bằng cách chạy nó trên máy tính xách tay của tôi?

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

và sau đó để xem webcam (trên máy tính xách tay của tôi )

mplayer tv://device=/dev/video1

Câu trả lời:


14

Cái gì đó như:

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

làm việc cho tôi (SOA # 1) tại địa phương. Cũng vậy:

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

Cũng như

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

Vì thế:

  1. Thử mà không có tên ống
  2. Kiểm tra băng thông

Ngoài ra - làm thế nào để không hoạt động (hiển thị màn hình đen, phàn nàn về thiết bị không xác định, v.v.)?


Tôi nghĩ có gì đó không ổn với người chơi của tôi. Nếu tôi chạy dd if=/dev/video0 | mplayer tv://device=/dev/stdinnó cho tôi biết tài nguyên đang bận. Mặt khác, nó hoạt động (tôi thấy video) ngay cả khi tôi chạymplayer tv://device=/dev/null
Stefan

1
Câu trả lời này khá sai lệch. Lệnh gọi "chính xác" mplayersẽ mplayer tv:// -tv device=/dev/stdinhoặc tương tự, nhưng điều này không hoạt động (các thiết bị ký tự đặc biệt hơn ddcó thể xử lý đúng cách). Khi bạn chạy, mplayer tv://device=/dev/stdinnó không nhìn thấy thông số kỹ thuật của thiết bị và do đó quay trở lại /dev/video0trực tiếp, tạo ảo giác về "hoạt động". Nhưng nó sẽ không hoạt động khi webcam và mplayerquá trình được phân tách bởi mạng.
Daniel Wagner

Vâng, điều này có vẻ như nó hoạt động đúng bởi vì bạn đang SSH vào localhost, nhưng thực tế thì nó không thành công và mplayer đang quay trở lại / dev / video0 trên localhost. Nếu bạn thử các lệnh này SSH tới một máy tính khác (không phải localhost), bạn sẽ thấy webcam cục bộ của mình chứ không phải từ xa.
Jason Antman

Bạn đã thử trong máy chủ cục bộ nhưng làm thế nào để chạy lệnh ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinkhi sử dụng hai máy tính khác nhau?
Francesco Boi

Một thay thế mplayer tv://device=/dev/stdintrên OSX là gì?
Francesco Boi

14

Nếu bạn có băng thông thấp, tôi khuyên bạn nên nén luồng video:

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

Ở đâu

  • -antắt mã hóa âm thanh. Nếu bạn muốn âm thanh, hãy thay thế -anbằng -f alsa -ac 1 -i hw:3(trong đó hw: 3 cũng có thể là hw: 0 hoặc hw: 1, Nhìn thấy arecord -lcho thiết bị của bạn). Nếu bạn chỉ muốn âm thanh (không có video), hãy sử dụng cái này )
  • -s 640x480 là kích thước của video của bạn theo kích thước x và y
  • -r 10 là tốc độ khung hình bạn muốn nhận (thấp hơn làm cho hình ảnh tốt hơn ở tốc độ bit thấp, nhưng trông có vẻ bumby hơn)
  • -b:v 500k là bitrate 500 kilobit / s

Bạn cần ffmpeg trên máy chủ từ xa và mplayer trên máy cục bộ được cài đặt.


4

Các VideoLAN Project tồn tại trong phần lớn để làm chỉ là những gì bạn mong muốn.

Tôi đã không sử dụng khả năng phát trực tuyến của nó nhưng trong một lần sử dụng máy, nó đã được chứng minh là vững chắc đối với tôi.


Và vì vậy, bạn có thể giải thích cho kịch bản này không, làm ơn ...?
MikeW

1

Câu trả lời được chấp nhận không làm việc cho tôi. ddchỉ đơn giản là sẽ không đọc nó. nclà xấu nếu bạn không thể phụ tùng một cổng khác (dù sao tôi cũng không làm cho nó hoạt động được). cattôi cũng không làm việc.

Điều cuối cùng làm việc cho tôi là điều này ở phần cuối nhận:

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

Điều này có lợi ích của nó được mã hóa, vì vậy bạn tiết kiệm băng thông như một phần thưởng. Không có gì khác trên bất kỳ diễn đàn / trang web nào đang làm việc cho tôi trên một máy debian.


Kết hợp với tee và bạn có thể xem và ghi cùng một lúc:

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

Điều này sẽ mở mplayer để phát trực tiếp và lưu nó vào một tệp chứa datetime hiện tại cùng một lúc (ví dụ tên tệp 2018-11-22_01-22-10_recording.mkv:).


0

Tôi không biết có bất kỳ lý do nào bạn không thể làm điều đó không, nhưng một vấn đề tôi thấy với việc triển khai của bạn là hệ thống từ xa sẽ tìm / dev / video1 trên hệ thống của nó, nhưng sẽ không thể tìm thấy vì bạn đã tạo nó trên hệ thống địa phương của bạn.

Những gì tôi sẽ làm là một cái gì đó sau đây

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

và sau đó thử một cái gì đó bằng cách bảo nó đi đến cổng TCP hệ thống cục bộ 12345.


Tôi đã cố gắng làm rõ câu hỏi của tôi. vui lòng xem phiên bản cập nhật
Stefan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.