我正在使用AVFoundation的AVCaptureSession
来捕获直播视频(使用RTMP protocol
发送到服务器)。
AVCaptureVideoDataOutputSampleBufferDelegate
和AVCaptureAudioDataOutputSampleBufferDelegate
的回调委托方法在以下方法中返回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
的工作原理吗?如果我做错了,还可以纠正我。