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 另一个问题。
我正在显示来自 IP 摄像机的 RTSP 流。我想用 VideoToolbox 框架替换此方法 avcodec_decode_video2
。我对视频数据处理有点陌生,所以我有点迷路...
我已经测试了 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 另一个问题。