Установить разрешение в QTCapture? - PullRequest
3 голосов
/ 27 апреля 2009

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

Ответы [ 3 ]

7 голосов
/ 29 апреля 2009

Как описано здесь , вы можете установить атрибуты пиксельного буфера в выходных данных вашего 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 голосов
/ 06 декабря 2009

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

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

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

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

rdar: // 7447812

0 голосов
/ 14 мая 2011

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

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

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