2

我在录制时将录音分成不同的文件......

问题是,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根据时间分割音频并将第一段用于第一个视频,将缓冲区的第二部分用于第二个视频

导出时也可以做一些事情,AVMutableCompositionAVAssetExportSession问题是关于 中的缓冲区级别captureOutput:,因此记录器文件不需要更多处理


更新:

看起来像 3 个选项,尚未成功实施

1)CMSampleBufferCopySampleBufferForRange

看起来CMSampleBufferCopySampleBufferForRange是要走的路,但我正在努力计算最后一个参数sampleRange......

2)CMSampleBufferCreateCopyWithNewTiming

用这个很迷失

3)看起来有一种方法可以通过提供kCMSampleBufferAttachmentKey_TrimDurationAtStart, kCMSampleBufferAttachmentKey_TrimDurationAtEnd使用来修剪缓冲区CMSetAttachment

4

0 回答 0