VTCompressionSessionEncodeFrame返回OSStatus错误代码-12780

时间:2014-10-21 07:28:23

标签: ios8 video-encoding

我有一个关于在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);

3 个答案:

答案 0 :(得分:1)

之前我遇到同样的问题,您可以按照以下步骤操作

  1. 列表项
  2. // 1.获取SPS,PPS表单流数据,并创建CMFormatDescription,VTDecompressionSession

    // 2.创建CMFormatDescription

    // 3.创建VTDecompressionSession

    // 4.将NALUnit有效负载转换为CMBlockBuffer

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

    // 6.创建CMSampleBuffer

    // 7.使用VTDecompressionSessionDecodeFrame

    // 8.使用VideoToolBox解压缩Frame CallBack获取CVImageBufferRef

    你可以在我的git https://github.com/htaiwan/HWDecoder

    中获得参考

答案 1 :(得分:0)

看起来您需要传递dataSize参数的值。请参阅Apple开发者论坛上的答案以及此示例代码:https://gist.github.com/roxlu/79e50d2ac869763d712d

roxlu

答案 2 :(得分:0)

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

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