AVFoundation 在 iPhone 12 上录制 10 位 HDR 视频

Dee*_*rma 7 avfoundation ios avcapturesession avassetwriter avcapturevideodataoutput

iPhone 12/12 pro 支持以 10 位格式而不是 8 位格式录制杜比视觉 HDR 视频,但从 iOS 14.1 SDK 中不清楚 AVCaptureVideoDataOutput 是否支持传送 10 位样本缓冲区,这些缓冲区可以使用 AVAssetWriter 附加到视频文件。有没有人想过在SDK中是否可能?

编辑:许多应用程序(例如 Apple 的 Clips 应用程序)已开始支持 Dolby Vision 10 位视频录制。但是我尝试了所有可用的 API,包括 videoHDREnabled,但它不起作用。所以明确的问题是如何使用 AVFoundation API 录制 HDR(杜比视觉)视频?

EDIT2:我能够找出支持 10 位像素缓冲区格式的设备格式(即“x420”,而不是将 420v 或 420f 作为媒体子类型的设备格式)。在 iPhone 12 mini 上,4 种设备格式支持kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange 中的10 位像素缓冲区传送,尽管 AVFoundation 文档说这不是支持的像素格式(引用 - “在 iOS 上,唯一支持的键是 kCVPixelBufferPixelFormatTypeKey。支持的像素格式是 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange,kCVPixelBufferPixelFormatTypeKey。和 kCVPixelFormatType_32BGRA .”)。下一步是确定是否可以手动选择用于录制的 HDR 格式为 Dolby Vision、HLG 或 HDR10。

Dee*_*rma 4

好吧,给出的答案都不正确,所以我在拿起 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
Run Code Online (Sandbox Code Playgroud)

从文档中可以看出,人们永远无法获得 10 位帧。但在探测中-[AVCaptureDevice formats],我们可以找到 4 种不同的格式,并且 mediaSubtype 为“x420”,即kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange一种 10 位格式。当-[AVCaptureDevice activeFormat]设置为这4种格式之一时,AVCaptureVideoDataOutput将样本缓冲区格式更改为kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange!AVCaptureDevice 的活动色彩空间也更改为 AVCaptureColorSpace_HLG_BT2020。