以与预览图层相匹配的大小导出AVCaptureSessionvideo

我使用AVCaptureSession录制video,会话预设为AVCaptureSessionPreset640x480 。 我正在使用非标准尺寸(300 x 300)的AVCaptureVideoPreviewLayer ,并在录制时将重力设置为方向填充。 它的设置是这样的:

 self.previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession]; _previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill; _previewLayer.frame = _previewView.bounds; // 300 x 300 [_previewView.layer addSublayer:_previewLayer]; 

录制video后,我想以快速格式将其写入文件。 在播放过程中,我再次以300 x 300的非标准尺寸图层播放video。 由于这些video最终将通过networking连接进行传输,因此保留完整的640x480video看起来很浪费。

导出video以匹配我的300 x 300预览图层的最佳方式是什么? 我是一个AVFoundation noob,所以如果我正在做这个错误的方式,请让我知道。 我只想在logging期间预览层中显示的录制video与磁盘上导出的video相匹配。

video分辨率和video大小是两回事。 分辨率代表清晰度,分辨率越高意味着越清晰。 而video大小是显示video的边界。 根据video的video分辨率和宽高比,video会在观看者看到时伸展或缩小。

现在,事实已经解释,你可以在这里find你的答案:

如何使用AVFoundation裁剪video

按以下顺序执行步骤:

  1. 将video录制到磁盘。
  2. 从磁盘保存到资产库。
  3. 从磁盘删除。
  4. 执行上述链接中提到的步骤。

注意:在录制video到资源库之后执行这些步骤, saveComposition就是保存的资源。

并在此步骤中提供您的尺寸: videoComposition.renderSize = CGSizeMake(320, 240); as videoComposition.renderSize = CGSizeMake(300, 300);

并build议。 由于将文件写入磁盘,然后到磁带库,然后再回到磁盘是一种漫长的操作。 尝试使用dispatch_queueoperationBlockasynchronous执行此operationBlock

干杯,玩得开心。