В моем приложении захвата видео с опциями паузы и возобновления пользователь может удалить последний записанный сегмент. Для этой цели я храню примеры буферов в изменяемый массив, как это:
-(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")'
Я не смог найти решения для этого. Кто-нибудь может подсказать мне, в чем моя ошибка в этом коде?