【问题标题】:iOS AVFoundation: Get AVCaptureDevice.Format's video dimensionsiOS AVFoundation:获取 AVCaptureDevice.Format 的视频尺寸
【发布时间】:2021-02-01 16:53:53
【问题描述】:

我正在尝试显示可以向用户拍摄照片/视频记录的尺寸。

虽然可以通过AVCaptureDevice.Format.highResolutionStillImageDimensions 轻松访问照片尺寸,但我不知道如何为视频实现相同尺寸。

我尝试了AVCaptureDevice.Format.formatDescription.dimensions 属性(或.presentationDimensions(..) func),但这些只是给了我以下编译错误:

由于这些从 iOS 13.0 开始可用(我相信那是 Swift 5.1?),我绝对应该拥有这些 API(特别是因为我可以在我的代码中 CMD + 单击它们),并且我的项目应该可以编译。我在这里错过了什么吗?是否有更好的解决方案来获得捕获设备可以录制视频的分辨率?

【问题讨论】:

    标签: ios swift xcode avfoundation avcapturesession


    【解决方案1】:

    你只需要下面一行。就是这样。

       let dimensions = CMVideoFormatDescriptionGetDimensions(format.formatDescription)
    

    【讨论】:

    • 谢谢! “新” API (.presentationDimensions) 让我觉得别无选择。很高兴知道旧的 ObjC 方法仍然有效。
    【解决方案2】:

    没有直接的 API 来获取视频分辨率。 您可以将AVCaptureSession.sessionPreset 设置为AVCaptureSession.Preset 之一,然后使用canSetSessionPreset(_:) 检查当前设备是否支持预设。

    【讨论】:

      【解决方案3】:

      我刚刚进行了以下测试并打印了所有可用的视频尺寸:

      let descriptions = device.formats.map(\.formatDescription)
      let sizes = descriptions.map(\.dimensions)
      print(sizes)
      

      我还检查了它是否为 iOS、Simulator 和 macOS 编译,并且确实如此。

      您还支持 iOS 12 吗?你检查你的 SDK 设置了吗?

      【讨论】:

      • 我使用的是最低 SDK 版本 iOS 11,但它甚至无法使用 if #available(iOS 13.0) 检查编译...
      • 我刚刚注意到,在另一个提交更改了很多项目文件(pbxproj、模式等)之前,相同的代码会编译。在我开始尝试逐行更改并重新编译(相当大的)项目之前,您可能已经猜到这些编译器错误通常来自哪里?
      • 从日志我只能推断它正在尝试为 Simulator 或 macOS (x86_64) 构建,但不是哪个 SDK 等。也许您可以发布相应的编译器命令?
      • 抱歉这么久才回复。我为此创建了一个新的 S/O 问题,因为它似乎有点超出了这个问题的范围,请参阅here。如果您能快速浏览一下,我将不胜感激
      猜你喜欢
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 2013-01-29
      • 1970-01-01
      • 2016-04-26
      • 2017-02-18
      相关资源
      最近更新 更多