Удалить последний записанный сегмент из AVAssetWriterInput в IOS? - PullRequest
0 голосов
/ 26 января 2019

В моем приложении захвата видео с опциями паузы и возобновления пользователь может удалить последний записанный сегмент. Для этой цели я храню примеры буферов в изменяемый массив, как это:

-(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")'

Я не смог найти решения для этого. Кто-нибудь может подсказать мне, в чем моя ошибка в этом коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...