किसी लाइव स्ट्रीम पर प्रसारण करते समय, आप संभवतः किसी प्रकार के डेस्कटॉप स्ट्रीमिंग सॉफ़्टवेयर जैसे OBS, स्ट्रीमलैब्स, या कार्य के लिए उपलब्ध किसी भी अन्य बेहतरीन प्रोग्राम का उपयोग करने जा रहे हैं जैसा कि हमने इस ब्लॉग पर पहले देखा है। एक अन्य विकल्प जिसे हमने यहां देखा है वह Amazon Interactive Video Service (Amazon IVS) वेब ब्रॉडकास्ट SDK वाले ब्राउज़र से प्रसारण कर रहा है। प्रसारण के ये दो विकल्प अधिकांश उपयोग मामलों को कवर करते हैं, लेकिन वे हमारे लिए उपलब्ध एकमात्र विकल्प नहीं हैं। इस पोस्ट में, हम FFMPEG के साथ कमांड लाइन के माध्यम से एक अन्य विकल्प - ब्रॉडकास्टिंग हेडलेस (IE: बिना यूजर इंटरफेस के) पर चर्चा करेंगे।
यह विषय Amazon IVS उपयोगकर्ता मार्गदर्शिका में अच्छी तरह से शामिल है, लेकिन थोड़ा और गहराई में जाकर चर्चा करना चाहता था कि हम विशिष्ट उपयोग मामलों के लिए समाधान का विस्तार कैसे कर सकते हैं। कई बार ऐसा हो सकता है कि आप उपयोगकर्ता इंटरफ़ेस द्वारा प्रदान किए गए तत्काल विज़ुअल फ़ीडबैक के बिना कुछ लाइव स्ट्रीम करना चाहें। उदाहरण के लिए शायद आपको हमारे चैनल पर पहले से रिकॉर्ड किए गए वीडियो को प्रसारित करने की आवश्यकता है? या, आपके नेटवर्क पर एक आईपी कैमरे से फिर से स्ट्रीमिंग के बारे में क्या है जो आरटीएसपी या किसी अन्य प्रारूप जैसे प्रोटोकॉल का उपयोग करता है जो अमेज़ॅन आईवीएस द्वारा आवश्यक आरटीएमपी प्रारूप नहीं हो सकता है? मुट्ठी भर उपयोग के मामले हैं, तो आइए उनमें से कुछ में खुदाई करें।
नोट: प्रत्येक कथन को तोड़ने और प्रत्येक तर्क क्या करता है, इस पर चर्चा करने से बचने के लिए, नीचे एम्बेड किए गए स्निपेट पर टिप्पणी की गई है। कॉपी/पेस्ट उपयोग के लिए यह शायद खराब होगा, इसलिए प्रत्येक स्निपेट में गिटहब पर कमांड के एक असम्बद्ध संस्करण का लिंक है।
घर पर खेलने के लिए, सुनिश्चित करें कि आपने FFMPEG इंस्टॉल कर लिया है। नीचे दिए गए सभी कमांड का MacOS पर परीक्षण किया गया था, इसलिए यदि आप किसी भिन्न OS का उपयोग कर रहे हैं तो कुछ संशोधन की आवश्यकता हो सकती है। अंत में, मुझे यह उल्लेख करना चाहिए कि मैं एक FFMPEG विशेषज्ञ से बहुत दूर हूं, लेकिन इस पोस्ट की मूल प्रकाशन तिथि 5.1.2
संस्करण पर पूरी तरह से हर आदेश का परीक्षण किया है।
एक और बात: मुझे पता है कि यह सिर्फ कॉपी और पेस्ट करने के लिए आकर्षक है, लेकिन कृपया टिप्पणियों को पढ़ने के लिए समय निकालें और अपने पर्यावरण के साथ संगतता सुनिश्चित करने के लिए FFMPEG डॉक्स देखें। उदाहरण के लिए, नीचे दिए गए कई कमांड लक्षित बिटरेट के लिए
6000k
का उपयोग कर रहे हैं, लेकिन यदि आप एकBASIC
चैनल प्रकार का उपयोग कर रहे हैं तो यह आपके चैनल के लिए काम नहीं कर सकता है।
आपको Ingest समापन बिंदु और स्ट्रीम कुंजी की आवश्यकता होगी, इसलिए उन्हें अपने चैनल से Amazon IVS कंसोल के माध्यम से एकत्र करें।
मेरे डेमो चैनल के लिए, मैंने इन मानों को पर्यावरण चर DEMO_STREAM_INGEST_ENDPOINT
और DEMO_STREAM_KEY
में सेट किया है।
इसके बाद, अपने ऑडियो और वीडियो उपकरणों को FFMPEG के साथ सूचीबद्ध करें:
$ ffmpeg -list_devices true -f avfoundation -i dummy
यदि आप विंडोज़ पर हैं, तो आपको इसके बजाय
-f dshow
उपयोग करना होगा।
मेरी मशीन पर, इस आदेश ने निम्न आउटपुट उत्पन्न किया।
[AVFoundation indev @ 0x11d605c80] AVFoundation video devices: [AVFoundation indev @ 0x11d605c80] [0] OBS Virtual Camera [AVFoundation indev @ 0x11d605c80] [1] ManyCam Virtual Webcam [AVFoundation indev @ 0x11d605c80] [2] FaceTime HD Camera [AVFoundation indev @ 0x11d605c80] [3] Capture screen 0 [AVFoundation indev @ 0x11d605c80] AVFoundation audio devices: [AVFoundation indev @ 0x11d605c80] [0] ManyCam Virtual Microphone [AVFoundation indev @ 0x11d605c80] [1] BlackHole 2ch [AVFoundation indev @ 0x11d605c80] [2] External Microphone
नीचे दिए गए हमारे आदेशों में, हम डिवाइस को इंडेक्स द्वारा संदर्भित करेंगे (उदाहरण के लिए: "फेसटाइम एचडी कैमरा" के लिए 2
)।
सरलतम उपयोग मामला एक सीधा कैमरा और माइक्रोफ़ोन स्ट्रीम है।
$ ffmpeg \ -f avfoundation \ # force the format -video_size 1920x1080 \ # video size -framerate 30 \ # FPS -i "2:2" \ # input device (video:audio) -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target bitrate -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # video size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -g 120 \ # group of picture (GOP) size -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY
उपरोक्त आदेश का उपयोग करने से निम्न लाइव स्ट्रीम उत्पन्न होती है।
एक अन्य सामान्य उपयोग का मामला एक स्क्रीनशेयर को एक निश्चित स्थान पर वीडियो ओवरले के साथ स्ट्रीम करना है। यह आदेश थोड़ा पेचीदा है, लेकिन टिप्पणियों को स्पष्ट करना चाहिए कि क्या हो रहा है।
$ ffmpeg \ -f avfoundation \ # force format for input 0 -framerate 30 \ # input 0 framerate -video_size 1920x1080 \ # input 0 size -i "3:" \ # first (index 0) input (screenshare) -f avfoundation \ # force format for input 1 -framerate 30 \ # input 1 framerate -video_size 640x480 \ # input 1 size -i "2:" \ # second (index 1) input (camera) -f avfoundation \ # force format for input 2 -i ":2" \ # third (index 2) input (mic) -filter_complex "[0:v][1:v] overlay=main_w-overlay_w-5:main_h-overlay_h-5" \ # overlay video on screenshare in the bottom right -map 0:v:0 \ # use the video from input 0 -map 1:v:0 \ # use the video from input 1 -map 2:a:0 \ # use the video from input 2 -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target bitrate -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # video size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -g 120 \ # group of picture (GOP) size -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY
यह आदेश इस तरह दिखने वाले आउटपुट का उत्पादन करता है:
पूर्व-रिकॉर्ड की गई संपत्तियों के लिए, हम अपने स्थानीय फाइल सिस्टम पर मौजूदा वीडियो फ़ाइल के पथ के लिए कैमरा इनपुट को स्वैप कर सकते हैं।
$ ffmpeg \ -re \ -i /path/to/video.mp4 \ #input video -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target (average) bitrate for the encoder -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -force_key_frames "expr:gte(t,n_forced*2)" \ # keyframe interval -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY
यहां आउटपुट वेबकैम आउटपुट के समान है, लेकिन एम्बेडेड ऑडियो के साथ प्री-रिकॉर्डेड वीडियो सामग्री शामिल है।
कभी-कभी हमारे पहले से रिकॉर्ड किए गए वीडियो में ऑडियो नहीं होता है, लेकिन शायद हम एक अलग ऑडियो ट्रैक शामिल करना चाहते हैं। यह एक "लोफी रेडियो" स्ट्रीम जैसा अनुभव बनाने के लिए उपयोगी है जो एनिमेटेड वीडियो और एक अलग ऑडियो ट्रैक का उपयोग करता है। ध्यान दें कि यह स्ट्रीम वीडियो और ऑडियो को असीम रूप से लूप करेगी, इसलिए आप ध्यान रखना चाहेंगे कि लाइव स्ट्रीम की अवधि लगातार 48 घंटों तक सीमित है।
$ ffmpeg \ -re \ -stream_loop -1 \ # loop video infinitely -i /path/to/video.mp4 \ # input (video) -stream_loop -1 \ # loop audio infinitely -i /path/to/audio.mp3 \ # input (audio) -map 0:v:0 \ # map the first video stream from the first video file -map 1:a:0 \ # map the first audio stream from the second file -c:v libx264 \ # codec - libx264 is an advanced encoding library for creating H. 264 (MPEG-4 AVC) video streams -b:v 6000K \ # target (average) bitrate for the encoder -maxrate 6000K \ # max bitrate -pix_fmt yuv420p \ # pixel format -s 1920x1080 \ # size -profile:v main \ # the H.264 profile (https://trac.ffmpeg.org/wiki/Encode/H.264#Profile) -preset veryfast \ # encoder quality setting -force_key_frames "expr:gte(t,n_forced*2)" \ # keyframe interval -x264opts "nal-hrd=cbr:no-scenecut" \ -acodec aac \ # audio codec -ab 160k \ # audio bitrate -ar 44100 \ # audio sample rate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY
अंतिम उदाहरण जिसे हम कवर करेंगे वह एक री-स्ट्रीम उपयोग मामला है। ऐसे इनपुट स्रोत का उपयोग करना आसान हो सकता है जो RTMP आउटपुट नहीं देता है। कुछ आईपी कैमरे और अन्य डिवाइस आरटीएसपी में आउटपुट उत्पन्न करते हैं, और एफएफएमपीईजी के साथ हम इन डिवाइसों से हमारे अमेज़ॅन आईवीएस लाइव स्ट्रीम में इनपुट रीडायरेक्ट कर सकते हैं।
$ ffmpeg \ -rtsp_transport \ tcp \ -i rtsp://user:[email protected]:554 \ # IP camera URI -preset ultrafast \ # encoder quality setting -vcodec libx264 \ # codec -ar 44100 \ # audio bitrate -f flv \ # output video format $DEMO_STREAM_INGEST_ENDPOINT/$DEMO_STREAM_KEY
यह आदेश निम्न की तरह आउटपुट उत्पन्न करता है।
इस पोस्ट में हमने FFMPEG के साथ एक प्रमुख तरीके से Amazon IVS लाइव स्ट्रीम को स्ट्रीम करने का तरीका देखा। यदि आपके पास कोई उपयोग मामला है जो इस पोस्ट में शामिल नहीं था, तो ट्विटर पर मुझसे संपर्क करें।