Проблемы с производительностью 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
(не забудьте установить правильные метки времени представления).