2011-04-01 12 views
8

का अनुपालन करने वाली H264 पैकेट खंड कैसे मैं FFMPEG आधारभूत h264 वीडियो है, जो मैं आरटीपी में संपुटित और उनके डिकोडिंग के लिए फोन के घूंट भेज दिया स्ट्रीमिंग की है। मैं डिकोडिंग प्रगति के लिए विंडोज और मिरियल के लिए h264 प्लगइन के साथ लिनफ़ोन का उपयोग कर रहा हूं। हालांकि, कभी-कभी मुझे एफएफएमपीईजी से एक विशाल फ्रेम आकार (3 केबी ~ 9 केबी) मिलता है, जो स्पष्ट रूप से एमटीयू में फिट नहीं होता है।आरटीपी RFC3984

अगर मैं इन फ्रेम भेज "जैसा है" और आईपी विखंडन सुविधा पर भरोसा, कुछ फोन यह काफी अच्छी तरह से खेलने में सक्षम हैं, लेकिन दूसरों को गला घोंटना और धारा डिकोड नहीं कर सकते हैं। मुझे लगता है कि ऐसा इसलिए है क्योंकि स्ट्रीम आरएफसी 3 9 84 के अनुरूप नहीं है जो निर्दिष्ट करता है कि एमटीयू में फिट नहीं होने वाले पैकेट को अलग-अलग एनयूएल में अलग किया जाना चाहिए और आरटीपी की मार्क फीचर के साथ फ्रेम के अंत को चिह्नित करना होगा।

मुझे कैसे पता चलेगा कि मैं I या P फ्रेम को "काट" सकता हूं? मैंने देखा कि खंडित एच 264 पैकेट (मार्क लेबल के बिना वाले) कभी-कभी 0xF8 में समाप्त होते हैं लेकिन आरएफसी 3984 में काफी पैटर्न नहीं मिल सका जो वर्णन करता है कि आरटीपी पर इन पैकेट को कैसे भेजना है, यह निर्दिष्ट नहीं करता है कि इसे कैसे किया जाए।

अपडेट: क्या किसी को पता है कि X264 लाइब्रेरी को अधिकतम आकार के NALUs कैसे उत्पन्न करें? इस तरह से मैं इस समस्या से बचने में सक्षम होना चाहिए। सभी को धन्यवाद

उत्तर

12

आरएफसी 3984bis को एक लेखक के रूप में, यह विवरण वास्तव में कैसे आरएफसी 3984 पैकेट में 264 nals कन्वर्ट करने के लिए (RFC 6184 होने के लिए)। 3 मोड हैं: 0 (सिंगल-एनएएल), 1 (एनएएल को विखंडन और संयोजन के लिए अनुमति देता है), और 2 (आपको विखंडन, गठबंधन, और ट्रांसमिशन ऑर्डर को अंतःस्थापित करने देता है ताकि यह बदल सके कि एक विस्फोट हानि धाराओं को कैसे प्रभावित करेगी, अन्य चीजों के साथ)। एसडीपी पैकेटिज़ेशन-मोड देखें। केवल मोड 0 आवश्यक है।

मोड 0 (एकल एनएएल) आप या तो यूडीपी विखंडन (हतोत्साहित) का उपयोग करें या एनकोडर बता MTU-एक्स की तुलना में बड़ा nals पैदा न करें की आवश्यकता है। आप एन्कोडर को यह बताने में सक्षम होना चाहिए।

मोड 1 आपको टुकड़ा करने देता है। आरएफसी देखें कि आप एफयू-ए पैकेट कैसे स्थापित करते हैं। विखंडन जानकारी सामने है। आप आईडीआर (सामान्यतः) से पहले भेजे गए एसपीएस और पीपीएस पैकेट जैसे छोटे एनएएल को एकत्र करने के लिए एसटीएपी का भी उपयोग कर सकते हैं। प्रत्येक पैकेट को सामान्य आरटीपी हेडर की आवश्यकता होती है जिसमें वृद्धि अनुक्रम संख्याएं होती हैं (लेकिन एक ही टाइमस्टैम्प)।

