首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩放和裁剪CMSampleBufferRef

缩放和裁剪CMSampleBufferRef
EN

Stack Overflow用户
提问于 2014-07-23 14:49:02
回答 1查看 1.7K关注 0票数 0

我正在使用AvFoundation & AVCaptureVideoDataOutputSampleBufferDelegate录制视频。

我需要在视频中实现缩放功能被记录。我正在使用下面的委托方法。

代码语言:javascript
复制
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection

我使用它来获取视频帧,因为在将其追加到AVAssetWriterInput之前,我需要在其上添加文本和图像,使用

代码语言:javascript
复制
[assetWriterVideoIn appendSampleBuffer:sampleBuffer]

我认为执行缩放的唯一方法是缩放和裁剪我从委托方法中获得的"(CMSampleBufferRef)sampleBuffer“。

在这件事上请帮帮我。我需要知道缩放和裁剪"CMSampleBufferRef“的可能方法。

EN

回答 1

Stack Overflow用户

发布于 2014-07-26 02:48:38

一种解决方案是将CMSampleBuffer引用转换为CIImage,然后缩放该引用并将其写回CVPixelBufferRef并附加该引用。

你可以在这里看到如何做到这一点,它包含了代码结构。

Adding filters to video with AVFoundation (OSX) - how do I write the resulting image back to AVWriter?

另一种方法是使用图层指令缩放视频,如下所示:

代码语言:javascript
复制
AVMutableVideoCompositionLayerInstruction *layerInstruction =
    [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstruction];
layerInstruction.trackID = mutableCompositionTrack.trackID;
[layerInstruction setTransform:CGAffineTransformMakeScale(2.0f,2.0f) atTime:kCMTimeZero];

这将告诉合成从视频开头开始将mutableCompositionTrack (或用于轨迹的任何变量名)缩放2.0倍。

现在,当您合成视频时,添加图层说明的数组,您将获得缩放,而无需担心操作CMSampleBuffer (它也会快得多)。

代码语言:javascript
复制
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];

videoComposition.renderSize = CGSizeMake(1280, 720);
videoComposition.frameDuration = CMTimeMake(1, 30);
videoComposition.instructions = @[_instructions];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24903595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档