AVPlayerItemVideoOutput copyPixelBuffer всегда возвращает 1280x720 - PullRequest
0 голосов
/ 11 декабря 2018

Я создаю экземпляр AVPlayerItemVideoOutput следующим образом:

let videoOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: [String(kCVPixelBufferPixelFormatTypeKey): NSNumber(value: kCVPixelFormatType_32BGRA)])

И извлекаю pixelBuffers следующим образом:

@objc func displayLinkDidRefresh(link: CADisplayLink) {
        let itemTime = videoOutput.itemTime(forHostTime: CACurrentMediaTime())

        if videoOutput.hasNewPixelBuffer(forItemTime: itemTime) {
            if let pixelBuffer = videoOutput.copyPixelBuffer(forItemTime: itemTime, itemTimeForDisplay: nil) {

            }
        }
    }

Но по какой-то причине CVPixelBufferGetHeight(pixelBuffer) или Width.всегда возвращайте 1280x720, когда видео было снято, когда камера iPhone (альбомная или книжная) всегда высотой = 1280 шириной = 720.ДАЖЕ, если видео 4к.Если я загружаю квадратное видео из Instagram или любое другое видео, загруженное из Интернета (не созданное напрямую с помощью приложения камеры), ширина и высота будут правильно напечатаны, если разрешение меньше 720p.Но другое разрешение, например.1008x1792 будет выдавать CVPixelBufferGetHeight (pixelBuffer) = 1280

Видео, снятые на камеру ... оно всегда выдает меньшее разрешение.Я попробовал 4k и 1080 настроек (вы можете изменить это в iOS Settings> Camera).все же .. даже в 1080 я получаю буферы 1280x720 пикселей.

1 Ответ

0 голосов
/ 11 декабря 2018

Я выяснил, что используемый мной UIPickerController был настроен по умолчанию для перекодирования выбранного видео из библиотеки в настройку Medium.в этом случае это было 1280x720

Я закончил тем, что изменил эти свойства средства выбора

picker.videoQuality = .typeHigh 
picker.videoExportPreset =  AVAssetExportPresetHighestQuality 

Хотя свойство, которое фактически делает изменение, является videoExportPreset другое, я не знаю, чтоэто так, даже если в документации указано, что при записи видео ИЛИ вы выбираете видео.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...