क्या मैं ssh पर पाइप / डेव / वीडियो कर सकता हूं


26

मेरे पास दो कंप्यूटर हैं, मेरे कार्यालय में एक डेस्कटॉप ( संलग्न एक वेब कैमरा के साथ) और एक लैपटॉप नेटवर्क पर कहीं और है।

आम तौर पर मैं अपने वेब कैमरा के माध्यम से अपने कार्यालय को देख लेता हूं

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'ing कर रहे हैं, लेकिन वास्तव में यह विफल हो रहा है और mplayer लोकलहोस्ट पर / dev / video0 पर वापस आ रहा है। यदि आप इन आदेशों को SSH करने के लिए एक अलग कंप्यूटर (यानी स्थानीय होस्ट नहीं) की कोशिश करते हैं, तो आप अपने स्थानीय वेब कैमरा को देखेंगे, रिमोट नहीं।
जेसन एंटमैन

आपने स्थानीय होस्ट में कोशिश की लेकिन ssh localhost dd if=/dev/video0 | mplayer tv://device=/dev/stdinदो अलग-अलग कंप्यूटरों का उपयोग करते समय कमांड कैसे चलाएं ?
फ्रांसेस्को बोई

mplayer tv://device=/dev/stdinOSX पर एक विकल्प क्या है ?
फ्रांसेस्को बोई

14

यदि आपके पास कम बैंडविड्थ है, तो मैं वीडियो स्ट्रीम के संपीड़न की सलाह देता हूं:

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(: 3 भी hw हो सकता है: 0 या hw: जहां hw 1, ... देखें arecord -lअपनी डिवाइस के लिए)। यदि आप केवल ऑडियो (कोई वीडियो नहीं) चाहते हैं, तो इसका उपयोग करें )
  • -s 640x480 x और y आयाम में आपके वीडियो का आकार है
  • -r 10 वह फ्रैमरेट है जिसे आप प्राप्त करना चाहते हैं (कम बिटरेट पर बेहतर चित्र बनाता है, लेकिन अधिक उबाऊ दिखता है)
  • -b:v 500k 500 किलोबिट / सेक का एक बिटरेट है

आपको दूरस्थ होस्ट पर ffmpeg की आवश्यकता है और स्थानीय मशीन पर mplayer स्थापित है।


4

VideoLAN परियोजना बड़े हिस्से में मौजूद है सिर्फ ऐसा करने के लिए आप क्या चाहते हैं।

मैंने इसकी स्ट्रीमिंग क्षमताओं का उपयोग नहीं किया है, लेकिन इसकी एकल मशीन के उपयोग में यह मेरे लिए ठोस है।


और इसलिए, क्या आप इस परिदृश्य के लिए विस्तृत कर सकते हैं, कृपया ...?
माइक

1

स्वीकृत उत्तर मेरे लिए काम नहीं करता है। ddबस इसे नहीं पढ़ेंगे। ncबुरा है यदि आप एक और पोर्ट नहीं छोड़ सकते हैं (मुझे वैसे भी काम करने के लिए नहीं मिला)। catमेरे लिए भी काम नहीं किया।

मेरे लिए काम करना समाप्त हो गया, यह अंत में था:

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

इससे इनकोडिंग का लाभ मिलता है, इसलिए आप बैंडविड्थ को बोनस के रूप में बचाते हैं। किसी भी मंच / वेबसाइट पर और कुछ नहीं मेरे लिए एक डेबियन मशीन पर काम कर रहा था।


टी के साथ गठबंधन करें और आप एक ही समय में देख सकते हैं और रिकॉर्ड कर सकते हैं:

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

और फिर अपने स्थानीय सिस्टम के टीसीपी पोर्ट 12345 पर जाने के लिए कहकर कुछ प्रयास करें।


मैंने अपना प्रश्न स्पष्ट करने का प्रयास किया। कृपया अद्यतन संस्करण देखें
स्टीफन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.