2011-04-11 9 views
23

मैं ओपनजीएल में एक यूवी मैप किए गए 3 डी ऑब्जेक्ट पर एक वीडियो फ़ाइल की सामग्री को प्रदर्शित करने की कोशिश कर रहा हूं (चलिए अभी ऑडियो के बिना कहें)। मैंने ओपनजीएल में काफी कुछ किया है, लेकिन मुझे पता नहीं है कि वीडियो फाइल हैंडलिंग में कहां से शुरू करना है, और कैमरे से वीडियो फ्रेम प्राप्त करने के लिए वहां के अधिकांश उदाहरण हैं, जो कि मैं बाद में नहीं हूं।आईओएस 4: मैं ओपनजीएल बनावट के रूप में वीडियो फ़ाइल का उपयोग कैसे करूं?

इस समय मुझे लगता है कि अगर मैं वीडियो के व्यक्तिगत फ्रेम को CGImageRef के रूप में सेट कर सकता हूं, तो मैं सोच रहा हूं कि यह कैसे करें? शायद ऐसा करने के बेहतर तरीके भी हैं? आईओएस पर वीडियो प्लेबैक के लिए मुझे कहां से शुरू करना चाहिए और सबसे सीधी आगे फ़ाइल प्रारूप क्या है? .mov?

उत्तर

32

माफी; एक आईफोन पर टाइपिंग तो मैं थोड़ा सा संक्षिप्त हो जाऊंगा।

अपने वीडियो के यूआरएल के साथ एक AVURLASSet बनाएं - जो आपको पसंद है तो स्थानीय फ़ाइल यूआरएल हो सकता है। क्विकटाइम कुछ भी ठीक कर सकता है, इसलिए H.264 में एमओवी या एम 4 वी शायद सबसे अच्छा स्रोत है।

AVMediaTypeVideo प्रकार के ट्रैक के लिए संपत्ति पूछें। आपको केवल एक प्राप्त करना चाहिए जब तक कि आपके स्रोत वीडियो में ऐसा कुछ कैमरा कोण न हो, तो बस ऑब्जेक्ट एट इंडेक्स: 0 आपको AVAssetTrack देना चाहिए।

AVAssetReaderTrackOutput बनाने के लिए इसका उपयोग करें। शायद आप kCVPixelFormatType_32BGRA निर्दिष्ट करना चाहते हैं।

संपत्ति का उपयोग करके एक AVAssetReader बनाएं; एक आउटपुट के रूप में संपत्ति पाठक ट्रैक आउटपुट संलग्न करें। और कॉल रीडिंग कॉल करें।

इसके बाद से आप नए CMSampleBuffers प्राप्त करने के लिए ट्रैक आउटपुट पर copyNextSampleBuffer को कॉल कर सकते हैं, जिससे आप उसी स्थिति में डाल सकते हैं जैसे आप कैमरे से इनपुट ले रहे थे। तो आप इसे पिक्सेल सामग्री प्राप्त करने के लिए लॉक कर सकते हैं और उन्हें ऐप्पल के बीजीआरए एक्सटेंशन के माध्यम से ओपनजीएल में धक्का दे सकते हैं।

+8

ध्वनि के बारे में क्या? –

+0

भी धन्यवाद। यह सब पूरी तरह से काम करता है और आप बहुत अधिक एफपीएस (वीडियो डेटा दर के आधार पर) प्राप्त कर सकते हैं। –

+0

एक और धन्यवाद। यह भी मेरे लिए अच्छा काम किया। बस ध्यान दें कि आपको वीडियो प्लेबैक फ्रेम दर को स्वयं समन्वयित करना होगा। –

-1

शायद आपको प्लेयर परत का उपयोग करना होगा और इसकी सामग्री को बिटमैप संदर्भ में फ़्लैट करना होगा। AVPlayerLayer के लिए प्रलेखन देखें। हालांकि प्रदर्शन बहुत खराब हो सकता है।

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