Медленный insertTimeRange (_: of: at: copySampleData :) - PullRequest
0 голосов
/ 15 октября 2019

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 ()) он работает очень медленно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...