2010-10-08 2 views
2

Учитывая выборку буфера H.264, есть способ извлечь кадр, который он представляет в виде изображения?Извлечение изображения из данных образца H.264 (Objective-C/Mac OS X)

Я использую QTKit для захвата видео с камеры и использования QTCaptureMovieFileOutput в качестве выходного объекта.

Я хочу что-то похожее на CVImageBufferRef, которое передается в качестве параметра для делегата метода QTCaptureVideoPreviewOutput. По какой-то причине выход файла не содержит CVImageBufferRef.

Что я могу сделать, это QTSampleBuffer, который, так как я установил его в параметрах сжатия, содержит образец H.264.

Я видел, что на iPhone, CoreMedia и AVFoundation может быть использован для создания CVImageBufferRef из данного CMSampleBufferRef (который, я думаю, как можно ближе к QTSampleBuffer, как я смогу получить) - но это Mac, а не iPhone.

Ни CoreMedia, ни AVFoundation не находятся на Mac, и я не вижу никакого способа выполнить ту же задачу.

Что мне нужно - это изображение (будь то CVImageBufferRef, CIImage или NSImage не имеет значения) из текущего кадра образца H.264, который предоставляется мне по вызову объекта Output.


Расширенная информация (от комментариях ниже)

Я выложила связанный с этим вопрос, который фокусирует на первоначально вопрос - пытаются просто играть поток выборок видео с использованием QTKit: Playing a stream of video data using QTKit on Mac OS X

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

Я могу использовать QTCapturePreviewVideoOutput (или распаковать), чтобы получить несжатые изображения рамки в виде CVImageBufferRef.

Однако эти изображения ссылки нужно сжатия, масштабирования и преобразования в NSImage с, прежде чем они любое использование для меня, следовательно, попытка получить уже масштабируется и сжатый кадр из рамок, используя QTCaptureMovieFileOutput (что позволяет сжатие и размер изображения, который должен быть установлен до начала съемки), что избавляет меня от необходимости выполнять дорогостоящие операции сжатия, масштабирования и преобразования, которые убивают CPU.

+1

Начиная с OS X 10.7, CoreMedia и AVFoundation доступны на Mac. –

ответ

0

Не работает ли в этом случае раздел руководства Creating a Single-Frame Grabbing Application руководства по программированию приложений QTKit?

+0

Это то, что я делаю сейчас, но использую 'QTCaptureVideoPreviewOutput', а не распакованный, поскольку мне все равно, если кадры будут удалены. В настоящее время я беру кадр, уменьшаю его размер, сжимаю его в формате JPEG, а затем продолжаю. Тем не менее, я бы предпочел, чтобы инфраструктура справлялась с сжатием и уменьшением изображения и просто справлялась с тем, что она мне дала. – Jasarien

+0

Я просто проснулся и сделал кофе (так что не цитируйте меня), но я думал, что в прошлый раз, когда я читал QTKit, вы можете добавить несколько выходов. Очевидно, что более медленные системы могут запускаться, но поскольку вы не беспокоитесь о потерянных кадрах ... –

+0

Это возможно, да, но я не вижу, как это помогает в этой ситуации. Мне не нужны * более * выходы, мне нужен более эффективный способ получения сжатого изображения кадра каждый раз при вызове обратного вызова. – Jasarien