2011-06-27 15 views
5

मैं थ्रॉटलिंग कर रहा हूं, मैं उपयोगकर्ता को आईफोन कैमरा से शॉट बनाने की अनुमति देने के लिए एक AVCaptureVideoPreviewLayer का उपयोग कर रहा हूं। इसलिए मेरे पास AVCaptureDeviceInput के रूप में इनपुट के साथ एक AVCaptureSession है, और आउटपुट को AVCaptureStillImageOutput के रूप में।फ्रेम दर को नियंत्रित करना या AVCaptureVideoPreviewLayer

मेरे पास वीडियो फ़ीड के शीर्ष पर एनिमेशन और नियंत्रण भी हैं, लेकिन ये धीमे और झटकेदार हैं क्योंकि पीछे वाला वीडियो अधिकतम फ्रेम दर पर चल रहा है और सीपीयू/जीपीयू को बांध रहा है।

मैं AVCaptureVideoPreviewLayer की फ्रेम दर को कैप करना चाहता हूं। मुझे लगता है कि AVCaptureVideoDataOutput पर minFrameDuration प्रॉपर्टी है, लेकिन मुझे AVCaptureVideoPreviewLayer पर कुछ भी नहीं मिल रहा है।

उत्तर

4

मुझे नहीं लगता कि समस्या फ्रेम दर से जुड़ा हुआ है। तो मैं आपके ऐप के प्रदर्शन को बेहतर बनाने के लिए कुछ युक्तियों का सुझाव दूंगा:

1) AVCaptureVideoPreviewLayer यह कैलियर का एक उप-वर्ग है जो कैमरे से आउटपुट प्रदर्शित करता है, इसलिए इसकी फ्रेम दर को कैप करना असंभव है।

2) जांचें कि क्या आपने अपनी एनिमेशन को सही जगह पर रखा है, यह इस बात पर निर्भर करता है कि आपके पास किस तरह के एनिमेशन हैं, यदि यह कैलियर है तो एनीमेशन परत आपके मुख्य कैनवास दृश्य परत का एक उपन्यास होना चाहिए (AVCaptureVideoPreviewLayer नहीं !!!), यदि यह UIView है, तो यह आपके मुख्य कैनवास दृश्य का सबव्यूव होना चाहिए।

3) आप सत्र पूर्व निर्धारित सेट करके अपने एप्लिकेशन के प्रदर्शन में सुधार कर सकते हैं:

[captureSession setSessionPreset:AVCaptureSessionPresetLow]; 

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

4) मैंने अपना स्वयं का टेस्ट ऐप बनाया है, जहां यादृच्छिक एनीमेशन वीडियो पूर्वावलोकन परत ओवरले करता है (लेकिन यह मेरे मुख्य दृश्य का सबव्यूव है !!!) और मेरे पुराने आईपॉड पर भी सब कुछ आसान हो गया, मैं आपको एक कोड दे सकता हूं कब्जा सत्र के प्रारंभ के लिए:)

// Create a capture session 
self.captureSession = [AVCaptureSession new]; 
if([captureSession canSetSessionPreset:AVCaptureSessionPresetHigh]){ 
    [captureSession setSessionPreset:AVCaptureSessionPresetHigh]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Find a suitable capture device 
AVCaptureDevice *cameraDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

// Create and add a device input 
NSError *error = nil; 
AVCaptureDeviceInput *videoInput = [AVCaptureDeviceInput deviceInputWithDevice:cameraDevice error:&error]; 
if([captureSession canAddInput:videoInput]){ 
    [captureSession addInput:videoInput]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Create and add a device still image output 
AVCaptureStillImageOutput *stillImageOutput = [AVCaptureStillImageOutput new]; 
[stillImageOutput addObserver:self forKeyPath:@"capturingStillImage" options:NSKeyValueObservingOptionNew context:AVCaptureStillImageIsCapturingStillImageContext]; 
if([captureSession canAddOutput:stillImageOutput]){ 
    [captureSession addOutput:stillImageOutput]; 
} 
else{ 
    // HANDLE ERROR 
} 

// Setting up the preview layer for the camera 
AVCaptureVideoPreviewLayer *previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:captureSession]; 
previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; 
previewLayer.frame = self.view.bounds; 

// ADDING FINAL VIEW layer TO THE CAMERA CANVAS VIEW sublayer 
[self.view.layer addSublayer:previewLayer]; 

// start the session 
[captureSession startRunning]; 

5 और अंत में, iOS5 में आप न्यूनतम और अधिकतम वीडियो फ्रेम दर निर्धारित कर सकते हैं, क्या आपके ऐप्स का भी के प्रदर्शन में सुधार कर सकते हैं, मुझे लगता है यह है कि तुम क्या कहा है।

http://developer.apple.com/library/mac/#releasenotes/AudioVideo/RN-AVFoundation/_index.html

आशा है कि मेरे इस सवाल का जवाब स्पष्ट था: इस लिंक (न्यूनतम और अधिकतम वीडियो फ्रेम दर सेटिंग) की जाँच करें।

शुभकामनाएं,

Artem

+0

आपके उत्तर के लिए बहुत धन्यवाद, यह एक पुराने सवाल है, लेकिन iOS 5 में योग की खबर बहुत सहायक हैं। – joerick

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