如何在iOS中每10秒使用AVAssetWriter将CMSampleBufferRef(音频+视频)转换为视频文件(.mp4或.mov)?

时间:2016-01-09 10:57:09

标签: ios objective-c iphone avfoundation avassetwriter

我正在使用AVFoundation的AVCaptureSession来捕获直播视频(使用RTMP protocol发送到服务器)。

AVCaptureVideoDataOutputSampleBufferDelegateAVCaptureAudioDataOutputSampleBufferDelegate的回调委托方法在以下方法中返回CMSampleBufferRef

- (void)captureOutput:(AVCaptureOutput *)captureOutputdidOutputSampleBuffer:(CMSampleBufferRef)sampleBufferfromConnection:(AVCaptureConnection *)connection

根据此链接的内容,我可以使用THIS LINK将此缓冲区内容转换为文件。

喜欢

NSURL *url = …;
AVAssetWriter *assetWriter = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeMPEG4 error:nil];
AVAssetWriterInput *videoInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:nil];
videoInput.expectsMediaDataInRealTime = YES;
AVAssetWriterInput *audioInput = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeAudio outputSettings:nil];
audioInput.expectsMediaDataInRealTime = YES;
if ([assetWriter canAddInput:videoInput]) {
    [assetWriter addInput:videoInput];
}
if ([assetWriter canAddInput:audioInput]) {
    [assetWriter addInput:audioInput];
}

但是我没有得到这个文件转换所涉及的确切逻辑。 didOutputSampleBuffer  是一帧逐帧捕获(未压缩)的原始数据,我想以一定的间隔将这些帧转换为单个文件。比如说每10秒钟左右。我想将此文件发送到服务器。

有人可以简单介绍一下AVAssetWriter的工作原理吗?如果我做错了,还可以纠正我。

0 个答案:

没有答案