После применения AVVideoComposition
к моему AVPlayerItem
фильтр, который я применяю, работает, но видео поворачивается в AVPlayerLayer
.
Я точно знаю, что проблема не в отфильтрованном кадре, потому что, если я покажу кадр в формате UIImageView
, кадр будет отображаться на 100% правильно.
Видео отображается правильно, пока я не применяю videoComposition
. Установка videoGravity
на AVPlayerLayer
не помогает.
Видео поворачивается на 90º по часовой стрелке и растягивается в слое.
По сути, видео отлично отображается в AVPlayerLayer
до того, как AVPlayerItem
подается через AVMutableVideoComposition
. Как только это происходит, видео поворачивается на -90º, а затем масштабируется, чтобы соответствовать тем же размерам, что и видео перед фильтрацией. Это говорит мне о том, что он не понимает, что его преобразование уже правильное, и поэтому повторно применяет преобразование к себе.
Почему это происходит, и как я могу это исправить?
Вот код:
private func filterVideo(with filter: Filter?) {
if let player = player, let playerItem = player.currentItem {
let composition = AVMutableComposition()
let videoAssetTrack = playerItem.asset.tracks(withMediaType: .video).first
let videoCompositionTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
try? videoCompositionTrack?.insertTimeRange(CMTimeRange(start: kCMTimeZero, duration: playerItem.asset.duration), of: videoAssetTrack!, at: kCMTimeZero)
videoCompositionTrack?.preferredTransform = videoAssetTrack!.preferredTransform
let videoComposition = AVMutableVideoComposition(asset: composition, applyingCIFiltersWithHandler: { (request) in
let filteredImage = <...>
request.finish(with: filteredImage, context: nil)
})
playerItem.videoComposition = videoComposition
}
}
applyingCIFiltersWithHandler
- person IHaveAQuestion   schedule 04.07.2017