我正在显示来自 IP 摄像机的 RTSP 流。我想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.:这是我的第一篇文章;让我知道它是否没有正确呈现/解释。