我在录制时将录音分成不同的文件......
问题是,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