У меня есть функция, которая принимает CVImageBufferRef и передает ее моей VTCompressionSession для обработки.Код ошибки VTCompressionSessionEncodeFrame -12902
Запуск VTCompressionSession и мой вызов для VTCompressionSessionCreate успешно завершен.
Я извлечения видео URL из библиотеки фотографий и ее обработки с помощью следующих действий:
- (void)processImageBuffersFromURL:(NSURL *)url withBlock:(void (^)(CVImageBufferRef bufferRef))block {
AVAsset *asset = [AVAsset assetWithURL:url];
AVAssetTrack *track = [[asset
tracksWithMediaType:AVMediaTypeVideo]
objectAtIndex:0];
AVAssetReaderTrackOutput
*readerTrack = [AVAssetReaderTrackOutput
assetReaderTrackOutputWithTrack:track
outputSettings:@{(id)kCVPixelBufferPixelFormatTypeKey: @(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)}];
AVAssetReader *reader = [AVAssetReader assetReaderWithAsset:asset
error:nil];
[reader addOutput:readerTrack];
[reader startReading];
CMSampleBufferRef sample = NULL;
while ((sample = [readerTrack copyNextSampleBuffer])) {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sample);
block(imageBuffer);
}
}
блок в основном только вызывает
SInt32 status = VTCompressionSessionEncodeFrame(_compressionSession, imageBuffer, CMTimeMake(self.currentFrameNumber++, 30), kCMTimeInvalid, NULL, (__bridge void *)self, NULL);
и статус -12902. Я просмотрел this site для получения информации о статусе, и я не могу найти другую релевантную информацию. Сайт говорит, что ошибка kVTParameterErr
.
My VTCompressionOutputCallback не вызывается.
Может кто-нибудь объяснить этот код ошибки для меня?