2013-04-18 1 views
5

Мне нужно обработать каждый кадр захваченного видеокадра, хотя AVCaptureDevice.formats предоставил столько разных размеров размеров рамки, кажется, AVCaptureSession поддерживает только те размеры кадров, которые определены в пресетах.Как использовать пользовательское разрешение видео при использовании AVFoundation и AVCaptureVideoDataOutput на mac

Я также попытался установить не AVCaptureDevice.activeFormat перед тем AVCaptureInputDevice или после того, как, независимо от того, какие настройки я поставил, если установить AVCaptureSessionPresetHigh в AVCaptureSession, она всегда дает мне кадр 1280x720. Похоже, если я установил AVCaptureSessionPreset 640x480, тогда я могу получить только размер кадра 640x480.

Итак, как я могу установить собственный размер видеофрагмента, например 800x600? Используя Media Foundation под Windows или V4L2 под Linux, легко установить любой пользовательский размер кадра при захвате.

похоже не возможно это под mac.

+1

Помог ли вам любой из нижеприведенных ответов? – Stavash

ответ

0

Используйте свойство videoSettings для AVCapturwVideoDataOutput, чтобы описать формат, ширину и высоту пикселя. В словаре.

1

kCVPixelBufferWidthKey и kCVPixelBufferHeightKey варианты на AVCaptureVideoDataOutput объект. Минимальный образец, как показано ниже (добавьте проверку ошибок).

_sessionOutput = [[AVCaptureVideoDataOutput alloc] init]; 

NSDictionary *pixelBufferOptions = [NSDictionary dictionaryWithObjectsAndKeys: 
           [NSNumber numberWithDouble:width], (id)kCVPixelBufferWidthKey, 
           [NSNumber numberWithDouble:height], (id)kCVPixelBufferHeightKey, 
           [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA], (id)kCVPixelBufferPixelFormatTypeKey, 
           nil]; 
[_sessionOutput setVideoSettings:pixelBufferOptions]; 

Примечание: Эта ширина/высота превысит ширину/высоту предварительной настройки сеанса (если она отличается).

+2

Это не работает. Как сказал @Bourne, «единственным поддерживаемым сейчас ключом является ключ kCVPixelBufferPixelFormatTypeKey». Если вы попробуете свой код, вы получите сообщение об ошибке: «Словарь видеозамены содержит один или несколько неподдерживаемых (проигнорированных) ключей». – eyuelt

+0

@eyuelt Это работает. Просьба посмотреть образец на странице https://github.com/kiranpradeep/cameraResolution – Kiran

+0

Вы правы. Он работает на OSX. Извините, я не понял, что этот вопрос был для OSX. Я искал решение этой проблемы на iOS. – eyuelt

1

AFAIK нет способа сделать это. Весь код, который я видел для захвата видео, использует пресеты.

The documentation for AVCaptureVideoDataOutput для свойства настроек видео говорит

Единственный ключ в настоящее время поддерживается является ключом kCVPixelBufferPixelFormatTypeKey.

так что другие ответы на передачу в настройках видео не будут работать, и они просто проигнорируют эти параметры.

+0

Это работает. Может быть недокументировано. Просьба посмотреть образец на странице https://github.com/kiranpradeep/cameraResolution – Kiran

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