在我的应用中,使用暂停和继续选项来捕获视频时,用户可以删除最后记录的片段。为此,我将样本缓冲区存储在可变数组中,如下所示:
-(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")'
我找不到解决方案,有人可以建议我,我在该代码中有什么错误?