लिनक्स सर्वर से लाइव वीडियो कैसे स्ट्रीम करें?


30

यहाँ मैं क्या करना चाहता हूँ। चारों ओर देखा, लेकिन कोई सीधा जवाब नहीं मिला। मेरे पास उबंटू / MySQL / Apache का उपयोग करके लिनक्स बॉक्स चलाने वाली वेबसाइटें हैं। मेरे पास अपना खुद का स्थिर आईपी है, यानी वेब होस्टिंग का उपयोग नहीं कर रहा है। मैं अपने लिनक्स सर्वर के लिए एक लैपटॉप (संभवतः विंडोज पर चल रहे) पर एक वेबकैम से वीडियो फ़ीड को स्ट्रीम करने में सक्षम होना चाहूंगा, और मेरी एक वेबसाइट के उपयोगकर्ता उस वीडियो को लाइव देख सकते हैं, जिसे स्ट्रीम किया जा रहा है। जाहिर है कि लैपटॉप को सर्वर के साथ किसी भी तरह प्रमाणित करने की आवश्यकता होगी, लेकिन इस बात पर कोई प्रतिबंध नहीं होना चाहिए कि वेबसाइट पर लाइव वीडियो कौन देख सकता है। धन्यवाद।


क्या आप पूछते हैं कि इस तरह के समाधान को कैसे लागू किया जाए या आप तीसरे पक्ष के समाधान के लिए तैयार उपयोग करें? पूर्व मामले में एसओ इस प्रश्न के लिए गलत जगह है, मेरा मानना ​​है कि यह नीचता का कारण है

जवाबों:


46

मैं वर्तमान में फायरवायर के माध्यम से जुड़े 3 मिनी डीवीडी कैमरों से ऑनलाइन स्ट्रीमिंग विकसित करता हूं, जो आपकी आवश्यकताओं के समान है।

त्वरित संकेत: vlc + flowplayer / jw खिलाड़ी

सबसे पहले, दो वीडियो प्रारूप हैं, जिन्हें आप ऑनलाइन स्ट्रीमिंग में उपयोग कर सकते हैं: FLV और h264। FLV ट्रांसकोड करना आसान है, h264 में बेहतर आकार / गुणवत्ता अनुपात है लेकिन ट्रांसकोडिंग अधिक सीपीयू की खपत है। दोनों को वेब पेज में फ़्लैश खिलाड़ियों द्वारा प्रदर्शित किया जा सकता है।

दूसरा, स्ट्रीमिंग इन्फ्रास्ट्रक्चर। चूंकि लैपटॉप से ​​आपका बैंडवाइट सीमित है (युगल एमबीपीएस सबसे ऊपर) आपको अपने सर्वर पर स्ट्रीम प्राप्त करने की आवश्यकता है और वहां इसे ग्राहकों को पुनर्स्थापित करना है। इसलिए स्ट्रीम सर्वर से 1 बार और फिर एन क्लाइंट से प्रवाहित होगी। आपने अपने लैपटॉप के लिए अपने इंटरनेट कनेक्शन का वर्णन नहीं किया है, इसलिए परिदृश्य को दो खंडों में विभाजित किया गया है:

  1. लैपटॉप सार्वजनिक आईपी पते के साथ जुड़ा हुआ है या आप लैपटॉप को NAT पोर्ट कर सकते हैं । यह परिदृश्य बहुत आसान है, क्योंकि आप सर्वर से लैपटॉप को अच्छे और आसान से जोड़ सकते हैं। बड़ा नुकसान यह है, कि आप एक स्थान (एक आईपी पते) से बंधे हैं।

  2. लैपटॉप सार्वजनिक I पते से जुड़ा नहीं है । यह थोड़ा मुश्किल है, लेकिन किसी भी नेटवर्क से काम करेगा जो आपको अपने सर्वर पर एसएसएच करने की अनुमति देगा और पर्याप्त अपलोड (1 एमबीपीएस इसे करना चाहिए)।

उपयोग किए गए परिदृश्य के बावजूद, इन्फ्रास्ट्रक्चर इस तरह दिखेगा

CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
                                                                         - Client 1
                                                                         - Client 2
                                                                         - Client N

