दुर्भाग्य से मैं अभी भी अपने आईपी कैमरे को सही तरीके से एक्सेस करने के लिए आरटीपी/आरटीसीपी संचार के थोड़ा कार्यान्वयन के साथ अटक गया हूं।आरटीसीपी/आरटीपी संचार समस्या
क्या मैं
कैमरा करना चाहते हैं एक आंतरिक बफर जो मैं पढ़ना चाहते हैं। तो मैं आरटीएसपी के माध्यम से कैमरे के साथ संवाद करता हूं और डेटा को स्ट्रीम करने के लिए कहता हूं। जब कैमरा पूरे बफर के माध्यम से चला गया, स्ट्रीमिंग बंद हो जाएगा।
मुझे क्या करना अब तक
TCP कनेक्शन जो
DESCRIBE
/SETUP
/PLAY
अनुरोध (RTSP) धारा पाने के लिए RTSP के माध्यम से संचार शुरू कर दिया है। यह कनेक्शन खुला रहता है जबकि कैमरा इसके डेटा को स्ट्रीम करता है।एक पोर्ट जिस पर मुझे आरटीपी (यूडीपी पर आधारित) के माध्यम से भेजा गया डेटा प्राप्त होता है - यह संभालना मेरी कोई चिंता नहीं है, मुझे इसकी पूरी तरह से कोई पहुंच नहीं है, मैं बस पूर्णता के लिए इसका उल्लेख करना चाहता था ।
एक यूडीपी सॉकेट जो आरटीसीपी
Sender Reports
/Source Descriptions
प्राप्त करता है। यह महत्वपूर्ण है क्योंकि मुझे नहीं पता कि स्ट्रीम कब रुकती है (जैसा कि बिंदु 2 में उल्लिखित है, मैं सिर्फ स्ट्रीमिंग बंद होने पर नहीं देख सकता)। इस सॉकेट पर मैंने आरटीसीपीSender Report Goodbye
आने तक पढ़ा है, जिसका अर्थ है स्ट्रीमिंग समाप्त हो गई है। फिर मैं टीसीपी सॉकेट बंद कर सकता हूं (आरटीएसपी संचार से)।
क्या गलत
यह 2MB या 4MB की तरह छोटे बफर आकार के लिए काम कर रहा है जा रहा है। मुझे कुछ स्रोत विवरण प्राप्त होते हैं और फिर Goodbye
प्राप्त होते हैं। लेकिन मेरे विशेष परीक्षण मामले में मैं 16 एमबी का उपयोग करना चाहता था (जो कैमरा अभी भी कैमरे के सक्षम होने के आधे से भी कम है)। मुझे प्रेषक रिपोर्ट प्राप्त होती है लेकिन किसी बिंदु पर (हमेशा लगभग 8 एमबी +/- 300 केबी पर) कैमरा बस भेजना बंद कर देता है।
ध्यान देने योग्य तथ्य यह है कि मैं समस्याओं के बिना वीएलसी के माध्यम से बफर तक पहुंच सकता हूं। मैं भी संचार (RTSP और RTCP) जो लगभग पूरी तरह अपने आवेदन में रूप में ही है को देखा ... एक बात याद आ रही मैं नीचे वाला उल्लेख कर रहा हूँ:
संभावित कारण
यह वह हिस्सा है जहां मुझे आपकी सलाह चाहिए।
संभावना: रिसीवर की कमी
जब वीएलसी के माध्यम से स्ट्रीमिंग रिपोर्ट मैंने देखा वहाँ थे कि कुछ RTCP Receiver Reports
कैमरे के लिए वीएलसी से भेजे गए (Sender Reports
तरह चक्रीय)। तो क्या यह हो सकता है कि कम से कम एक Receiver Report
किसी विशिष्ट समय में (या भेजे गए बाइट्स की एक विशेष मात्रा के बाद) की उम्मीद है? फिलहाल मैं किसी अन्य कारण के बारे में नहीं सोच सकता।
समाधान?
अगर हम कोई
Receiver Reports
मैं अगर वहाँ अधिक से अधिक जानकारी के लिए ले जाने के बिना उन्हें लागू करने के लिए एक रास्ता है जानना चाहते हैं, क्योंकि कि कैमरे स्ट्रीमिंग बंद हो जाता है मान लेते हैं। मैंने पहले से ही RFC 3550 में से कुछ पढ़ा है और मुझे लगता है कि उन रिपोर्ट संदेशों के पीछे अभी भी तर्क का एक गुच्छा है। अब मैं वास्तव में की आवश्यकता नहीं है और इसलिए मैं भी एक पूर्ण आरटीसीपी प्रोटोकॉल को लागू करने के लिए नहीं चाहता हूं। क्या कुछReceiver Report
डमी फ्रेम भेजने के लिए पर्याप्त होगा ताकि कैमरा बस स्ट्रीमिंग पर रहे? यदि हां, तो वे कैसे दिखते हैं?यदि यह
Receiver Reports
की कमी से संबंधित नहीं है और मुझे बस उनकी आवश्यकता नहीं है, तो कैमरे के स्ट्रीमिंग को रोकने के कारण क्या हो सकता है? कोई सुझाव?
संपादित करें:
ठीक है मैं सिर्फ डमी Receiver Report
किसी तरह का बनाने में कामयाब रहे हैं और यह काम करने लगता है
मैं बस (मैं सिर्फ 12 MB तो मैं वांछित गया अलविदा प्राप्त कर सकता है) एक 28Byte बफर भरा है और सिर्फ हैडर क्षेत्र में कुछ मान के लिए इस्तेमाल किया, जिसका अर्थ है:
buffer[0] = 0x80; // Version 2 , Padding = false, Reception Count = 0
buffer[1] = 0xC9; // Packet Type 201 Receiver Report
buffer[2] = 0x00; // Higher byte for total length
buffer[3] = 0x06; // Lower byte for total length (in 32 Bit words -> 28 Byte)
बफर के बाकी मैं सिर्फ शून्य से भरा हाँ मुझे पता है कि यह सिर्फ एक हैक है और आपको अपने बच्चों को इस तरह के कार्यक्रम में नहीं बताना चाहिए।
अब मेरा प्रश्न थोड़ा बदलता है: क्या यह हैक के साथ ठीक है? ऐसा लगता है, लेकिन मैं अभी भी थोड़ा चिंतित हूं कि मेरा कैमरा उन डमी डेटा का उपयोग करेगा और कॉन्फ़िगरेशन को बदल देगा क्योंकि इसमें कुछ अजीब चीजें हैं?
क्या आपने मौजूदा आरटीपी लाइब्रेरी का उपयोग करने पर विचार किया है जो इसका ख्याल रखेगा? – nos
@nos बेशक यह एक विकल्प होगा लेकिन मैं वास्तव में किसी भी लाइब्रेरी के उपयोग से बचना चाहता था क्योंकि मैं चाहता हूं कि स्ट्रीम को जीवित रखा जाए - आरटीसीपी से कुछ भी पार्स करने की आवश्यकता नहीं है (उम्मीद है कि यह अलविदा है पाठ्यक्रम का संदेश)। दूसरा पूरा आवेदन पूरी तरह से async होना चाहिए, इसलिए मैं अपने द्वारा सभी सॉकेट इत्यादि प्रबंधित करना चाहता हूं। अफैक सबसे अधिक libs अपने स्वयं के सॉकेट और कनेक्शन को नियंत्रित करेगा। लेकिन अगर मुझे वास्तव में रिसीवर रिपोर्ट्स को ठीक से भरने की ज़रूरत है (कुछ "जटिल" डेटा के साथ) मैं वास्तव में एक lib – Toby
पर विचार कर सकता हूं क्या आपने ऐप चल रहा है, तो क्या आपने वायरसहार्क पैकेट कैप्चर किया है? यह आपको बताएगा कि आपके डेटा के साथ क्या हो रहा है या नहीं हो रहा है। –