2009-04-27 3 views
3

Я записываю с веб-камеры. Камера отлично выглядит в PhotoBooth. Однако, когда я просматриваю его в своей программе с помощью QTCaptureView или записываю его в файл, он очень и очень медленный. Причина в том, что QuickTime дает мне максимально возможное разрешение 1600x1200. Как я могу заставить более разумные размеры как для моего QTCaptureView, так и для моей записи?Установите разрешение в QTCapture?

ответ

7

В качестве described here вы можете установить атрибуты буфера пикселов в выходном файле вашего QTCaptureSession, чтобы изменить разрешение захваченного видео. Например:

[[[myCaptureSession outputs] objectAtIndex:0] setPixelBufferAttributes: [NSDictionary dictionaryWithObjectsAndKeys: 
                   [NSNumber numberWithInt:480], kCVPixelBufferHeightKey, 
                   [NSNumber numberWithInt:640], kCVPixelBufferWidthKey, nil]]; 

установит разрешение видео 640x480 для первого выхода в сеансе захвата. Это также должно регулировать сами настройки камеры, чтобы вернуть кадры изображения такого размера (если они поддерживаются аппаратным обеспечением камеры).

Возможно, вы захотите использовать базовую кодировку MPEG4 вместо h.264 для записи видео в реальном времени. Это может быть установлено с помощью кода, подобного следующему:

NSArray *outputConnections = [mCaptureMovieFileOutput connections]; 
QTCaptureConnection *connection; 
for (connection in outputConnections) 
{ 
    if ([[connection mediaType] isEqualToString:QTMediaTypeVideo]) 
      [mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsSD480SizeMPEG4Video"] forConnection:connection]; 
} 

h.264 кодирование, в частности осуществление QuickTime, использует намного более мощный процессор для кодирования, чем базовый MPEG4.

3

Решение выше (setPixelBufferAttributes :) правильно устанавливает размер предварительного просмотра, но как только начинается запись фильма, изображение предварительного просмотра будет возвращено к его исходному значению (1280 x 1024 на моем MBP), если вы установили (почти) любые параметры сжатия.

Если это было только во время видеозаписи, это было бы одно, но как только запись будет завершена, дальнейшие вызовы setPixelBufferAttributes не будут иметь никакого эффекта.

Таким образом, вы можете изменить размер предварительного просмотра, если вы не планируете выполнять какую-либо фактическую сжатую запись видео.

Это 10.5.8/9L30, MBP с GeForce 8600M. Любая опция сжатия, кроме без сжатия, или QTCompressionOptionsSD240SizeH264Video прерывается, как описано выше.

rdar: // 7447812

0

Чтобы добавить больше информации об этой теме:

вы не specifiy непосредственно может определение на стороне захвата. Скорее, это результат сеанса захвата, который определяет определение. например

  • Если вы запишитесь в QtCaptureDecompressedVideoOutput, вы должны указать определение этого объекта.