लैपटॉप से ​​स्ट्रीमिंग

  1. वेब कैमरा से वीडियो कैप्चर करें । मैंने कभी भी स्थानीय रूप से संलग्न वेबकैम से स्ट्रीम पर कब्जा नहीं किया है, लेकिन कई उदाहरण हैं कि इसे V4L के माध्यम से कैसे किया जाए, जैसे: वेब कैमरा सेटअप । एकमात्र हिस्सा जिसे आपको दिलचस्पी लेनी चाहिए वह है:

    laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"

    जो वेबकैम से जुड़ने के लिए VLC कमांड का पहला हिस्सा है। अधिक जानकारी के लिए उल्लिखित HOWTO का अनुसरण करें। विशेष रूप से "वीडियो समूह" भाग और सही डिवाइस पथ को / dev / वीडियो और / dev / ऑडियो को देखें। वे आपके लैपटॉप पर अलग हो सकते हैं।

  2. FLV को ट्रांसकोड वीडियो । मैं व्यक्तिगत रूप से FLV का उपयोग करता हूं, क्योंकि यह सीपीयू की कम मांग है। ट्रांसकोड स्ट्रिंग मैं उपयोग यह है:

    --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'

    जो एमपीजीए ऑडियो (एमपी 3 मेरे उबंटू में उपलब्ध नहीं है) के साथ वीडियो स्ट्रीम को एफएलवी प्रारूप में ट्रांसकोड करेगा। नमूना किसी तरह अनिवार्य है, यह इसके बिना काम नहीं करेगा। लेकिन आप 22050 की तरह छोटे का चयन कर सकते हैं। यह वीडियो स्ट्रीम 'जैसा है' को ट्रांसकोड करेगा, इसलिए स्केल 1: 1 है। आप चौड़ाई और ऊंचाई पैरामीटर या स्केल पैरामीटर भी जोड़ सकते हैं। VLC प्रलेखन में देखें।

  3. इसे लैपटॉप से ​​स्ट्रीम करें । अब आपको लोकल स्ट्रीम करना होगा, जिस पर सर्वर कनेक्ट होगा:

    :std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}

    यह VLC स्ट्रीम को 0.0.0.0:8081/stream.flv से बाँध देगा। पूरा कमांड इस तरह दिखेगा:

    laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'

सर्वर पर पुनर्स्थापित हो रहा है

  1. सर्वर पर स्ट्रीम कैप्चर करें और इसे पुनर्स्थापित करें । फिर से, हम VLC को पकड़ने और स्ट्रीम करने के लिए उपयोग करते हैं। उपयोग इस पोस्ट के शुरुआती समय से बुनियादी ढांचे के परिदृश्य पर आधारित है। जैसा कि मैंने दिखाया, लैपटॉप पर VLC कुछ पोर्ट पर वीडियो स्ट्रीम करता है। इस पोर्ट को सर्वर से एक्सेसेबल होना चाहिए। यदि आपके पास लैपटॉप, या नैट पोर्ट का सार्वजनिक आईपी पता है, तो आप इसे टेलनेट के साथ जांच सकते हैं:

    server$ telnet public_ip_address 8081

    "कनेक्शन टाइमआउट" को छोड़कर कुछ भी प्रकट होगा, जिसे आप अपने लैपटॉप की स्ट्रीम से कनेक्ट कर सकते हैं। यदि आपके पास सार्वजनिक आईपी पता नहीं है, या आप NAT पोर्ट नहीं कर सकते हैं, तो आपको इसे दूसरे तरीके से करना होगा। आप लैपटॉप से ​​सर्वर तक एसएसएच कर सकते हैं और अपने लैपटॉप पोर्ट को सर्वर से आगे बढ़ा सकते हैं। सही SSH कमांड होगी:

    laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081

    यह मैजिक कमांड आपके लैपटॉप पोर्ट 8081, सर्वर पोर्ट 8081 को 'बाइंड' करेगा। इसका मतलब है कि जब आप सर्वर पर 8081 से कनेक्ट होते हैं, तो आप चुपचाप एसएसएच टनल के माध्यम से अपने लैपटॉप पोर्ट 8081 से कनेक्ट हो जाएंगे। कूल, हं? :) तो हम सभी को सरल VLC कनेक्ट और स्ट्रीम करना है:

    server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'

    या सार्वजनिक आईपी एड्रेस या नैट पोर्ट के मामले में:

    server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'

    लैपटॉप के भाग की तरह, सर्वर पर आपका VLC 8082 पोर्ट करने के लिए बाध्य है। 8082 और 8081 क्यों नहीं? 8081 पहले ही SSH रिमोट द्वारा आगे ले जा चुका है। हम पहले उदाहरण के रूप में ट्रांसकोड भाग का उपयोग क्यों नहीं करते हैं? वीडियो पहले से ही सही प्रारूप में है, इसलिए हमें बस इतना करना है, जितना कि यह है।

  2. परीक्षण । दोनों उदाहरणों में, आप VLC के माध्यम से स्ट्रीम देखकर कार्यक्षमता का परीक्षण कर सकते हैं। आप अपनी स्थानीय स्ट्रीम का परीक्षण कर सकते हैं:

    laptop$ vlc http://localhost:8081/stream.flv

    और आप अपने सर्वर की स्ट्रीम का परीक्षण कर सकते हैं:

    laptop$ vlc http://server_ip_address:8082/stream.flv

    दोनों ही मामलों में, आपको अपना वेबकैम इनपुट देखना चाहिए।

