ошибка: CIImage initWithCVPixelBuffer: параметры: не удалось, поскольку его формат пикселей p422 не поддерживается - PullRequest
0 голосов
/ 07 сентября 2018

Приведенный ниже код работает на iPad mini и iPhone 7 для создания снимка текущего видеокадра, но при запуске iPad Pro выдает ошибку: CIImage initWithCVPixelBuffer: options: fail, потому что его формат пикселей p422 не поддерживается ,

Есть похожий вопрос "CIImage initWithCVPixelBuffer: options:" не удалось, поскольку его формат пикселей p422 не поддерживается в iOS 10 , но это не решает проблему.

Насколько я понимаю, это связано с видео в формате 4: 2: 2. Есть ли обходной путь, чтобы сохранить 4: 2: 2? Изменение самого видео было бы слишком хлопотным, так как многие другие функции должны были бы быть отредактированы.

func snapshotCurrentFrame() -> UIImage? {
    guard
        let item = playerLayer?.player?.currentItem,
        let output = item.outputs.first as? AVPlayerItemVideoOutput,
        let pixelBuffer = output.copyPixelBuffer(forItemTime: item.currentTime(), itemTimeForDisplay: nil)
        else { return nil }

    let rect = CGRect(
        x: 0,
        y: 0,
        width: CVPixelBufferGetWidth(pixelBuffer),
        height: CVPixelBufferGetHeight(pixelBuffer)
    )
    let ciImage = CIImage(cvPixelBuffer: pixelBuffer)
    if let cgImage = CIContext().createCGImage(ciImage, from: rect) {
        return UIImage(cgImage: cgImage)
    } else {
        return nil
    }
}
...