QTKit capture: какой размер кадра использовать? - PullRequest
2 голосов
/ 13 мая 2011

Я пишу простое приложение, похожее на видео-мессенджер, и поэтому мне нужно получить кадры некоторого компромиссного размера, чтобы иметь возможность вписаться в имеющуюся полосу пропускания и при этом сохранить захваченное изображение без искажений.

Для получения фреймов я использую класс QTCaptureVideoPreviewOutput и успешно получаю фреймы в обратном вызове didOutputVideoFrame.(Мне нужны необработанные кадры - в основном потому, что я использую собственный кодировщик, поэтому я просто хотел бы получить «сырые растровые изображения»).

Проблема в том, что для этих новых камер iSight я получаю буквально огромные кадры.

К счастью, эти классы для захвата необработанных кадров (QTCaptureVideoPreviewOutput) предоставляют метод setPixelBufferAttributes, который позволяет указать, какой тип кадров я хотел бы получить.Если мне посчастливится угадать какой-либо размер кадра, который поддерживает камера, я могу указать его, и QTKit переключит камеру в указанный режим.Если мне не повезло - я получаю размытое изображение (потому что оно было растянуто / сжато) и, скорее всего, непропорционально.

Я искал через lists.apple.com и stackoverflow.com,Ответ таков: «В настоящее время Apple не предоставляет функциональные возможности для получения исходных размеров кадра камеры».Ну, я ничего не могу с этим поделать.

Может быть, я должен предоставить в настройках наиболее распространенные размеры кадров, и пользователь должен попробовать их, чтобы увидеть, что ему подходит?Но каковы эти общие размеры кадра?Где я могу получить список размеров кадра, которые обычно генерируют камеры UVC?

Для тестирования моего приложения я использую UVC-совместимую камеру, но не iSight.Я предполагаю, что не каждый пользователь также использует iSight, и я уверен, что даже между разными моделями камеры iSight имеют разные размеры кадра.

Или, может быть, мне следует переключить камеру в режим по умолчанию, сгенерировать несколько кадров,посмотрите, какие размеры он генерирует, и, по крайней мере, у меня будут некоторые пропорции?Это выглядит как настоящий взлом, и не кажется естественным.И изображение, скорее всего, снова будет размыто.

Не могли бы вы помочь мне, как вы справились с этой проблемой?Я уверен, что я не первый, кто сталкивается с этим.Какой подход вы бы выбрали?Спасибо, Джеймс

1 Ответ

0 голосов
/ 26 августа 2011

Вы правы, камера iSight выдает огромные кадры. Однако я сомневаюсь, что вы можете переключить камеру в другой режим, установив атрибуты пиксельного буфера. Скорее всего, вы устанавливаете режим обработки кадров в QTCaptureVideoPreviewOutput. Посмотрите на QTCaptureDecompressedVideoOutput, если вы еще этого не сделали. Мы также используем пример буфера, чтобы получить размер кадра. Так что я бы не сказал, что это хак. Более естественным способом было бы создать собственный Quicktime-компонент, который реализует ваш собственный алгоритм кодирования. В этом случае Quicktime сможет использовать внутри QTCaptureMovieFileOutput во время сеанса захвата. Это был бы правильный, но и трудный путь.

...