我正在使用AvFoundation & AVCaptureVideoDataOutputSampleBufferDelegate录制视频。
我需要在视频中实现缩放功能被记录。我正在使用下面的委托方法。
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection我使用它来获取视频帧,因为在将其追加到AVAssetWriterInput之前,我需要在其上添加文本和图像,使用
[assetWriterVideoIn appendSampleBuffer:sampleBuffer]我认为执行缩放的唯一方法是缩放和裁剪我从委托方法中获得的"(CMSampleBufferRef)sampleBuffer“。
在这件事上请帮帮我。我需要知道缩放和裁剪"CMSampleBufferRef“的可能方法。
发布于 2014-07-26 02:48:38
一种解决方案是将CMSampleBuffer引用转换为CIImage,然后缩放该引用并将其写回CVPixelBufferRef并附加该引用。
你可以在这里看到如何做到这一点,它包含了代码结构。
另一种方法是使用图层指令缩放视频,如下所示:
AVMutableVideoCompositionLayerInstruction *layerInstruction =
[AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstruction];
layerInstruction.trackID = mutableCompositionTrack.trackID;
[layerInstruction setTransform:CGAffineTransformMakeScale(2.0f,2.0f) atTime:kCMTimeZero];这将告诉合成从视频开头开始将mutableCompositionTrack (或用于轨迹的任何变量名)缩放2.0倍。
现在,当您合成视频时,添加图层说明的数组,您将获得缩放,而无需担心操作CMSampleBuffer (它也会快得多)。
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
videoComposition.renderSize = CGSizeMake(1280, 720);
videoComposition.frameDuration = CMTimeMake(1, 30);
videoComposition.instructions = @[_instructions];https://stackoverflow.com/questions/24903595
复制相似问题