वेब पर स्ट्रीम प्रदर्शित करें

वेब पर स्ट्रीम प्रदर्शित करना, जो ज्यादातर मामलों में काम करेगा, फ्लैश प्लेयर के माध्यम से होता है। मैंने दो उत्पादों की कोशिश की, जो गैर-व्यावसायिक उपयोग के लिए स्वतंत्र हैं: जेडडब्ल्यू प्लेयर और फ्लोप्लेयर । मैं फ्लोप्लेयर के साथ रहा, लेकिन मुझे इसका कारण याद नहीं है, शायद प्लगइन्स के कारण (जिसका मैं उपयोग नहीं करता हूं :)) या बेहतर प्रलेखन के कारण।

वेब पेज में वीएलसी से एफएलवी स्ट्रीम को कैसे प्रदर्शित किया जाए: यहां स्ट्रीम वीएलसी टू वेबसाइट विथ एश एंड फ्लैश

समस्या निवारण

ऐसी कई समस्याओं से अवगत होंगे, जो उत्पन्न होंगी। पहली बात, जैसा कि हर चीज में होता है । VLC बहुत ही गपशप कार्यक्रम है, इसलिए यह आपको बताएगा कि समस्या कहां है। वीडियो / ऑडियो डिवाइस का उपयोग करने की अनुमति के साथ समस्या हो सकती है, लापता कोडेक्स, गलत वर्तनी वाले -आउट पैरामीटर, ... iftopयह देखने के लिए उपयोग करना सीखें कि क्या डेटा वास्तव में नेटवर्क के माध्यम से बहता है, आदि।


1
आपका बहुत बहुत धन्यवाद! यह मेरी अपेक्षा से अधिक जानकारी थी। वीएलसी की जाँच करेगा और एक गाइड के रूप में आपकी जानकारी का उपयोग करेगा।

3

यहाँ मेरी पसंद का उपकरण vlc होगा । यह केवल एक बहुउद्देश्यीय बहु-प्रारूप वीडियो प्लेयर नहीं है, यह फ़ाइल स्वरूपों और स्ट्रीमिंग प्रोटोकॉल की परिमाण में स्ट्रीमिंग करने में भी सक्षम है। एक बोनस के रूप में, यह विंडोज और लिनक्स होस्ट के बीच क्रॉस-प्लेटफॉर्म का काम करता है।

हमने कुछ साल पहले ऐसा ही कुछ सेट किया है, जहां एक संकीर्ण-बैंडविड्थ वाली DSL लाइन (128 K अपस्ट्रीम) का उपयोग करने वाले ग्राहक को अपने नेटवर्क से जुड़े वेबकैम को एक व्यापक दर्शकों पर स्ट्रीम करने की आवश्यकता होती है। "रिफ्लेक्टर" होस्ट के रूप में एक वीएलसी इंस्टॉलेशन ने कैम सिग्नल रोटेशन किया, स्ट्रीमिंग क्लाइंट से मुख्य बैंडविड्थ लोड लिया और विभिन्न स्ट्रीमिंग प्रोटोकॉल और प्रारूपों में स्ट्रीम प्रस्तुत किया।


1

वास्तव में मेरी विशेषज्ञता का क्षेत्र नहीं है, लेकिन शायद मैं आपको एक संभावित दिशा में इंगित कर सकता हूं।

वाणिज्यिक कार्यान्वयन एडोब के फ्लैश मीडिया सर्वर का उपयोग करना है। बेशक, यह एक महंगा दृष्टिकोण हो सकता है। हालांकि, ओपन सोर्स विकल्प हैं - जैसे कि रेड 5 । आपको सर्वर स्थापित करना होगा (इसमें जावा निर्भरता है)।

एक बार जब आप सर्वर चल रहा है, तो आप अपने सामने के अंत चुन सकते हैं (मेरा मानना है कि Red5 कुछ नमूने के साथ आता है, लेकिन आप भी उपयोग कर सकते हैं जेडब्ल्यू प्लेयर के साथ type=camera)।

सामने के छोर को मीडिया सर्वर से स्ट्रीमिंग वीडियो प्राप्त होगा, और आप अपनी स्ट्रीम मीडिया सर्वर पर अपलोड करेंगे।

अधिक जानकारी: Red5 सहायता और जानकारी और Red5 संदर्भ


jwplayer व्यक्तिगत उपयोग के लिए एक कमाल की चीज है
केंड्रिक 14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.