Неверные ключи -> ProfileLevel в AVCaptureVideoDataOutput (macOS)

Я добавляю ключи к своему AVCaptureVideoDataOutput, при добавлении ключа AVVideoProfileLevelKey система бросает меня ->

Не удалось установить (contentViewController) определенное пользователем проверенное свойство для (NSWindow): *** +[AVVideoOutputSettings videoOutputSettingsWithVideoSettingsDictionary:] Словарь параметров вывода содержит один или несколько недопустимых ключей: ProfileLevel

let captureSession = AVCaptureSession()
var videoCaptureOutput = AVCaptureVideoDataOutput()
videoCaptureOutput.videoSettings = [AVVideoCodecKey: AVVideoCodecType.h264,
                                        AVVideoWidthKey : 1280,
                                        AVVideoHeightKey : 720,
                                        AVVideoProfileLevelKey : AVVideoProfileLevelH264HighAutoLevel] as [String : Any]

Ключ является частью AVVideoSettings.hтак это AVVideoCodecKey, AVVideoWidthKey а также AVVideoHeightKey Однако мне неясно, где найти ключи, которые поддерживаются AVCaptureVideoDataOutput,

1 ответ

Ключи и способы их создания описаны в (введите AVVideoCodecKey и перейдите к определению). В вашем конкретном случаеAVVideoProfileLevelKey : AVVideoProfileLevelH264HighAutoLevel следует поместить в другой словарь, и этот словарь должен быть установлен на AVVideoCompressionPropertiesKey:

let compressionSettings = [AVVideoProfileLevelKey: AVVideoProfileLevelH264HighAutoLevel]
videoCaptureOutput.videoSettings = [AVVideoCodecKey: AVVideoCodecType.h264,
                                    AVVideoWidthKey : 1280,
                                    AVVideoHeightKey : 720,
                                    AVVideoProfileLevelKey : compressionSettings]

Надеюсь, это поможет кому угодно

Ни одна из ваших настроек не подходит для AVCaptureVideoDataOutput, который предоставляет вам необработанные видеокадры. Вы настраиваете его так, как если бы он кодировал кадры в файл. Таким образом, ваш словарь настроек должен использоваться с AVAssetWriterInput из AVAssetWriter или установить на AVCaptureMovieFileOutput с setOutputSettings метод.

Другие вопросы по тегам