声音不适用于某些 AVCaptureDeviceFormat...这是一个错误吗?

Sound not working for some AVCaptureDeviceFormat... is this a bug?

我在 SO 上看到 this question 关于同样的问题,但在我的情况下略有不同。

关于这个问题,发布者说当他将应用程序设置为以相机可以在 AVFoundation 下提供的最高分辨率拍摄视频时无法录制音频。

原问题发帖人提到他的AVCaptureConnection没有音频。我相信他在 captureOutput:didOutputSampleBuffer:fromConnection: 里面说话,但在我的情况下,问题略有不同。在我的例子中,这个方法从来没有被调用过。我的意思是,每次调用此方法时 connection 总是一个视频...或者换句话说,这里没有调用数据音频输出委托。

我检查了 captureSession 并且麦克风在那里,所以 captureSession 包含 AVCaptureDeviceInput 音频。​​

(lldb) po _captureSession.inputs
<__NSArrayI 0x170227e00>(
<AVCaptureDeviceInput: 0x17422e2e0 [Back Camera]>,
<AVCaptureDeviceInput: 0x17422e8e0 [iPad Microphone]>
)

我正在 iPad Pro 9.7 上进行测试。我已经检查了该设备前后摄像头的所有分辨率,但没有音频:

  1. 前置摄像头:960p @ 30 或 60 fps
  2. 后置摄像头 4032x3024 30 fps

我尝试在更改分辨率后删除和添加音频设备,但 captureSession 挂起并且预览冻结。该应用程序继续运行,没有崩溃,但预览冻结。

这是一个错误吗?我没有在任何文档中看到任何提及我无法以相机可以提供的最高分辨率录制音频的内容。


注意:为了演示问题,我上传了 Apple 的 CIFunHouse here 的修改版本。我已经将 FHViewController.m 的第 459 行调整为 4032x3024,这是我的 iPad 的最大分辨率。您应该针对设备后置摄像头的最大分辨率进行调整。

由于某些奇怪的原因,当您这样做时,应用程序会在尝试初始化音频时崩溃。我的代码基于此,初始化正常但不录制声音。我让代码崩溃了,因为它可能会以这种方式提供更多帮助。您会看到 channelLayoutandbasicDescription 对于该视频格式都是 NULL。降低分辨率,音频将初始化正常。

这是一个简单的答案:4032x3024 不是常见的视频分辨率。虽然是 480p、720p 和 1080p。如果您了解 4K resolution video,您会发现 3840x2160 也是如此。

事实上,“2160p”确实可以在我的 iPhone 6s 上捕获音频和视频,为什么不试试呢?

AVAssetWriter 可以编码 2160p 吗?谁知道?也许。

但不要对 AVFoundation 太苛刻 - 它勇敢地为硬件的疯狂摆出一副理智的面孔。如果有任何问题,您应该记录功能和文档错误。