Недавно я следовал этому учебнику, который научил меня, как воспроизводить видео с альфа-каналом в iOS.Это прекрасно работает для построения AVPlayer
поверх чего-то вроде UIImageView
, что позволяет мне сделать так, чтобы мое видео (с удаленным альфа-каналом) воспроизводилось поверх изображения.
Используя этот подход, мне теперь нужно найти способ сделать это при рендеринге / сохранении видео на устройство пользователя.Это мой код для генерации альфа-видео, которое воспроизводится в AVPlayer
;
let videoSize = CGSize(width: playerItem.presentationSize.width, height: playerItem.presentationSize.height / 2.0)
let composition = AVMutableVideoComposition(asset: playerItem.asset, applyingCIFiltersWithHandler: { request in
let sourceRect = CGRect(origin: .zero, size: videoSize)
let alphaRect = sourceRect.offsetBy(dx: 0, dy: sourceRect.height)
let filter = AlphaFrameFilter()
filter.inputImage = request.sourceImage.cropped(to: alphaRect)
.transformed(by: CGAffineTransform(translationX: 0, y: -sourceRect.height))
filter.maskImage = request.sourceImage.cropped(to: sourceRect)
return request.finish(with: filter.outputImage!, context: nil)
(Это было немного усечено для простоты, но я могу подтвердить, что этот подход правильно возвращает AVVideoComposition
, который я могуВоспроизведение в AVPlayer
.
Я понимаю, что могу использовать AVVideoComposition
с AVExportSession
, но это позволяет мне воспроизводить альфа-видео только на черном фоне (а не на изображении или видео,как мне нужно).
Есть ли способ наложить теперь уже удаленный фоновый альфа-канал поверх другого видео и обработать его?