Важность AVAssetWriterInputPixelBufferAdaptor в AVAssetWriter

Я пытаюсь вывести видео, снятое с камеры, с помощью AVAssetWriter.

Я следую некоторым примерам, в которых не используется AVAssetWriterInputPixelBufferAdaptor (Запись видео с помощью AVAssetWriter) и некоторые из них (AVCaptureSession получили только видеобуфер).

Основываясь на ссылках Apple, я интерпретировал цель AVAssetWriterInputPixelBufferAdaptor (или CVPixelBuffer, CVPixelBufferPool) в целом как эффективный способ буферизации входящих пикселей в памяти. На практике насколько важно использовать это при записи видеовыхода с помощью AVAssetWriter? Кажется, я могу заставить базовую версию работать без использования адаптера, но я хотел немного больше понять преимущества / намерения использования AVAssetWriterInputPixelBufferAdaptor в целом.


person jayOrange    schedule 06.04.2018    source источник


Ответы (1)


Пользуюсь видеозаписью без PixelBufferAdaptor уже несколько лет без проблем. Я в основном использую этот код:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer  fromConnection:(AVCaptureConnection *)connection{
     if (videoWriterInput.readyForMoreMediaData) {
         [videoWriterInput appendSampleBuffer:sampleBuffer];
     }
}

Я считаю, что, поскольку CMSampleBufferRef содержит информацию о времени, его можно записать напрямую. Принимая во внимание, что если у вас есть CVPixelBuffer, вы должны добавить информацию о времени через адаптер. Поэтому, если вы выполняете некоторую обработку изображений перед записью, вы получите CVPixelBuffer и вам придется использовать адаптер. Адаптер также может добавить некоторые возможности буферизации для CVPixelBuffer, если ваша обработка требует времени.

person Sten    schedule 12.04.2019