H.264:VTDecompressionSessionDecodeFrame 失败,代码为 12909

H.264 : VTDecompressionSessionDecodeFrame fails with code 12909

我正在显示来自 IP 摄像机的 RTSP 流。我想用 VideoToolbox 框架替换此方法 avcodec_decode_video2。我对视频数据处理有点陌生,所以我有点迷路...

我已经测试了 and here 中的两种解决方案,但我以这种方法 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.: 这是我的第一个 post ;如果不正确请告诉我 presented/explained.

我已成功获得此方法的一个成功状态。事实证明我有索引问题并且我粘贴的代码有一些错误(至少,它不适合我的情况,特别是管理 NALU 类型 1 和 5)。

我还有一个问题,因为所有其他调用 returns 都失败了,但我想我必须 post 另一个问题。