2012-08-05 17 views
7

के साथ यूडीपी होल पंचिंग संभव नहीं है वास्तव में मैं एक एंड्रॉइड ऐप कोडिंग कर रहा हूं जो एक पीसी से जुड़े वेबकैम की तस्वीरें प्राप्त करता है। अधिक fps प्राप्त करने के लिए मैं tcp के बजाय udp प्रोटोकॉल का उपयोग करता हूं। विचार यह है कि पीसी तस्वीरों को फोन के आईपी और बंदरगाह पर भेजता है। लेकिन फोन के प्रदाता के पास अलग-अलग सार्वजनिक बंदरगाह हैं। तो मैं सीधे फोन को संबोधित नहीं कर सकता। यही कारण है कि मैंने udp छेद पंचिंग के माध्यम से समस्या को हल करने की कोशिश की, लेकिन यह काम नहीं किया। जब मेरा फोन पीसी पर एक पैकेट भेजता है, तो पीसी को फोन का सार्वजनिक आईपी और पोर्ट मिलता है। यह समापन को खोलने के लिए हर सेकेंड होता है। फिर सर्वर वेबकैम फ्रेम को इस आईपी और पोर्ट को जितनी जल्दी हो सके भेजता है। लेकिन फोन को 1-2 सेकंड के साथ केवल 10-15 चित्र प्राप्त होते हैं। उसके बाद प्रदाता प्रत्येक निम्न पैकेट या ऐसा कुछ फ़िल्टर करने लगता है क्योंकि फ़ोन को कोई और पैकेट नहीं मिलता है।मोबाइल प्रदाता

अब मेरा प्रश्न है: क्या हो रहा है (या प्रदाता क्या कर रहा है) और मैं इस समस्या को कैसे ठीक कर सकता हूं? टीसीपी प्रोटोकॉल काम करता है लेकिन बहुत ज्यादा ओवरहेड और त्रुटि सुधार के कारण स्ट्रीमिंग के लिए बहुत धीमा है।

+0

पैकेट कितने बड़े हैं? –

+3

वे लगभग 20k हैं। लेकिन मुझे पहले से ही इसका कारण मिला है: मैं बहुत कम समय सीमा में बहुत अधिक पैकेट भेजता हूं। उन्हें डिवाइस के नेटवर्क स्टैक में कहीं भी संग्रहीत किया गया है क्योंकि डिवाइस उन्हें पर्याप्त तेज़ी से आगे नहीं बढ़ा सका। अब मैं हर पैकेट के बीच 75 एमएमएस इंतजार करता हूं और यह एक आकर्षण की तरह काम करता है =) – Dano

+2

@Dano यदि आपको कोई समाधान मिल गया है तो अपना उत्तर संपादित करें या अपने प्रश्न का उत्तर दें। Pls। –

उत्तर

9

कई मुद्दों यूडीपी, जो मोबाइल नेटवर्क पर बढ़ाया जाता है के साथ ध्यान में रखने के होते हैं:

  • आप शायद जानते हैं, एक बार आप एक यूडीपी आंकड़ारेख भेजने के लिए, वहाँ बिल्कुल कोई गारंटी नहीं है कि यह मिल जाएगा है के माध्यम से यह जानने के लिए कोई निश्चित तरीका नहीं है कि क्या हुआ।

  • लगभग 1400 बाइट्स से बड़े पेलोड आईपी टुकड़ों में विभाजित होने की संभावना है। प्राप्त करने वाला ऑपरेटिंग सिस्टम उनको पूरे पैकेट में फिर से इकट्ठा कर सकता है, लेकिन केवल तभी जब प्रत्येक टुकड़ा आता है। कुछ राउटर मनमाने ढंग से टुकड़े ड्रॉप करते हैं, कुछ फ़ायरवॉल टुकड़े ड्रॉप करते हैं यदि उनमें विशेष बाइट पैटर्न होते हैं, और कुछ उस दर को सीमित करते हैं जिस पर टुकड़े भेजे जा सकते हैं। हमेशा अपने डेटाग्राम को छोटा रखने और रीसाइक्लिंग को संभालने और लापता टुकड़ों को दोहराने के लिए सबसे अच्छा है।

  • कोई प्रवाह-नियंत्रण नहीं है: यदि कोई राउटर का बफर भरा हुआ है, तो उसके बाद सबकुछ गिरा दिया जाता है। कुछ राउटर बेतरतीब ढंग से पैकेट के प्रतिशत को छोड़ना शुरू कर देंगे यदि उनके बफर बढ़ रहे हैं लेकिन अभी तक पूर्ण नहीं हैं। कुछ फ़ायरवॉल यूडीपी स्रोत को ब्लैकलिस्ट करेंगे यदि यह कुछ मनमाने ढंग से सीमा से तेज हो जाता है। अपने प्रवाह को विनियमित, गिरा दिया है कि पैकेट मतलब है कि आप हो सकता है याद रखें:

सामान्य में, डिवाइस और फ़ायरवॉल निर्माताओं बकवास की तरह यूडीपी के इलाज के लिए तो एक यूडीपी डेवलपर के रूप में आप एक अतिरिक्त अच्छे नागरिक पर फेंक दिया नहीं करने के लिए रहना होगा करते हैं बहुत तेजी से जा रहे हैं, और पैकेट को छोटा रखें। एक नियंत्रित वातावरण में आप बहुत दूर हो सकते हैं, लेकिन यदि आवेदन "जंगली में" तैनात किया जाएगा तो यह समस्याओं से बचने के लिए बहुत सावधानीपूर्वक प्रोग्रामिंग करेगा।

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