Я собираюсь запустить замедленное видео с помощью AVPlayer в приложении какао. Пример: я могу выбрать начальную и конечную позиции для этого видео. если я воспроизведу это видео снова, нужно замедлить движение только для начальной и конечной позиции. Кто-нибудь, пожалуйста, сообщите мне, как это реализовать. Как выбрать начальную и конечную позиции, а также замедленное воспроизведение с помощью AVPLAYER.
Замедленное видео с использованием AVPLAYER в Cocoa Aplication
Ответы (2)
Лучше использовать scaleTimeRange:toDuration:
метод AVMutableComposition
для изменения скорости дорожек.
Больше никакой магии с изменением скорости AVPlayer
.
Просто создайте другую композицию (AVMutableComposition
является подклассом AVAsset
), сделайте с ней AVPlayerItem
и установите ее в свой экземпляр AVPlayer
.
Вам потребуется добавить наблюдатель времени для проигрывателя — addPeriodicTimeObserverForInterval:queue:usingBlock:
. Это будет вызываться через регулярные промежутки времени, которые вы укажете. Вы будете использовать это, чтобы узнать, когда игрок достигает начальной или конечной позиции.
Для позиций start и end вы должны хранить их где-то в своем коде и сравнивать их в блоке этого метода. Имейте в виду, что наблюдателю требуется CMTime
a> и многие люди немного смущены этим. Вот несколько ответов:
Лично я предпочитаю работать с CMTime
вместо секунд, но решать вам.
Затем для замедленного воспроизведения вам просто нужно установить свойство rate
проигрывателя на то, что вам нужно - 0,5 сделает его в два раза медленнее, чем исходная скорость, 0,25 сделает его в четыре раза медленнее и т. д. Значение 0 приостановит воспроизведение и значение из 1 будет играть нормально. Отрицательные значения будут делать то же самое с той разницей, что воспроизведение пойдет в обратном направлении (в сторону начала), а значения выше 1 (или -1) заставят воспроизведение быстрее, чем обычно.
Итак... при наблюдении за воспроизведением, когда свойство currentTime
проигрывателя (или параметр time
из блока) находится между вашей начальной и конечной позицией, вы устанавливаете желаемую скорость. Затем, когда currentTime выходит за пределы вашего диапазона, установите скорость обратно на 1, и видео будет воспроизводиться с нормальной скоростью.
Это, я думаю, самый простой способ. Вы также можете использовать композиции, а затем масштабировать временные диапазоны, но это более сложно, и если вы просто воспроизводите видео и не нуждаетесь в его последующей обработке, я думаю, что лучше придерживаться более простого решения.
Надеюсь, это поможет, однако я бы посоветовал более подробно прочитать документацию, потому что AVFoundation — отличный фреймворк с почти неограниченными возможностями, но есть некоторые важные вещи, которые вы не должны пропустить, когда имеете дело с ним.