首页 > 解决方案 > AVFoundation 在 iPhone 12 上录制 10 位 HDR 视频

问题描述

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 种设备格式支持 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange 中的 10 位像素缓冲区交付,即使 AVFoundation 文档说这不是受支持的像素格式(引用 - “iOS 上,唯一支持的键是 kCVPixelBufferPixelFormatTypeKey。支持的像素格式是 kCVPixelFormatType_420YpCbCr8BiFullPlanarVideoRange、kCVPixelFormatPlanType_420YpCbCrArnge和 kCVPixelFormatType_32BGRA。”)。下一步是确定是否可以手动选择用于录制的 HDR 格式为杜比视界、HLG 或 HDR10。

标签: iosavfoundationavcapturesessionavassetwriteravcapturevideodataoutput

解决方案


好的,给出的答案都不正确,所以我在拿起 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_420YpCbCr10BiPlanarVideoRange10 位格式。时刻-[AVCaptureDevice activeFormat]设置为这 4 种格式之一,AVCaptureVideoDataOutput 将样本缓冲区格式更改为 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange!AVCaptureDevice 的 Active Color Space 也更改为 AVCaptureColorSpace_HLG_BT2020。


推荐阅读