从ios中的AVAssetWriterInput删除最后记录的段?

时间:2019-01-26 05:59:17

标签: ios objective-c avfoundation

在我的应用中,使用暂停和继续选项来捕获视频时,用户可以删除最后记录的片段。为此,我将样本缓冲区存储在可变数组中,如下所示:

-(void)captureOutput:(AVCaptureOutput *)output didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {

  if(isVideoRecording) {
    if (CMTIME_IS_INVALID( startTimestamp)) {
      [assetWriter startSessionAtSourceTime:(startTimestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer))];
    }
    if(output == videoDataOutput) {
      if(videoWriterInput.isReadyForMoreMediaData) {
        if(assetWriter.status == AVAssetWriterStatusWriting) {

          [currentSegmentVideoSamples addObject:(__bridge id _Nonnull)(currentSample)];
          CFRelease(sampleBuffer);



        }
      }
    } else if(output == audioDataOutput) {

      if(audioWriterInput.isReadyForMoreMediaData) {
        if(assetWriter.status == AVAssetWriterStatusWriting) {
          [audioWriterInput appendSampleBuffer:sampleBuffer];

        }
      }
    }
  }
}

然后最终用户点击完成录制。.再次将示例缓冲区附加到AVAssetWriterInput(videoWriterInput)以完成视频。像这样

for(int i=0; i< currentSegmentVideoSamples.count ; i++) {

  CMSampleBufferRef bufer = (__bridge CMSampleBufferRef)currentSegmentVideoSamples[i];

  [videoWriterInput appendSampleBuffer:bufer];

  while (!videoWriterInput.readyForMoreMediaData) {
    [NSThread sleepForTimeInterval:0.1];
  }
}

但是在将视频样本缓冲区附加到videoWriterInput [videoWriterInput appendSampleBuffer:bufer];时,出现了这样的错误,

-[AVAssetWriterInput appendSampleBuffer:] Media type of sample buffer must match receiver's media type ("vide")'

我找不到解决方案,有人可以建议我,我在该代码中有什么错误?

0 个答案:

没有答案