Por que o CMSampleBufferGetImageBuffer retorna NULL

Eu construí um código para processar arquivos de vídeo no OSX, quadro a quadro. Segue-se uma extracção do código que cria OK, abre o ficheiro, localiza a faixa de vídeo (apenas faixa) e começa a ler CMSampleBuffers sem problemas. No entanto, cada CMSampleBufferRef eu obter retorna NULL quando tento extrair o quadro de buffer de pixels. Não há nenhuma indicação na documentação do iOS sobre o motivo pelo qual eu poderia esperar um valor de retorno NULL ou como eu poderia esperar para corrigir o problema. Isso acontece com todos os vídeos em que eu testei, independentemente da fonte de captura ou do CODEC.

Qualquer ajuda muito apreciada.

NSString *assetInPath = @"/Users/Dave/Movies/movie.mp4";
NSURL *assetInUrl = [NSURL fileURLWithPath:assetInPath];
AVAsset *assetIn = [AVAsset assetWithURL:assetInUrl];

NSError *error;
AVAssetReader *assetReader = [AVAssetReader assetReaderWithAsset:assetIn error:&error];
AVAssetTrack *track = [assetIn.tracks objectAtIndex:0];
AVAssetReaderOutput *assetReaderOutput = [[AVAssetReaderTrackOutput alloc]
                                              initWithTrack:track
                                              outputSettings:nil];
[assetReader addOutput:assetReaderOutput];

// Start reading
[assetReader startReading];

CMSampleBufferRef sampleBuffer;
do {
       sampleBuffer = [assetReaderOutput copyNextSampleBuffer];

       /**
        ** At this point, sampleBuffer is non-null, has all appropriate attributes to indicate that
        ** it's a video frame, 320x240 or whatever and looks perfectly fine. But the next
        ** line always returns NULL without logging any obvious error message
        **/

       CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

       if( pixelBuffer != NULL ) {
           size_t width = CVPixelBufferGetWidth(pixelBuffer);
           size_t height = CVPixelBufferGetHeight(pixelBuffer);
           CVPixelBufferLockBaseAddress(pixelBuffer, 0);
           ...
           other processing removed here for clarity
        }
} while( ... );

Para ser claro, tirei todo o código de verificação de erros, mas nenhum problema estava sendo indicado nesse código. Ou seja, o AVAssetReader está lendo, CMSampleBufferRef parece bem etc.

questionAnswers(3)

yourAnswerToTheQuestion