Я создаю AVVideoComposition с CIF-фильтрами следующим образом:
videoComposition = AVMutableVideoComposition(asset: asset, applyingCIFiltersWithHandler: {[weak self] request in
// Clamp to avoid blurring transparent pixels at the image edges
let source = request.sourceImage.clampedToExtent()
let output:CIImage
if let filteredOutput = self?.runFilters(source, filters: filters)?.cropped(to: request.sourceImage.extent) {
output = filteredOutput
} else {
output = source
}
// Provide the filter output to the composition
request.finish(with: output, context: nil)
})
И затем, чтобы правильно обработать вращение, я создаю команду прохода, которая устанавливает преобразование идентичности на промежуточном слое.
let passThroughInstruction = AVMutableVideoCompositionInstruction()
passThroughInstruction.timeRange = CMTimeRangeMake(start: CMTime.zero, duration: asset.duration)
let passThroughLayer = AVMutableVideoCompositionLayerInstruction(assetTrack: videoTrack)
passThroughLayer.setTransform(CGAffineTransform.identity, at: CMTime.zero)
passThroughInstruction.layerInstructions = [passThroughLayer]
videoComposition.instructions = [passThroughInstruction]
Проблема в том, что он вылетает с ошибкой:
'*** -[AVCoreImageFilterCustomVideoCompositor startVideoCompositionRequest:] Expecting video composition to contain only AVCoreImageFilterVideoCompositionInstruction'
Моя проблема заключается в том, что, если я не укажу эту команду passThroughInstruction, вывод будет неправильным, если видеотрек входного актива содержит предпочитаемый преобразователь, который задает поворот на 90 градусов.Как использовать композицию видео с фильтрами Core Image, которые правильно обрабатывают предпочитаемый преобразователь видеодорожки?
РЕДАКТИРОВАТЬ: вопрос выглядит аналогично, но отличается от других вопросов, связанных с воспроизведением.В моем случае воспроизведение в порядке, но именно рендеринг создает искаженное видео.