Проблемы с производительностью AVMutableComposition - scaleTimeRange

Я использую scaleTimeRange:toDuration: для создания эффекта ускоренного движения до 10-кратной исходной скорости видео. Но я заметил, что видео начинает заикаться при воспроизведении через AVPlayer со скоростью 10x.

Я также заметил, что в QuickTime OSX та же композиция играет гладко.

Другой вопрос гласит, что причиной этого является аппаратное ограничение, но я хочу знать, есть ли способ обойти это, чтобы эффект быстрого движения происходил плавно по всей длине видео.

Спецификации видео

  • Формат: H.264, 1280x544
  • FPS: 25
  • Размер данных: 26 МБ
  • Скорость передачи данных: 1,17 Мбит / с

1 ответ

Решение

У меня есть ощущение, что при воспроизведении вашего видео в 10 раз с scaleTimeRange:toDuration просто умножает вашу скорость передачи данных на 10, доводя ее до 10 Мбит / с, что может обрабатывать машины osx, а устройства iOS - нет.

Другими словами, вы создаете видео, которое необходимо воспроизводить со скоростью 300 кадров в секунду, что AVPlayer слишком сложно.

Если бы я не знал о вашем другом вопросе, я бы сказал, что решение состоит в том, чтобы экспортировать AVComposition с помощью AVAssetExportSession, что должно привести к тому, что ваше видео с высоким FPS будет дискретизировано до более легкой для обработки 30 кадров в секунду, а затем воспроизвести его с AVPlayer,

Если AVAssetExportSession не работает, вы можете попробовать применить эффект ускорения самостоятельно, читая кадры из исходного видео, используя AVAssetReader и запись каждого десятого кадра в выходной файл с помощью AVAssetWriter (не забудьте установить правильные метки времени представления).

Другие вопросы по тегам