2013-05-20 3 views
2

В моем приложении я использую AVCaptureSession для записи video.Записанное видео Кадр с использованием AVCaptureSession

При записи делается, я получаю видео размером 360 X 480.

Я установил запись слой размер 320 X 568.

Я что-то упускаю, я пробовал, но не добирался.

Может кто-нибудь руководство мне, где я должен изменить, чтобы получить записи video с размером 320 X 568

Вот мой код,

Initialization

AVCaptureDevice* device = nil; 
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; 
AVCaptureVideoDataOutput *captureOutput = [[AVCaptureVideoDataOutput alloc] init]; 
captureOutput.alwaysDiscardsLateVideoFrames = YES; 



dispatch_queue_t queue; 
queue = dispatch_queue_create("cameraQueue", NULL); 
[captureOutput setSampleBufferDelegate:self queue:queue]; 
dispatch_release(queue); 

// Установите видеовыход для хранения кадра в BGRA

NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; 
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; 
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 
[captureOutput setVideoSettings:videoSettings]; 

// И мы создаем взятием сеанс

self.captureSession = [[AVCaptureSession alloc] init]; 
self.captureSession.sessionPreset = AVCaptureSessionPresetMedium; 

if([self.captureSession respondsToSelector:@selector(addInput:)]) 
     [self.captureSession addInput:captureInput]; 
    if([self.captureSession respondsToSelector:@selector(addOutput:)]) 
     [self.captureSession addOutput:captureOutput]; 

/*We add the Custom Layer (We need to change the orientation of the layer so that the video is displayed correctly)*/ 
self.customLayer = [CALayer layer]; 
self.customLayer.frame = self.view.bounds; 

self.customLayer.transform = CATransform3DRotate(CATransform3DIdentity, M_PI/2.0f, 0, 0, 1); 
    self.customLayer.transform = CATransform3DScale(self.customLayer.transform,.7,.7,1); 
    self.customLayer.transform = CATransform3DTranslate(self.customLayer.transform,-23,0,0); 

self.customLayer.contentsGravity = kCAGravityResizeAspectFill; 
[self.view.layer addSublayer:self.customLayer]; 
[self.captureSession startRunning]; 

// Инициализация За

+0

Использование 'VideoSettings' собственности. – Buntylm

+0

убедитесь, что вы не забудете добавить iphone5 [email protected] –

+0

@Nitin, Да, я добавил [email protected] – Nikunj

ответ

0
if ([self.captureSession canSetSessionPreset:AVCaptureSessionPreset320*568]) 
    { 
     [self.captureSession setSessionPreset:AVCaptureSessionPreset320*568]; 
    } 

попробовать это.

+0

Где это вариант? AVCaptureSessionPreset320 * 568. Его дающая ошибка. – Nikunj

1

вы можете попробовать с проверкой перед этой строкой self.customLayer.frame = self.view.bounds; кода своего iphone5 или нет. если да, то установить его рамку вручную, как

вы можете проверить, как: -

#define isiPhone5 ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE

//We add the Custom Layer (We need to change the orientation of the layer so that the video is displayed correctly)*/ 

self.customLayer = [CALayer layer]; 


if(isIphone5) 
{ 
self.customLayer.frame = CGRectMake(0, 0, 320, 568); 
} 
else 
{ 
self.customLayer.frame = CGRectMake(0, 0, 320, 480); 

} 

надежду, что это поможет в вам мой Frnd

+0

Спасибо за ответ Да, я уже сделал это. Но не получится никаких изменений. – Nikunj

1

AvCaptureSessionMedium не позволит вам на 320 * 568 изображения разрешающая способность. В AVCaptureSession нет свойства для этой резолюции.

AVCaptureSessionPresetMedium используется разрешение камеры 360.000000 и 480.000000. Это разрешение по умолчанию для AVCaptureSessionPresetMedium, поэтому оно не будет работать для iPhone-5.

Если вы хотите получить изображение с более высоким разрешением на iPhone-5, вы должны использовать AVCaptureSessionPresetHigh. но он обеспечит вам разрешение изображения в формате 1980 * 1080. Так что он будет работать нормально, но увеличит размер байтов изображений.

Также вы можете проверить это:

AVCaptureSession *newCaptureSession = [[AVCaptureSession alloc] init];  

    if (IS_IPHONE5) 
    {   
       newCaptureSession.sessionPreset = AVCaptureSessionPresetHigh; 
    } 
    else 
      { 
      newCaptureSession.sessionPreset = AVCaptureSessionPresetMedium; 

      } 
Смежные вопросы