मैंने हाल ही में nginx:
nginx- rtmp- मॉड्यूल के लिए रोमन हर्युटुनियन (@rutyutyunyan) के अद्भुत मॉड्यूल के बारे में विषय "
nginx- आधारित ऑनलाइन प्रसारण सर्वर " पर ठोकर खाई। मॉड्यूल को कॉन्फ़िगर करना बहुत आसान है और nginx पर आधारित वीडियो और लाइव प्रसारण प्रकाशित करने के लिए एक सर्वर बनाने की अनुमति देता है।
आप
GitHub पर इसके
पृष्ठ पर मॉड्यूल के बारे में पढ़ सकते हैं, लेकिन मैं उपयोग के कुछ सरल उदाहरण देना चाहता हूं। मुझे उम्मीद है कि विषय वीडियो व्यवसाय (जैसे मेरे) में शुरुआती मदद करेगा।
संक्षेप में RTMP के बारे में
RTMP (रियल टाइम मैसेजिंग प्रोटोकॉल) एडोब से एक मालिकाना प्रसारण प्रोटोकॉल है। डिफ़ॉल्ट परिवहन टीसीपी (पोर्ट 1935) है। आप HTTP (RTMPT) में RTMP को इनकैप्सुलेट भी कर सकते हैं। RTMP क्लाइंट मुख्य रूप से Adobe Flash Player है।
वीडियो कोडेक - H.264, AAC ऑडियो कोडेक, नेलमोसर या MP3, MP4 या FLV कंटेनर।
एक वीडियो प्रकाशित करें
दूसरे शब्दों में, वीडियो ऑन डिमांड (वीओडी)। बस rtmp खंड {सर्वर {...}} में nginx.conf जोड़ें।
application vod { play /var/videos; }
(नोट: बेशक, खंड को वोड नहीं कहा जाना है)अब आप वीडियो फ़ाइल को सही प्रारूप में / var / वीडियो फ़ोल्डर में डाल सकते हैं और खिलाड़ी को खिलाड़ी को "फ़ीड" कर सकते हैं, उदाहरण के लिए rtmp: //server/vod/file.flv। जैसा कि मैं इसे समझता हूं, MP4 मूल रूप से वीडियो रीवाइंडिंग का समर्थन करता है, और FLV को अलग से अनुक्रमित करना होगा।
निम्न सभी उदाहरण पहले से ही विंडोज के लिए ffmpeg का उपयोग करके "लाइव" प्रसारण के बारे में होंगे। हालांकि, यह जानकारी लिनक्स उपयोगकर्ताओं के लिए उपयोगी होगी।
लाइव प्रसारण
हम प्रकाशन के लिए उसी RTMP प्रोटोकॉल का उपयोग करके वीडियो और ऑडियो स्ट्रीम सर्वर को भेज सकते हैं। और हमारे ग्राहक प्रसारण देख सकेंगे। ऐसा करने के लिए, सर्वर पर एक अनुभाग जोड़ें:
application live { allow publish 1.2.3.4; allow publish 192.168.0.0/24; deny publish all; allow play all; live on; }
मैं विश्वसनीय IP को छोड़कर सभी को प्रकाशन की पहुँच को तुरंत अवरुद्ध करने की सलाह देता हूं, जैसा कि उदाहरण में दिखाया गया है।
जिस मशीन के साथ हम प्रसारित करेंगे, पहले आपको डायरेक्टशो उपकरणों की एक सूची प्राप्त करने की आवश्यकता है। स्टार्ट - रन - cmd, ffmpeg / bin फ़ोल्डर में जाएं और रन करें:
ffmpeg -list_devices true -f dshow -i dummy
यदि आपके स्रोत के नाम पर रूसी पत्र हैं, तो उन्हें क्रैकोजीब्रामी के रूप में प्रदर्शित किया जा सकता है। ट्रब व्यवस्थापक आइकॉन से नफरत कर रहे हैं, और मेरे जैसे सरल लोग लेबेदेव की वेबसाइट पर बायक को डिकोड करेंगे। FFmpeg को एक पठनीय शिलालेख खिलाना होगा।अब, वीडियो और ऑडियो स्रोत का नाम जानते हुए, आप इसे
ffmpeg के साथ कैप्चर कर सकते हैं और इसे सर्वर पर भेज सकते हैं।
Webcam
कम से कम, आपको वीडियो स्रोत, कोडेक और सर्वर को निर्दिष्ट करने की आवश्यकता है:
ffmpeg -f dshow -i video="Webcam C170" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"
"वेब कैमरा C170" के बजाय आपको सूची से अपने कैमरे का नाम बदलना होगा।
-An स्विच इंगित करता है कि हम एक ऑडियो स्ट्रीम प्रसारित नहीं कर रहे हैं। यदि ऑडियो स्ट्रीम की आवश्यकता है, तो लॉन्च लाइन कुछ इस तरह दिखाई देगी:
ffmpeg -f dshow -i video="Webcam C170" -f dshow -i audio=" ..." -c:v libx264 -c:a libfaac -ar 44100 -ac 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
यहां हम libfaac कोडेक, सैंपलिंग रेट 44100, 2 चैनल (स्टीरियो) का उपयोग करते हैं। आप AAC के बजाय MP3 (libmp3lame कोडेक) का उपयोग कर सकते हैं।

