Черное видео выводится через AVMutableVideoComposition и CAAnimation

Я создаю приложение для iOS, которое может записывать видео и добавлять анимацию поверх записанного видео с помощью AVFoundation и CAAnimation. Все вспомогательные функции работают нормально, но фон в конце видео черный, пока воспроизводится анимация. Это не рендеринг фонового видео, которое я выбрал. Я использовал AVAssetWriter для записи видео, и оно хорошо воспроизводится в фотопленке. Но если я использую это записанное видео для добавления наложения, фон в конце видео будет черным. Интересно, что если я записываю видео через собственное приложение камеры iOS и использую его для добавления наложения, оно работает отлично. Я проверил этот вопрос, но не работал для меня. Black Video CAAnimation и AVFoundation AVAssetExportSession

Любая помощь будет принята с благодарностью. Спасибо


person gstream79    schedule 25.10.2017    source источник


Ответы (1)


Вам нужно скорректировать PreferredTransform актива, потому что для некоторых видеофайлов он имеет пустые параметры tx и ty (по умолчанию они равны 0.0):

        ...

        if let clipVideoTrack = asset.tracks(withMediaType: .video).first {
            var preferredTransform = clipVideoTrack.preferredTransform
            var videoSize = clipVideoTrack.naturalSize.applying(preferredTransform)
            preferredTransform.tx = (videoSize.width < 0) ? fabs(videoSize.width) : 0.0
            preferredTransform.ty = (videoSize.height < 0) ? fabs(videoSize.height) : 0.0
            videoSize = CGSize(width: fabs(videoSize.width), height: fabs(videoSize.height))

            ...

            let transformer = AVMutableVideoCompositionLayerInstruction.init(assetTrack: clipVideoTrack)
            transformer.setTransform(videoTransform, at: kCMTimeZero)

            ...
person Maximum    schedule 02.08.2018