Я показываю RTSP-потоки с IP-камер. Я хочу заменить этот метод avcodec_decode_video2
фреймворком VideoToolbox. Я новичок в обработке видеоданных, поэтому немного потерялся...
Я протестировал оба решения из здесь и здесь, но я получаю ошибку для этого метода VTDecompressionSessionDecodeFrame
.
Error Domain=NSOSStatusErrorDomain Code=-12909 "The operation couldn’t be completed. (OSStatus error -12909.)" - -12909
Я подозреваю, что это происходит из сеанса, потому что если я вызову это VTDecompressionSessionCanAcceptFormatDescription
сразу после создания сеанса, результат будет NO
.
Вот как создается моя сессия:
VTDecompressionOutputCallbackRecord callback;
callback.decompressionOutputCallback = decompressionSessionDecodeFrameCallback;
callback.decompressionOutputRefCon = (__bridge void *)self;
NSDictionary *destinationImageBufferAttributes =[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],(id)kCVPixelBufferOpenGLESCompatibilityKey,[NSNumber numberWithInt:kCVPixelFormatType_32RGBA],(id)kCVPixelBufferPixelFormatTypeKey,nil];
OSStatus status = VTDecompressionSessionCreate(kCFAllocatorDefault, _formatDesc, NULL,
(__bridge CFDictionaryRef)destinationImageBufferAttributes,
&callback, &_decompressionSession);
Я также не уверен в данных для использования. У меня есть выбор между AVPacket.data, AVCodecContext.extradata, AVPacket.buf->data. Может ли кто-нибудь сказать мне, какой из них я должен использовать (может быть, есть другой)?
Спасибо заранее,
PS.: Это мой первый пост; дайте мне знать, если это неправильно представлено / объяснено.