我正在录音时将录音分成不同的文件......
问题是,captureOutput视频和音频样本缓冲区不对应1:1(这是逻辑的)
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
AUDIO START: 36796.833236847 | DURATION: 0.02321995464852608 | END: 36796.856456802
VIDEO START: 36796.842089239 | DURATION: nan | END: nan
AUDIO START: 36796.856456805 | DURATION: 0.02321995464852608 | END: 36796.87967676
AUDIO START: 36796.879676764 | DURATION: 0.02321995464852608 | END: 36796.902896719
VIDEO START: 36796.875447239 | DURATION: nan | END: nan
...
所以我需要根据时间拆分音频CMSampleBufferRef
并使用第一个视频的第一个视频段和第二个视频的缓冲区的第二部分
导出时可以使用AVMutableComposition
和AVAssetExportSession
执行操作,但问题是captureOutput:
中的缓冲区级别,因此录制文件不需要更多处理
更新
看起来有3个选项,尚未成功实施
1) CMSampleBufferCopySampleBufferForRange
看似CMSampleBufferCopySampleBufferForRange
是可行的方法,但我正在努力计算最后一个参数sampleRange
......
2) CMSampleBufferCreateCopyWithNewTiming
完全迷失了这个
3)看起来有一种方法可以通过使用kCMSampleBufferAttachmentKey_TrimDurationAtStart, kCMSampleBufferAttachmentKey_TrimDurationAtEnd
CMSetAttachment
来修剪缓冲区