Fbrmpeg के साथ webrtc जैसी विलंबता प्राप्त करें?


11

मैं इसे क्रोम और अपने फोन के बीच उपयोग कर रहा हूं:

http://www.webrtc.org/demo

और विलंबता वास्तव में अच्छा है - 1 सेकंड से कम।

मैं अपने कंप्यूटर पर बिना किसी सफलता के साथ दोहराने की कोशिश कर रहा हूं।

ffmpeg -f video4linux2 -i /dev/video0  -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002

और फिर दूसरी तरफ ffplay का उपयोग करना।

यह अभी भी कुछ सेकंड के अंतराल के लिए मिला है।

आखिरकार मैं अपने कंप्यूटर से एंड्रॉइड फोन पर स्ट्रीम करना चाहता हूं, लेकिन लेटेंसी अच्छी हो गई है।

संपादित करें - यह काफी बेहतर काम करता है। अगर मैं इससे थोड़ा हटकर कर सकता हूं, तो मुझे खुशी होगी:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002

1
लिंक मर चुका है। मूल रूप से आप वीडियो बदलना चाहते हैं और इसे अपने फोन पर स्ट्रीम कर सकते हैं? वाईफाई या बाहरी पर?
जिग्गनजेर

मैं जो करना चाहता हूं वह एक डिवाइस से जुड़े कैमरे से स्ट्रीम होता है और यह एक एंड्रॉइड टैबलेट (नेक्सस 10) पर दिखाई देता है जो यूएसबी के माध्यम से जुड़ा हुआ है।
डेविड एन वेल्टन

1
मैं इन कोडेक्स के बारे में ज्यादा नहीं जानता, लेकिन क्या आपने जांच की है कि वे हार्डवेयर कहां से संभव हैं? यह मेरा अनुमान होगा कि आप 1 सेकंड से अधिक विलंबता क्यों देखते हैं।
स्नूपेन

vpx वास्तविक समय के करीब मुश्किल होने जा रहा है, मुझे पता है x264 में एक धुन है "कम विलंबता" या कुछ ऐसा कि FWIW
rogerdpack

जवाबों:


1

समस्या ज्यादातर इस तथ्य से है कि आप हार्डवेयर ट्रांसकोडिंग के बजाय सॉफ्टवेयर ट्रांसकोडिंग का उपयोग कर रहे हैं ।

अंगूठे के एक नियम के रूप में, यदि रूपांतरण हार्डवेयर त्वरण का उपयोग करता है, तो विलंबता कम-से-एक दूसरे क्रम (आमतौर पर मिलीसेकंड) की होगी। यदि यह सॉफ्टवेयर में किया जाता है, तो विलंबता दूसरे क्रम से अधिक होगी।

FFmpeg हार्डवेयर त्वरण का समर्थन करता है, लेकिन आमतौर पर यह आपके लिए काम करने के लिए मुश्किल है।

https://trac.ffmpeg.org/wiki/HWAccelIntro

दूसरी ओर, Google Chrome आपके कंप्यूटर और आपके Android फ़ोन दोनों पर VP8 और H264 (जहाँ यह उपलब्ध है) हार्डवेयर एन्कोडिंग / डिकोडिंग का समर्थन करता है:

http://code.google.com/p/chromium/issues/detail?id=428223


2
हालांकि यह हार्डवेयर त्वरण के बारे में नहीं है ... कोडेक कॉन्फ़िगरेशन विलंबता में बहुत बड़ा हिस्सा निभाता है। गुणवत्ता और बैंडविड्थ की कीमत पर, विलंबता को कम रखने के लिए कोडेक को ट्यून करने की आवश्यकता होती है। यह किया जा सकता है कि आप हार्डवेयर त्वरित कोडेक्स का उपयोग कर रहे हैं या नहीं।
ब्रैड

वह लिंक विशेष रूप से कहता है कि Chrome केवल डेस्कटॉप पर, Android पर हार्डवेयर एन्कोडिंग का समर्थन नहीं करता है।
davr

क्षमा करें, लेकिन ब्रैड सही है, उत्तर पूरी तरह से गलत है: जब तक आप एक ही कोडेक सेटिंग्स सेट करते हैं, तब तक कोई फर्क नहीं पड़ता है यदि आप हार्डवेयर या सॉफ़्टवेयर एन्कोडिंग करते हैं (जब तक आपके पास अपने साथ वास्तविक समय एन्कोडिंग करने के लिए पर्याप्त सीपीयू शक्ति है कोडेक सेटिंग्स)। सही यह है कि यह न केवल वीडियो कोडेक सेटिंग्स के बारे में है, बल्कि ज्यादातर परिवहन के प्रकार और डिकोडर के बफरिंग व्यवहार के बारे में है। WebRTC काम करता है क्योंकि यह कम-विलंबता के लिए ट्यून किया गया है। विशिष्ट वेब डिकोडर को लो-लेटेंसी करने का इरादा नहीं है
हैरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.