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

时间:2016-02-16 14:12:16

标签: ios h.264 video-toolbox

我正在从IP摄像头显示RTSP流。我想用VideoToolbox框架替换此方法avcodec_decode_video2。我对视频数据处理有点新意,所以我有点失落......

我已经测试了来自herehere的两种解决方案,但最终导致此方法失败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:这是我的第一篇文章;如果没有正确呈现/解释,请告诉我。

1 个答案:

答案 0 :(得分:1)

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

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