एनालॉग कैमरा
यदि आपके कैमरे में एनालॉग आउटपुट है, तो आप इसे कैप्चर डिवाइस का उपयोग करके कंप्यूटर से कनेक्ट कर सकते हैं। मैं Dealextreme के साथ एक
सस्ते PAL कैमरा और एक
USB कैप्चर कार्ड का उपयोग करता हूं।
ffmpeg -r pal -s pal -f dshow -i video="USB2.0 ATV" -c:v libx264 -an -f flv "rtmp://1.2.3.4/live/test.flv live=1"

स्क्रीन पर कब्जा
दो विकल्प हैं:
FFSplit स्थापित
करें या FFmpeg के साथ
स्क्रीन कैप्चर-रिकॉर्डर का उपयोग करें।
FFSplit का उपयोग करना आसान है क्योंकि इसमें एक सुविधाजनक GUI है, लेकिन यह XP / 2003 के तहत काम नहीं करता है।
यदि आप दूसरी विधि चुनने का निर्णय लेते हैं, तो FFmpeg लॉन्च लाइन कुछ इस तरह दिखाई देगी:
ffmpeg -f dshow -i video="screen-capture-recorder" -c:v libx264 -an -r 2 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
ऑडियो स्ट्रीम को वर्चुअल-ऑडियो-कैप्चरर के साथ कैप्चर किया जा सकता है।
आवेदन में स्क्रीन कैप्चर उदाहरणरिले
स्वाभाविक रूप से, आप सर्वर से FFmpeg के वीडियो या ऑडियो फ़ाइल (या स्ट्रीम) को रिले कर सकते हैं। नीचे दिए गए उदाहरण में, हम रिमोट कैमरा से MJPEG वीडियो प्रसारित करते हैं:
ffmpeg -f mjpeg -i video="http://iiyudana.miemasu.net/nphMotionJpeg?Resolution=320x240&Quality=Standard" -c:v libx264 -f flv "rtmp://1.2.3.4/live/test.flv live=1"
लेकिन ऐसे उद्देश्यों के लिए, इंटरमीडिएट लिंक को बाहर करने और सर्वर पर ही स्ट्रीम को खींचने के लिए खुद आरटीएमपी सर्वर पर पुश विकल्प का उपयोग करना अधिक उचित है।
जापान में किसी तरह का वेबकैमट्यूनिंग, समस्या समाधान
-शीर्ष नाम H.264 में संपीड़न / गति अनुपात के कई सेट हैं: अल्ट्राफास्ट, सुपरफास्ट, बहुत तेज, तेज, मध्यम, धीमा, धीमा, बहुत। इसलिए, यदि आप उत्पादकता बढ़ाना चाहते हैं, तो आपको उपयोग करना चाहिए:
-preset ultrafast
-सीआरएफ नंबर सीधे बिटरेट और गुणवत्ता को प्रभावित करता है। यह 0 से 51 तक मान लेता है - अधिक, चित्र की गुणवत्ता कम। डिफ़ॉल्ट 23, 18 - गुणवत्ताहीनता है। CRF 6 से कम होने पर बिटरेट लगभग दोगुना हो जाता है।
-r नंबर इनपुट और आउटपुट FPS को निर्दिष्ट करता है। उन स्रोतों के लिए जिनसे आप एक चित्र कैप्चर करते हैं, आप देशी FPS का उपयोग करने के बजाय -r सेट कर सकते हैं।
-rtbufsize संख्या वास्तविक समय बफर
का आकार है। यदि आपको लगातार बफर ओवरफ़्लो और फ़्रेम ड्रॉप के बारे में संदेश मिलते हैं, तो आप एक बड़े बफर (उदाहरण के लिए, 100000k) डाल सकते हैं, हालांकि, यह ट्रांसमिशन देरी को बढ़ा सकता है।
-pix_fmt कलर मॉडल सेट करता है। यदि आपको चित्र और ध्वनि के बजाय एक काला वर्ग दिखाई देता है, तो
yuv420p या
yuv422p स्थापित करने का प्रयास करें।
इनपुट और आउटपुट छवि के आकार की
चौड़ाई ।
-g संख्या जहां तक मैं समझता हूं, यह कुंजी के बीच फ्रेम की अधिकतम संख्या है। यदि आपका एफपीएस बहुत छोटा है, तो प्रसारण शुरू करने में देरी को कम करने के लिए आप इस मूल्य को कम कर सकते हैं।
-keyint_min संख्या मुख्य फ़्रेमों के बीच फ़्रेम
की न्यूनतम संख्या है।
-vf "फसल = w: h: x: y" फसल वीडियो
प्रसारण देरी को कम करने के लिए
-tune zerolatency "जादू" विकल्प। वह विशेष रूप से क्या करती है, मैंने कभी नहीं पाया (-:
-analyzeduration 0 अवधि विश्लेषण को अक्षम करता है, जो प्रसारण विलंबता को कम करने में मदद करता है
ऊपर चर्चा किए गए ऑडियो विकल्पों के अलावा, यदि आपके ऑडियो स्ट्रीम को MP3 / AAC के लिए अतिरिक्त रूपांतरण की आवश्यकता नहीं है, तो आपको एक-
कॉपी कॉपी की आवश्यकता हो सकती है।
उदाहरण: ध्वनि के बिना कम विलंबता वेब कैमरा से प्रसारण, चित्र के शीर्ष पर वर्तमान समय खींचना
ffmpeg -r 25 -rtbufsize 1000000k -analyzeduration 0 -s vga -copyts -f dshow -i video="Webcam C170" -vf "drawtext=fontfile=verdana.ttf:fontcolor=yellow@0.8:fontsize=48:box=1:boxcolor=blue@0.8:text=%{localtime}" -s 320x240 -c:v libx264 -g 10 -keyint_min 1 -preset UltraFast -tune zerolatency -crf 25 -an -r 3 -f flv "rtmp://1.2.3.4:1935/live/b.flv live=1"
साइट पर खिलाड़ी
यहां सब कुछ सरल है। अपनी साइट पर लोकप्रिय खिलाड़ियों में से एक रखें, उदाहरण के लिए
फ्लोप्लेयर या
जेडब्ल्यू प्लेयर ।
आप
डेमो पेज पर JW प्लेयर कनेक्शन का एक उदाहरण देख सकते हैं।
आगे क्या है?
Rtmp मॉड्यूल का उपयोग करके, आप न केवल वीडियो प्रसारण, बल्कि वीडियो चैट, इंटरनेट रेडियो, वेबिनार के लिए एक सरल मंच बना सकते हैं। इसके लिए जाओ!
मैंने केवल nginx-rtmp- मॉड्यूल और ffmpeg की मूल कार्यक्षमता पर विचार किया। संभावनाएं बहुत व्यापक हैं, इसलिए प्रलेखन पर ध्यान दें:
Nginx-rtmp- मॉड्यूल ब्लॉगविकी नग्नेक्स-आरटीएम-मॉड्यूलFFmpeg प्रलेखनस्ट्रीमिंग गाइडx264 एन्कोडिंग गाइडफ़िल्टरिंग गाइड