महत्वपूर्ण! आईओएस 8 के रूप में आप VTCompressionSession का उपयोग कर सकते हैं और कंटेनर के माध्यम से खोदने के बजाय एनएएल इकाइयों तक सीधे पहुंच सकते हैं।
खैर सौभाग्य से आप यह कर सकते हैं और मैं आपको बता कैसे करेंगे, लेकिन आप अपने हाथों या तो MP4 या MOV कंटेनर के साथ गंदा पाने के लिए करने जा रहे हैं। इस (हालांकि, अधिक MOV विशेष) के लिए एक सहायक संसाधन एप्पल क्विकटाइम फ़ाइल स्वरूप है परिचय पुस्तिका http://developer.apple.com/library/mac/#documentation/QuickTime/QTFF/QTFFPreface/qtffPreface.html#//apple_ref/doc/uid/TP40000939-CH202-TPXREF101
पहली बात का पहला, आप 30 सेकंड से पहले एक मनमाना बिंदु से अपनी सहेजी गई फिल्म शुरू करने के लिए सक्षम होने के लिए नहीं जा रहे हैं रिकॉर्डिंग के अंत में, आपको लगभग 30 सेकंड में कुछ आई-फ्रेम का उपयोग करना होगा। आपके कीफ्रेम अंतराल के आधार पर, यह 30 सेकंड के पहले या उसके बाद कई सेकंड हो सकता है। आप सभी आई-फ्रेम का उपयोग कर सकते हैं और मनमाने ढंग से बिंदु से शुरू कर सकते हैं, लेकिन फिर आप शायद बाद में वीडियो को फिर से एन्कोड करना चाहेंगे क्योंकि यह काफी बड़ा होगा।
तो यह जानकर कि चलो आगे बढ़ें।
पहला चरण तब होता है जब आप अपना AVAssetWriter सेट अप करते हैं, तो आप अपने AVAssetWriterInput की अपेक्षाओं को MediaDataInRealTime प्रॉपर्टी को YES पर सेट करना चाहेंगे।
कैप्चर आउटपुट कॉलबैक में आप जिस फ़ाइल को लिख रहे हैं उससे एक फ़्रेड करने में सक्षम होंगे। पहला फ्रेड आपको एमपी 4/एमओवी (जो भी प्रारूप आप उपयोग कर रहे हैं) शीर्षलेख प्राप्त करेगा (यानी 'ftyp' परमाणु, 'चौड़ा' परमाणु, और 'mdat' परमाणु की शुरुआत)। आप चाहते हैं कि 'mdat' अनुभाग के अंदर क्या है। तो ऑफसेट जो आप डेटा को सहेजना शुरू करेंगे, वह 36 या उससे भी कम होगा।
प्रत्येक पढ़ाई आपको 0 या अधिक एवीसी एनएएल इकाइयों को प्राप्त करेगी। आप आईएसओ/आईईसी 14496-10 तालिका 7-1 से एनएएल इकाई प्रकारों की एक सूची पा सकते हैं। वे अनुलग्नक बी में निर्दिष्ट की तुलना में थोड़ा अलग प्रारूप में होंगे, लेकिन यह ठीक है। इसके अतिरिक्त, MP4/MOV फ़ाइल में केवल आईडीआर स्लाइस और गैर-आईडीआर स्लाइस होंगे। आईडीआर वह आई-फ्रेम होगा जिसे आप लटकाना चाहते हैं।
4 bytes - Size
[Size] bytes - NALU Data
data[0] & 0x1F - NALU Type
तो अब आप डेटा के लिए आप देख रहे हैं:
MP4/MOV कंटेनर म एनएएल इकाई स्वरूप इस प्रकार है।जब आप इस फ़ाइल को सहेजने के लिए जाते हैं, तो आपको एमपीवी/एमओवी कंटेनर को सही लंबाई, नमूना गिनती के साथ अपडेट करना होगा, आपको प्रत्येक नमूने के लिए सही आकार के साथ 'stsz' परमाणु को अपडेट करना होगा और चीजों को अपडेट करना होगा फिल्म की सही अवधि के साथ मीडिया हेडर और ट्रैक हेडर आदि। मैं शायद ऐसा करने की अनुशंसा करता हूं कि पहले रन पर एक नमूना कंटेनर तैयार कर रहा है कि आप उस विशेष फिल्म के उचित डेटा के साथ ओवरराइट/ओवरराइट कर सकते हैं। आप ऐसा करना चाहते हैं क्योंकि विभिन्न iDevices पर एन्कोडर्स में सभी समान सेटिंग्स नहीं हैं और 'एवीसीसी' परमाणु में एन्कोडर जानकारी होती है।
आपको इस मामले में एवीसी धारा के बारे में बहुत कुछ जानने की ज़रूरत नहीं है, इसलिए आप शायद अपने प्रयोग को ध्यान में रखकर कंटेनर प्रारूप को अपडेट करने के लिए ध्यान केंद्रित करना चाहेंगे। सौभाग्य।
Thx :) लेकिन समस्या यह है कि कैमरे से डेटा को उस तरह के बफर में रीडायरेक्ट करना है। –
एडम - क्या आपने कभी यह हल किया है कि यह कैसे करें? – jangelo42
@AdamSzeptyck: मैं कुछ हासिल करने की कोशिश कर रहा था जो आप ऊपर हासिल करना चाहते थे। यदि आप इसे हल करने में सक्षम हैं, तो क्या आप कृपया हमें बता सकते हैं कि आप इसे कैसे कर सकते हैं। –