2012-02-23 12 views
7

दुर्भाग्य से मैं अभी भी अपने आईपी कैमरे को सही तरीके से एक्सेस करने के लिए आरटीपी/आरटीसीपी संचार के थोड़ा कार्यान्वयन के साथ अटक गया हूं।आरटीसीपी/आरटीपी संचार समस्या

क्या मैं

कैमरा करना चाहते हैं एक आंतरिक बफर जो मैं पढ़ना चाहते हैं। तो मैं आरटीएसपी के माध्यम से कैमरे के साथ संवाद करता हूं और डेटा को स्ट्रीम करने के लिए कहता हूं। जब कैमरा पूरे बफर के माध्यम से चला गया, स्ट्रीमिंग बंद हो जाएगा।

मुझे क्या करना अब तक

  1. TCP कनेक्शन जो DESCRIBE/SETUP/PLAY अनुरोध (RTSP) धारा पाने के लिए RTSP के माध्यम से संचार शुरू कर दिया है। यह कनेक्शन खुला रहता है जबकि कैमरा इसके डेटा को स्ट्रीम करता है।

  2. एक पोर्ट जिस पर मुझे आरटीपी (यूडीपी पर आधारित) के माध्यम से भेजा गया डेटा प्राप्त होता है - यह संभालना मेरी कोई चिंता नहीं है, मुझे इसकी पूरी तरह से कोई पहुंच नहीं है, मैं बस पूर्णता के लिए इसका उल्लेख करना चाहता था ।

  3. एक यूडीपी सॉकेट जो आरटीसीपी 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) 

बफर के बाकी मैं सिर्फ शून्य से भरा हाँ मुझे पता है कि यह सिर्फ एक हैक है और आपको अपने बच्चों को इस तरह के कार्यक्रम में नहीं बताना चाहिए।

अब मेरा प्रश्न थोड़ा बदलता है: क्या यह हैक के साथ ठीक है? ऐसा लगता है, लेकिन मैं अभी भी थोड़ा चिंतित हूं कि मेरा कैमरा उन डमी डेटा का उपयोग करेगा और कॉन्फ़िगरेशन को बदल देगा क्योंकि इसमें कुछ अजीब चीजें हैं?

+0

क्या आपने मौजूदा आरटीपी लाइब्रेरी का उपयोग करने पर विचार किया है जो इसका ख्याल रखेगा? – nos

+0

@nos बेशक यह एक विकल्प होगा लेकिन मैं वास्तव में किसी भी लाइब्रेरी के उपयोग से बचना चाहता था क्योंकि मैं चाहता हूं कि स्ट्रीम को जीवित रखा जाए - आरटीसीपी से कुछ भी पार्स करने की आवश्यकता नहीं है (उम्मीद है कि यह अलविदा है पाठ्यक्रम का संदेश)। दूसरा पूरा आवेदन पूरी तरह से async होना चाहिए, इसलिए मैं अपने द्वारा सभी सॉकेट इत्यादि प्रबंधित करना चाहता हूं। अफैक सबसे अधिक libs अपने स्वयं के सॉकेट और कनेक्शन को नियंत्रित करेगा। लेकिन अगर मुझे वास्तव में रिसीवर रिपोर्ट्स को ठीक से भरने की ज़रूरत है (कुछ "जटिल" डेटा के साथ) मैं वास्तव में एक lib – Toby

+0

पर विचार कर सकता हूं क्या आपने ऐप चल रहा है, तो क्या आपने वायरसहार्क पैकेट कैप्चर किया है? यह आपको बताएगा कि आपके डेटा के साथ क्या हो रहा है या नहीं हो रहा है। –

उत्तर

1

आपको स्ट्रीम से डेटा को स्वयं पढ़ना चाहिए। इस तरह आप डमी के बजाय वास्तविक रिसीवर रिपोर्ट दे सकते हैं।

यदि आपको इसे किसी अन्य एप्लिकेशन या लाइब्रेरी के लिए किसी अन्य पोर्ट पर अग्रेषित करने की आवश्यकता है, तो आप बस ऐसा कर सकते हैं।

+0

पर इस तरह की "डमी" रिसीवर रिपोर्ट भेजने के लिए वास्तव में ठीक है, तो मैं वास्तव में मेरे पास किसी भी संसाधन (एम्बेडेड डिवाइस) को छोड़ना चाहता हूं, इसलिए मैं इस डेटा को पढ़ने से बचना चाहता हूं। यह काफी अनावश्यक होगा क्योंकि मुझे इसकी आवश्यकता नहीं है (आरटीसीपी को छोड़कर) वैसे भी। तो मैं वास्तव में कुछ डमी मूल्यों के साथ ऐसा करना पसंद करूंगा। – Toby

+0

जबकि आपको इसे "आवश्यकता" नहीं हो सकती है, सर्वर ऐसा करता है ताकि यह नेटवर्क और पैकेट हानि को बाढ़ को रोकने के लिए डेटा समायोजित/थ्रॉटल कर सके। – Deanna

1

कुछ कैमरों द्वारा रिसीवर रिपोर्ट (आरआर) का उपयोग "जीवित रखें" संदेश के रूप में किया जा सकता है। यदि आप कैमरे द्वारा GET_PARAMETER स्वीकार किए जाते हैं, तो आप जीवित संदेश रखने के लिए हर मिनट कैमरे GET_PARAMETER को भेजने के लिए कोशिश कर सकते हैं। देखें कि यह आपको डेस्क्रिब के जवाब में क्या बताता है।

कुछ आईपी कैमरे आरआर को सही तरीके से पार्स नहीं कर सकते हैं। मैं वास्तव में लाइव 555 लाइब्रेरी को रोकने की कोशिश कर रहा हूं जिसे मैं अपने क्लाइंट में आरआर संदेशों को भेजने से उपयोग करता हूं क्योंकि सैमसंग कैमरे के कुछ मॉडल ड्रॉप कनेक्शन (उनके तकनीकी समर्थन के अनुसार)।

संबंधित मुद्दे