Я играю видео с помощью AVPlayerLayer, и иногда мне нужно создавать снимки текущего видеокадра, чтобы использовать его в качестве заполнителя. Я использую AVPlayerItemVideoOutput
для этой цели, а затем конвертирую CVPixelBuffer
в CGImage, используя CIContext
(я тоже пробовал VTCreateCGImageFromCVPixelBuffer
). И все работает просто отлично, за исключением того, что изображение заметно отличается от оригинала (первое изображение действительно AVPlayerLayer
, а второе - снимок AVPlayerLayer
):
AVPlayerLayer:
![AVPlayerLayer](https://i.stack.imgur.com/FeNqO.png)
Снимок AVPlayerLayer
![Snapshot](https://i.stack.imgur.com/oGuua.png)
Вы можете заметить, что снимок снимка намного светлее исходного кадра. Мой AVPlayerItemVideoOutput
создан так:
let playerItemVideoOutput = AVPlayerItemVideoOutput(pixelBufferAttributes:
[kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA,
kCVPixelBufferCGImageCompatibilityKey as String: true])
Я тоже пробовал kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
, но результат тот же. Есть ли способ создать оригинальное качественное изображение из AVPlayerItemVideoOutput
(AVAssetImageGenerator
не подходит для моих целей). Спасибо