2012-12-18 34 views
5

पर पारदर्शिता के साथ वीडियो मैं एक आईओएस प्रोजेक्ट पर काम कर रहा हूं जो एक दूसरी स्क्रीन पर 1280x720 विंडो में सामग्री दिखाने के लिए एवी-आउट का उपयोग करता है।GPUImage वीडियो UIView

मेरे पास पृष्ठभूमि के रूप में MPMoviePlayerController का दृश्य है और UIImages और UILabels जैसे अन्य विभिन्न तत्वों के शीर्ष पर है। पृष्ठभूमि मूवी एक लूप में खेलती है।

अब मैं पूरे दृश्य को ओवरले करना चाहता हूं जिसमें सभी दृश्य तत्वों को शामिल किया गया है जिसमें एक पूर्ण फुलस्क्रीन एनीमेशन है जिसमें पारदर्शिता है ताकि अंतर्निहित दृश्य के केवल कुछ भाग दिखाई दे सकें।

मैंने पहली बार UIImageView के साथ एक पीएनजी एनीमेशन की कोशिश की। मुझे यह जानकर आश्चर्य हुआ कि वास्तव में आईफोन 5 पर काम करता है, लेकिन निश्चित रूप से पीएनजी आकार में इतने बड़े हैं कि यह बहुत अधिक रैम का उपयोग करता है और यह आईफोन 4 के नीचे सब कुछ पर दुर्घटनाग्रस्त हो जाता है। तो मुझे एक और तरीका चाहिए।

मुझे पता चला कि AVFoundation का उपयोग करके एक ही समय में दूसरी फिल्म कैसे खेलें। अभी तक, बहुत अच्छा है। अब मैं ओवरले वीडियो चला सकता हूं, लेकिन निश्चित रूप से यह अभी तक पारदर्शी नहीं है।

मैंने यह भी सीखा कि GPUImage लाइब्रेरी के साथ मैं GPUImageChromaKeyBlendFilter का उपयोग कर वीडियो के रंग को पारदर्शी बनाने के लिए फ़िल्टर कर सकता हूं और फिर इसे किसी अन्य वीडियो के साथ जोड़ सकता हूं।

जो मुझे अभी तक समझ में नहीं आता है, वह मुझे प्राप्त करने के लिए मेरे मामले में इसे लागू करने का सबसे अच्छा तरीका है।

क्या मैं शीर्ष वीडियो के नीचे पूरे दृश्य पदानुक्रम का उपयोग GPUImageChromaKeyBlendFilter और एक ग्रीन्सस्क्रीन-शैली वीडियो के दूसरे इनपुट के रूप में कर सकता हूं और परिणाम 720p में दिखा सकता हूं? मुझे यह कैसे करना है?

या GPUImageChromaKeyFilter का उपयोग करना बेहतर होगा और बस ग्रीन्सस्क्रीन-शैली वीडियो फ़िल्टर करें, और इसे अन्य सभी दृश्यों के ऊपर एक दृश्य में चलाएं? क्या इस वीडियो की पृष्ठभूमि पारदर्शी होगी?

आपकी मदद के लिए धन्यवाद!

उत्तर

3

आपको AVFoundation.framework का उपयोग करके एक कस्टम प्लेयर बनाना होगा और फिर अल्फा चैनल के साथ एक वीडियो का उपयोग करना होगा। AVFoundation ढांचे MPMedia ढांचे की कई सीमाओं के बिना वीडियो की अधिक मजबूत हैंडलिंग की अनुमति देता है। एक कस्टम प्लेयर बनाना उतना कठिन नहीं है जितना लोग इसे बाहर करते हैं। मैं इस पर एक ट्यूटोरियल यहाँ लिखा है: http://www.sdkboy.com/?p=66

अन्य तरीके से ..........

ढांचे में SimpleVideoFileFilter उदाहरण दिखाता है कि एक फिल्म लोड करने के लिए, यह फ़िल्टर करते हैं, और एनकोड यह वापस डिस्क पर। संशोधन करना इस क्रोमा कुंजीयन प्रदर्शन करने के लिए देता है निम्नलिखित:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"]; 
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 

filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0]; 
[filter setThresholdSensitivity:0.4]; 

[movieFile addTarget:filter]; 

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
[sourcePicture addTarget:filter]; 

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; 
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; 
[filter addTarget:movieWriter]; 

[movieWriter startRecording]; 
[movieFile startProcessing]; 

[movieWriter setCompletionBlock:^{ 
    [filter removeTarget:movieWriter]; 
    [movieWriter finishRecording]; 
}]; 

उपरोक्त कोड, आवेदन के संसाधनों sample.m4v कहा जाता है से एक फिल्म लोड होगा एक क्रोमा फिल्टर है कि के साथ शुद्ध नीले रंग से दूर प्रमुख के लिए निर्धारित है में फ़ीड 0.4 की संवेदनशीलता, क्रोमो कुंजीिंग के लिए उपयोग करने के लिए पृष्ठभूमि छवि संलग्न करें, और उसके बाद उसे मूवी एन्कोडर को भेजें जो एप्लिकेशन/दस्तावेज़ निर्देशिका में Movie.m4v लिखता है।