एक फ्रेम के अंतिम RTP पैकेट (एक टुकड़ा की नहीं या एनएएल) पर मार्क की उम्मीद है लेकिन आप इसे पर भरोसा नहीं करना चाहिए।

+0

@jesusp आप अपनी प्रतिक्रिया के लिए धन्यवाद! हालांकि, मैं एन्कोडर परत के रूप में X264 का उपयोग कर रहा हूं और मुझे एन्कोडर को 1500 बाइट्स टॉप के एनयूएल उत्पन्न करने के तरीके के बारे में पता नहीं है। चारों ओर गुगलिंग मुझे यहां मिला: [लिंक] (http://comments.gmane.org/gmane.comp.video.x264.devel/5460)। हालांकि, ऐसा लगता है कि इसे पुस्तकालय में विलय नहीं किया गया है। क्या किसी को X264 का उपयोग करके ऐसा करने का तरीका पता है? अन्यथा मुझे पैकेटेशन-मोड = 1 को लागू करना होगा। धन्यवाद सभी –

+0

@jesup क्या आप समझा सकते हैं कि यूडीपी विखंडन क्यों खराब है? जैसा कि मैं इसे समझता हूं, यूडीपी विखंडन (या बेहतर, आईपी विखंडन) को कम नेटवर्क यातायात का कारण बनना चाहिए क्योंकि आपको प्रत्येक पैकेट के लिए आरटीपी (क्रमशः यूडीपी) शीर्षलेख एन्कोड करने की आवश्यकता नहीं है (इसलिए आप 12 से 20 बाइट प्रति पैकेट प्राप्त करते हैं) । – xryl669

+0

इस पर बहुत अधिक शब्द है ... कुछ राउटर विखंडन का समर्थन नहीं करते हैं। विभिन्न ओएस और अन्य मध्यवर्ती बक्से को खंडित पैकेट को फिर से इकट्ठा करने की आवश्यकता हो सकती है, और इस तरह की सभी समानता के आकार पर सीमाएं हैं - आमतौर पर 65535 बाइट्स (अक्सर 4 के आसपास) के अधिकतम यूडीपी आकार से काफी कम होती हैं। कोई मानक अधिकतम आकार नहीं है। विखंडन आपको पैकेट नुकसान के लिए अधिक असुरक्षित छोड़ देता है (हालांकि यदि डेटा एकल पैकेट में अनुपयोगी है जो अधिक मदद नहीं कर सकता है)। शायद इसका पुनरीक्षण किया जाना चाहिए, लेकिन उपयोगी मानक आकार की कमी एक बड़ी समस्या है। – jesup

5

x264 में, मेरा मानना ​​है कि x264_param_t में पूर्णांक i_slice_max_size आकार को नियंत्रित करने के लिए इस्तेमाल किया जा सकता। X264.h में एक नज़र डालें, मुझे याद नहीं है कि मैंने इसे कहाँ पढ़ा है, लेकिन पोस्ट ने कहा कि इस संरचना सदस्य का उपयोग एनएएल आकार को नियंत्रित करने के लिए किया जा सकता है, लेकिन मैंने इसे स्वयं नहीं किया है।

int i_slice_max_size;/* बाइट्स में प्रति टुकड़ा अधिकतम आकार; अनुमानित एनएएल ओवरहेड भी शामिल है। */

संपादित करें: मैं स्रोत पाया

http://mailman.videolan.org/pipermail/x264-devel/2011-February/008263.html

+0

धन्यवाद! मैं आज दोपहर इसमें जा रहा हूं, लेकिन मैंने पहले से ही जांच की है और इन परिवर्तनों को लागू करने में कोई समस्या नहीं होगी। आपकी सहायता के लिए धन्यवाद! –

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