मुझे Pi B + और Pi कैमरा मिला है और अब मैं H.264 एन्कोडेड वीडियो को कैमरा से अपने होम सर्वर पर स्ट्रीम करने के लिए सबसे कुशल (कम CPU) और सबसे कम-विलंबता कॉन्फ़िगरेशन खोजने की कोशिश कर रहा हूं।
मैंने निम्नलिखित पढ़ा है:
(सभी लिंक gstreamer-1.0 का उपयोग करते हैं deb http://vontaene.de/raspbian-updates/ . main
।)
पिछले वर्षों में इस संबंध में बहुत कुछ किया गया है।
मूल रूप से, हम पाइप के उत्पादन के लिए किया था raspivid
में gst-launch-1.0
(लिंक 1 देखें)।
तब (लिंक 2) सरकारी V4L2 ड्राइवर बनाया गया था जो अब मानक है, और यह सिर्फ gstreamer का उपयोग कर, सीधे एक पाइप के बिना डेटा प्राप्त करने देता (विशेष रूप से पोस्ट देखें towolf द्वारा »शनि दिसंबर 07, 2013 3:34 कड़ी में 2):
प्रेषक (Pi): gst-launch-1.0 -e v4l2src do-timestamp=true ! video/x-h264,width=640,height=480,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.178.20 port=5000
रिसीवर: gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
अगर मैं सही तरीके से समझूं, तो दोनों तरीके H264 डिकोडिंग करने के लिए GPU का उपयोग करते हैं, लेकिन बाद वाला थोड़ा कुशल है क्योंकि इसे दूसरी बार कर्नेल से गुजरने की आवश्यकता नहीं है क्योंकि इसमें शामिल प्रक्रियाओं के बीच कोई पाइप नहीं है।
अब इस बारे में मेरे कुछ सवाल हैं।
क्या बाद में अभी भी कैमरे से कुशलतापूर्वक H264 प्राप्त करने का सबसे हालिया तरीका है? मैं के बारे में पढ़ा है
gst-omx
, जो की तरह gstreamer पाइपलाइनों की अनुमति देता है... video/x-raw ! omxh264enc ! ...
। क्या यह केवल उपयोग करने के लिए कुछ अलग करता हैvideo/x-h264
, या यह और भी अधिक कुशल हो सकता है? क्या फर्क पड़ता है?जब मैं
video/x-h264 ...
पाइपलाइन का उपयोग करता हूं तो मुझे यह कैसे पता चलता है कि gstreamer एन्कोडिंग प्लगइन वास्तव में उपयोग किया जाता है ? यह अन्य पाइपलाइन भागों की तुलना में मेरे इच्छित प्रारूप को निर्दिष्ट करने के लिए प्रतीत होता है, जहां मैं स्पष्ट रूप से (कोड) घटक (जैसेh264parse
याfpsdisplaysink
) का नाम देता हूं ।में लिंक 1 को यह जबाब Mikael Lepistö का उल्लेख है "मैं पक्ष स्ट्रीमिंग से एक अनावश्यक फिल्टर पास निकाला गया" , जिसका अर्थ है कि वह बाहर काट
gdppay
औरgdpdepay
। वे क्या करते हैं? उनकी आवश्यकता क्यों है? क्या मैं वास्तव में उनसे छीन सकता हूं?वह यह भी उल्लेख करता है कि प्राप्त पक्ष के
caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96"
लिए मापदंडों को निर्दिष्ट करकेudpsrc
, वह स्ट्रीम के बीच में स्ट्रीमिंग शुरू / फिर से शुरू करने में सक्षम है। ये टोपियां क्या हासिल करती हैं, ये विशिष्ट विकल्प क्यों हैं, मैं उनके बारे में अधिक कहां पढ़ सकता हूं?जब मैं प्रश्न 3 और 4 में सुझाव दिया जाता हूं (जोड़ने
caps
, छोड़नेgdppay
औरgdpdepay
) तब मेरा वीडियो विलंबता बहुत खराब हो जाता है (और लगता है कि संचय हो रहा है, समय के साथ विलंबता बढ़ जाती है, और कुछ मिनटों के बाद वीडियो बंद हो जाता है)! ऐसा क्यों हो सकता है? मैं मूल कमांड के साथ प्राप्त विलंबता प्राप्त करना चाहता हूं, लेकिन किसी भी समय स्ट्रीम में शामिल होने में सक्षम होने की विशेषता भी है।मैंने पढ़ा है कि आरटीएसपी + आरटीपी आमतौर पर नियंत्रण संदेशों और अन्य चीजों के लिए टीसीपी और यूडीपी: टीसीपी के संयोजन का उपयोग करते हैं जिन्हें खोना नहीं चाहिए, और वास्तविक वीडियो डेटा ट्रांसमिशन के लिए यूडीपी। उपरोक्त सेटअप में, क्या मैं वास्तव में इसका उपयोग कर रहा हूं, या क्या मैं केवल यूडीपी का उपयोग कर रहा हूं? यह मेरे लिए थोड़ा अपारदर्शी है कि क्या gstreamer इस बात का ध्यान रखता है या नहीं।
मैं इन सवालों के एक भी जवाब के लिए किसी भी सराहना करेंगे!
cat file | grep ...
इसके बजाय कुछ ओवरहेड है, बस grep ... file
। पाइप कर्नेल से कॉपी करने की एक और परत जोड़ता है, जो आसानी से मापने योग्य है, खासकर कम मेमोरी बैंडविड्थ वाले उपकरणों पर। अगर gstreamer डिवाइस फ़ाइल से direcly पढ़ सकते हैं, तो उसका उपयोग क्यों नहीं करते? आपके raspivid | cvlc
सुझाव के बारे में : मैं इसका उपयोग कर रहा था इससे पहले कि मैं gstreamer आधारित समाधान पर स्विच करता, इसमें gstreamer की तुलना में 3 सेकंड अधिक विलंबता होती है (मुझे नहीं पता क्यों)।
cvlc
~ 45% का उपयोग होता है, लेकिन बस उस डेटा दर पर एक पाइप के माध्यम से चल रहा है (फिर से ध्यान में रखते हुए, पाइप इसे धीमा नहीं कर रहा है ) मुश्किल से सुई को स्थानांतरित करेगा, मुझे लगता है। जैसे <5%। यह पूरी तरह से तुच्छ नहीं है अगर आप निश्चित रूप से संभव के रूप में कुशलतापूर्वक के रूप में ऐसा करना चाहते हैं ...
raspivid | cvlc
और वह है 40-50%। लोग ऐसे प्रश्न का बेहतर जवाब दे सकते हैं जो उन्हें एक विशिष्ट आकृति में सुधार करने के लिए चुनौती देता है। अभी आप बहुत सारे क्यों पूछ रहे हैं, बिना यह बताए कि प्रत्येक क्यों महत्वपूर्ण है।
|
इस संदर्भ में किसी भी मुद्दे को बनाता है, बीएस का एक अविश्वसनीय टुकड़ा है क्या आपने किसी भीraspivid | cvlc
तरीके की कोशिश की है ? मेरे पास इसके साथ खेलने के लिए बहुत लंबे या बहुत समय तक कैमरा नहीं था, लेकिन http स्ट्रीम (दूसरे छोर पर लाइनक्स पर देखने योग्य) का उत्पादन करने के लिए इसका उपयोगvlc
करना ठीक लगता है।