iPhone 12/12 pro 支持以 10 位格式而不是 8 位录制杜比视界 HDR 视频,但从 iOS 14.1 SDK 中尚不清楚 AVCaptureVideoDataOutput 是否支持交付可使用 AVAssetWriter 附加到视频文件的 10 位样本缓冲区。有没有人弄清楚它是否可能在SDK中?
编辑:许多应用程序,如 Apple 的 Clips 应用程序已经开始支持杜比视界 10 位视频录制。但我尝试了所有可用的 API,包括 videoHDREnabled,但它不起作用。因此,明确的问题是如何使用 AVFoundation API 录制 HDR(杜比视界)视频?
EDIT2:我能够找出支持 10 位像素缓冲区格式的设备格式(即“x420”,而不是 420v 或 420f 作为媒体子类型的设备格式)。在 iPhone 12 mini 上,4 种设备格式支持 中的 10 位像素缓冲区传送kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange ,即使 AVFoundation 文档说这不是受支持的像素格式(引用 - “在 iOS 上,唯一支持的键是 kCVPixelBufferPixelFormatTypeKey。支持的像素格式是 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange、kCVPixelFormatType_420YpCbCr8BiPlanarFullRange 和 kCVPixelFormatType_32BGRA。”)。下一步是确定是否可以手动选择用于录制的 HDR 格式为杜比视界、HLG 或 HDR10。
最佳答案
好的,给出的答案都不正确,所以我在拿起 iPhone 12 mini 后进行了研究,这就是我发现的。
AVFoundation 文档是沉默的,有时甚至是不正确的。可以从文档中推断出不可能获得 10 位 HDR 样本缓冲区,特别是如果阅读 AVCaptureVideoDataOutput 的 videoSettings 属性的文档:
On iOS, the only supported key is kCVPixelBufferPixelFormatTypeKey.
Supported pixel formats are kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange,
kCVPixelFormatType_420YpCbCr8BiPlanarFullRange and kCVPixelFormatType_32BGRA
从文档中可以看出,永远无法获得 10 位帧。但是在探测 -[AVCaptureDevice formats]
,可以找到 4 种不同的格式,并且 mediaSubtype 为 'x420',即 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange
, 10 位格式。瞬间-[AVCaptureDevice activeFormat]
设置为这 4 种格式之一,AVCaptureVideoDataOutput 将采样缓冲区格式更改为 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange! AVCaptureDevice 的 Active Color Space 也更改为 AVCaptureColorSpace_HLG_BT2020。
关于ios - AVFoundation 在 iPhone 12 上录制 10 位 HDR 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64357503/