आप अपनी जरूरतों के अनुरूप थ्रेसहोल्ड और विशिष्ट ब्लू टिंट समायोजित कर सकते हैं, साथ ही इनपुट छवि को किसी अन्य मूवी या अन्य स्रोत के साथ प्रतिस्थापित कर सकते हैं। यह प्रक्रिया आईओएस डिवाइस के कैमरे से लाइव वीडियो पर भी लागू की जा सकती है, और यदि आप चाहें तो परिणाम स्क्रीन पर परिणाम प्रदर्शित कर सकते हैं।

आईफोन 4 पर आईओएस 4 चल रहा है, क्रोमा कुंजीिंग वीडियो के 640x480 फ्रेम के लिए 1.8 एमएस (500+ एफपीएस), 720 पी फ्रेम (15 एफपीएस) के लिए 65 एमएस लेता है। इन ए परिचालनों के लिए नए ए 5-आधारित डिवाइस 6-10X तेज हैं, इसलिए वे पसीने को तोड़ने के बिना 1080 पी वीडियो को संभाल सकते हैं। मैं फ्रेम अपलोड और पुनर्प्राप्ति दोनों के लिए आईओएस 5.0 के फास्ट बनावट कैश का उपयोग करता हूं, जो उस ओएस संस्करण पर 4.x से अधिक प्रोसेसिंग को तेज करता है।

मेरे बारे में एक चेतावनी यह है कि मुझे अपने मूवी एन्कोडिंग में सही रिकॉर्ड करने के लिए ऑडियो नहीं मिला है, लेकिन मैं अभी उस पर काम कर रहा हूं।

0

फ्रेमवर्क में सरल वीडियोफाइलफिल्टर उदाहरण दिखाता है कि मूवी कैसे लोड करें, इसे फ़िल्टर करें, और इसे डिस्क पर वापस एन्कोड करें। संशोधन करना इस क्रोमा कुंजीयन प्रदर्शन करने के लिए देता है निम्नलिखित:

NSURL *sampleURL = [[NSBundle mainBundle] URLForResource:@"sample" withExtension:@"m4v"]; 
movieFile = [[GPUImageMovie alloc] initWithURL:sampleURL]; 

filter = [[GPUImageChromaKeyBlendFilter alloc] init]; 
[filter setColorToReplaceRed:0.0 green:0.0 blue:1.0]; 
[filter setThresholdSensitivity:0.4]; 

[movieFile addTarget:filter]; 

UIImage *inputImage = [UIImage imageNamed:@"background.jpg"]; 
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES]; 
[sourcePicture addTarget:filter]; 

NSString *pathToMovie = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie.m4v"]; 
NSURL *movieURL = [NSURL fileURLWithPath:pathToMovie]; 
movieWriter = [[GPUImageMovieWriter alloc] initWithMovieURL:movieURL size:CGSizeMake(480.0, 640.0)]; 
[filter addTarget:movieWriter]; 

[movieWriter startRecording]; 
[movieFile startProcessing]; 

[movieWriter setCompletionBlock:^{ 
    [filter removeTarget:movieWriter]; 
    [movieWriter finishRecording]; 
}]; 

उपरोक्त कोड, आवेदन के संसाधनों sample.m4v कहा जाता है से एक फिल्म लोड होगा एक क्रोमा फिल्टर है कि के साथ शुद्ध नीले रंग से दूर प्रमुख के लिए निर्धारित है में फ़ीड 0.4 की संवेदनशीलता, क्रोमो कुंजीिंग के लिए उपयोग करने के लिए पृष्ठभूमि छवि संलग्न करें, और उसके बाद उसे मूवी एन्कोडर को भेजें जो एप्लिकेशन/दस्तावेज़ निर्देशिका में Movie.m4v लिखता है।

आप अपनी जरूरतों के अनुरूप थ्रेसहोल्ड और विशिष्ट ब्लू टिंट समायोजित कर सकते हैं, साथ ही इनपुट छवि को किसी अन्य मूवी या अन्य स्रोत के साथ प्रतिस्थापित कर सकते हैं। यह प्रक्रिया आईओएस डिवाइस के कैमरे से लाइव वीडियो पर भी लागू की जा सकती है, और यदि आप चाहें तो परिणाम स्क्रीन पर परिणाम प्रदर्शित कर सकते हैं।

आईफोन 4 पर आईओएस 4 चल रहा है, क्रोमा कुंजीिंग वीडियो के 640x480 फ्रेम के लिए 1.8 एमएस (500+ एफपीएस), 720 पी फ्रेम (15 एफपीएस) के लिए 65 एमएस लेता है। इन ए परिचालनों के लिए नए ए 5-आधारित डिवाइस 6-10X तेज हैं, इसलिए वे पसीने को तोड़ने के बिना 1080 पी वीडियो को संभाल सकते हैं। मैं फ्रेम अपलोड और पुनर्प्राप्ति दोनों के लिए आईओएस 5.0 के फास्ट बनावट कैश का उपयोग करता हूं, जो उस ओएस संस्करण पर 4.x से अधिक प्रोसेसिंग को तेज करता है।

मेरे बारे में एक चेतावनी यह है कि मुझे अपने मूवी एन्कोडिंग में सही रिकॉर्ड करने के लिए ऑडियो नहीं मिला है, लेकिन मैं अभी उस पर काम कर रहा हूं।