VTCompressionSessionEncodeFrame返回OSStatus错误代码-12780



我有一个关于在ios8上的VideoToolbox中使用VTCompressionSession的问题。

我的VTCompressionSession设置正确,没有返回错误代码。然而,当我尝试使用VTCompressionSessionEncodeFrame对我的帧进行编码时,我得到了一个OSStatus错误代码-12780。我找不到对这种错误代码的任何定义或解释。有人有什么想法吗?

以下是我的代码片段:

CVPixelBufferRef input_frame_buffer_;
void* plane_ptrs[3] = {frame->channel[0], frame->channel[1], frame->channel[3]};
size_t plane_widths[3] = {frame->header.width,
   frame->header.width / 2, frame->header.width / 2};
size_t plane_heights[3] = {frame->header.height,
    frame->header.height / 2, frame->header.height / 2};
size_t plane_bytes_per_row[3] = {frame->stride[0], frame->stride[1], frame->stride[2]};

CVReturn pixel_buffer_status =
      CVPixelBufferCreateWithPlanarBytes(kCFAllocatorDefault,
      frame->header.width,
      frame->header.height,
      (OSType) kCVPixelFormatType_420YpCbCr8Planar,
      frame->channel[0],
      0,
      3,
      plane_ptrs,
      plane_widths,
      plane_heights,
      plane_bytes_per_row,
      &MyPixelBufferReleaseCallback,
      (void*)this,
      nullptr,
      &input_frame_buffer_);
 if (pixel_buffer_status != kCVReturnSuccess) {
      logger_->Error("CVPixelBufferCreateWithBytes failed.");
      return;
   }
  VTEncodeInfoFlags info_flags;

  OSStatus status = VTCompressionSessionEncodeFrame(session_,
      input_frame_buffer_, frame->header.pts, kCMTimeInvalid, nullptr,
      mySourceFrameRefCon,
      &info_flags);

我以前也有同样的问题,你可以按照下面的步骤操作

  1. 列出项目

//1。获取SPS、PPS表单流数据,并创建CMFormatDescription、VTDecompressionSession

//2。创建CMFormatDescription

//3。创建VT解压缩会话

//4。将NALUnit有效载荷放入CMBlockBuffer

//5。确保将分隔符代码替换为4字节长度的代码(包括单位代码的NalUnit的长度)

//6。创建CMSampleBuffer

//7。使用VTDecompressionSessionDecodeFrame

//8。使用VideoToolBox解压缩帧回调以获得CVImageBufferRef

你可以在我的git中找到参考资料https://github.com/htaiwan/HWDecoder

看起来需要为dataSize参数传递一个值。请参阅我在苹果开发者论坛上的回答和以下示例代码:https://gist.github.com/roxlu/79e50d2ac869763d712d

roxlu

解决方案是使用VTCompressionSesion中的像素缓冲池。

https://devforums.apple.com/message/1063536#1063536

相关内容

最新更新