Замедленное видео с использованием AVPLAYER в Cocoa Aplication

Я собираюсь запустить замедленное видео с помощью AVPlayer в приложении какао. Пример: я могу выбрать начальную и конечную позиции для этого видео. если я воспроизведу это видео снова, нужно замедлить движение только для начальной и конечной позиции. Кто-нибудь, пожалуйста, сообщите мне, как это реализовать. Как выбрать начальную и конечную позиции, а также замедленное воспроизведение с помощью AVPLAYER.


person 2vision2    schedule 31.01.2014    source источник


Ответы (2)


Лучше использовать scaleTimeRange:toDuration: метод AVMutableComposition для изменения скорости дорожек.

Больше никакой магии с изменением скорости AVPlayer.

Просто создайте другую композицию (AVMutableComposition является подклассом AVAsset), сделайте с ней AVPlayerItem и установите ее в свой экземпляр AVPlayer.

person Akhrameev    schedule 20.07.2017

Вам потребуется добавить наблюдатель времени для проигрывателя — addPeriodicTimeObserverForInterval:queue:usingBlock:. Это будет вызываться через регулярные промежутки времени, которые вы укажете. Вы будете использовать это, чтобы узнать, когда игрок достигает начальной или конечной позиции.

Для позиций start и end вы должны хранить их где-то в своем коде и сравнивать их в блоке этого метода. Имейте в виду, что наблюдателю требуется CMTime и многие люди немного смущены этим. Вот несколько ответов:

Лично я предпочитаю работать с CMTime вместо секунд, но решать вам.

Затем для замедленного воспроизведения вам просто нужно установить свойство rate проигрывателя на то, что вам нужно - 0,5 сделает его в два раза медленнее, чем исходная скорость, 0,25 сделает его в четыре раза медленнее и т. д. Значение 0 приостановит воспроизведение и значение из 1 будет играть нормально. Отрицательные значения будут делать то же самое с той разницей, что воспроизведение пойдет в обратном направлении (в сторону начала), а значения выше 1 (или -1) заставят воспроизведение быстрее, чем обычно.

Итак... при наблюдении за воспроизведением, когда свойство currentTime проигрывателя (или параметр time из блока) находится между вашей начальной и конечной позицией, вы устанавливаете желаемую скорость. Затем, когда currentTime выходит за пределы вашего диапазона, установите скорость обратно на 1, и видео будет воспроизводиться с нормальной скоростью.

Это, я думаю, самый простой способ. Вы также можете использовать композиции, а затем масштабировать временные диапазоны, но это более сложно, и если вы просто воспроизводите видео и не нуждаетесь в его последующей обработке, я думаю, что лучше придерживаться более простого решения.

Надеюсь, это поможет, однако я бы посоветовал более подробно прочитать документацию, потому что AVFoundation — отличный фреймворк с почти неограниченными возможностями, но есть некоторые важные вещи, которые вы не должны пропустить, когда имеете дело с ним.

person kacho    schedule 13.04.2014