AVMutableMovie insertTimeRange (_: of: at: copySampleData :) работает очень медленно при использовании разных клипов из одного источника
Пожалуйста, дайте мне знать, как улучшить производительность вставки при компоновке двух объектов клипа в один.
Фон
Я делаю редактор фильмов на основе AVMutableMovie. Я реализую поддержку картона, используя makeMovieHeader (fileType :) из исходного AVMutableMovie. При редактировании фильма клип вставки создается из монтажного стола.
Когда я редактирую фильм, операция вставки клипа выполняется крайне медленно. Многократная операция будет становиться все дольше и дольше. Следующий пример кода предназначен для проверки.
public func process(_ useCopy : Bool) -> Bool {
var result : Bool = false
if let clip = self.clip {
let duration : CMTime = clip.duration
let selectionStart : CMTime = CMTimeMultiplyByFloat64(duration, multiplier: 0.25)
let selectionEnd : CMTime = CMTimeMultiplyByFloat64(duration, multiplier: 0.50)
let selectionRange : CMTimeRange = CMTimeRange(start: selectionStart, duration: selectionEnd)
let point : CMTime = CMTimeMultiplyByFloat64(duration, multiplier: 0.75)
do {
let t0 = CFAbsoluteTimeGetCurrent()
if useCopy { // SLOW: same source, different clip
let clip2 = clip.mutableCopy() as! AVMutableMovie
try clip.insertTimeRange(selectionRange, of: clip2, at: point, copySampleData: false)
} else { // FAST: perform inside single clip
try clip.insertTimeRange(selectionRange, of: clip, at: point, copySampleData: false)
}
let t1 = CFAbsoluteTimeGetCurrent()
self.lastLapTime = (t1 - t0)
result = true
} catch {
}
}
return result
}
- целевой объект и клип для вставки являются AVMutableMovie, созданными из одного и того же исходного файла фильма
- , когда целевой объект и клип для вставки представляют собой один и тот же объект, вставкаработает отлично.
- , когда цель и клип разные (в приведенном выше примере просто .mutableCopy ()) он работает очень медленно.