iphone - 没有音频处理的 AVCaptureSession 视频预览

标签 iphone ios avcapturesession

我正在使用 AVCaptureSession 在 iPhone 上的增强现实类型应用程序中预览视频。由于我还在视频预览之上绘制 OpenGL 图形,因此该应用程序非常耗能。我想尽量减少 CPU 的使用以节省电池。

当我使用 Instruments/Energy 使用情况检查应用程序时,我发现 CPU 的很大一部分(约 20%)被“浪费”在了音频处理上。如果我删除我的捕获 session ,音频处理不会像预期的那样占用 CPU。

我不明白为什么捕获 session 正在进行音频处理,因为我没有添加任何音频设备输入。这是我设置 session 的方式:

if(!captureSession) {
  captureSession = [[AVCaptureSession alloc] init];
  AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
  if (videoDevice) {
    NSError *error;
    AVCaptureDeviceInput *videoIn = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
    if (!error) {
      if ([captureSession canAddInput:videoIn]) {
        [captureSession addInput:videoIn];
      }
    }
  }
}

if(!previewLayer) {
  previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:captureSession];
  [previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
}

CGRect layerRect = [[viewBg layer] bounds];
[previewLayer setBounds:layerRect];
[previewLayer setPosition:CGPointMake(CGRectGetMidX(layerRect), CGRectGetMidY(layerRect))];
[[viewBg layer] addSublayer:previewLayer];

[captureSession startRunning];                                              

有没有办法完全禁用音频(输入),或者在预览视频输入时如何摆脱音频处理 CPU 使用率?

最佳答案

作为更大的性能优化,我是否建议不要使用覆盖在 AVCaptureVideoPreviewLayer 上的非透明 OpenGL ES 内容?相反,您将获得更好的渲染性能,方法是抓取您的相机源,将其作为纹理上传以在您的增强现实内容后面渲染,然后在包含相机纹理的屏幕大小的纹理四边形前面渲染您的内容。

从个人经验来看,渲染不透明的 OpenGL ES 内容会导致严重的减速,因为在这种情况下需要执行合成。获取您的相机帧并将它们显示为 OpenGL ES 场景中的背景将使您可以将 OpenGL ES 托管 View 设置为不透明,这样效率更高。

我有一些 sample code for this作为对象跟踪示例的一部分,但可以在我的开源 GPUImage 的 GPUImageVideoCamera 类中找到更高效的相机捕获和上传版本框架。此外,在我对该框架的代码的分析中,我没有看到在没有将音频输入配置为 session 的一部分的情况下进行音频录制,因此您可以检查我在那里所做的事情。

关于iphone - 没有音频处理的 AVCaptureSession 视频预览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804829/

相关文章:

iphone - 读取 iPhone 上安装的证书

iphone - UIView 层的内阴影效果?

ios - Swift:init中super.init和self.attribute的顺序

ios - 使用 AVAsset/AVCaptureSession 时,方形视频方向不会从横向变为纵向

iPhone:我的泄漏应用程序会损害其他应用程序吗?

ios - 为 PHP 发送参数,并等待响应

ios - 在 iOS 上使用 Instagram 验证用户 : specifying redirect_uri

ios - 在 iOS 上使用 AVCaptureSession 加载摄像头速度很慢 - 如何加快速度?

ios - ios中的视频录制问题

iphone - UIPageControl 本身没用吗?