AVPlayer SeekToTime не работает. Начиная с начала каждый раз

У меня возникли проблемы с методом очистки UISlider и AVPlayer. Каждый раз, когда вызывается метод, проигрыватель перезапускается с 0. Я пробовал отладку и кажется, что значение ползунка правильное, но когда я перешагиваю, он устанавливается на 0, поэтому проигрыватель перезапускается. Это то, что я пробовал:

    var desiredTime = CMTimeMake(Int64(self.progressSlider.value), 1)

    AudioManager.sharedInstance.audioPlayer.seekToTime(desiredTime)

Я также пытался смотреть на похожие вопросы и обнаружил, что это было то же самое, когда я пробовал их решения.

Я ценю вашу помощь.


person Enock Nshuti    schedule 29.07.2015    source источник
comment
Вы установили минимум ползунков на 0, а максимум на продолжительность актива AVA, в который вы играете?   -  person    schedule 30.07.2015
comment
Спасибо @MichaelL. Это работает! Но как мне обновить progressSlider.value до desiredTime? Прямо сейчас он остается в том же положении, откуда я его перетащил.   -  person Enock Nshuti    schedule 30.07.2015


Ответы (2)


Использование метода было неправильным. Можете поискать в Библиотеке.

var desiredTime = CMTimeMake(self.progressSlider.value *1000, 1000);
AudioManager.sharedInstance.audioPlayer.seekToTime(desiredTime)
person ronan    schedule 30.07.2015

Как я указал в своем комментарии, вам нужно установить минимальное значение ползунков на 0, а его максимальное значение на продолжительность воспроизводимого актива.

Чтобы ползунок двигался во время игры, добавьте к проигрывателю периодического наблюдателя. Например:

CMTime interval = CMTimeMakeWithSeconds(.25,1000); [_player addPeriodicTimeObserverForInterval:interval queue:NULL usingBlock:
    (CMTime time)){ NSTimeInterval t = CMTimeGetSeconds(time);
         mySlider.value = t; }];

(Вам может понадобиться слабая ссылка на себя, чтобы получить доступ к mySlider.) Параметр time для блока — это текущее время игрока.

Когда пользователь скользит, используйте seekToTime, чтобы установить положение игроков.

Одно предостережение: хотя это работает, приращения ползунка будут отображаться как небольшие скачки большого пальца. Я не нашел простого способа заставить ползунок двигаться непрерывно - вероятно, стоит отдельного вопроса.

person Community    schedule 30.07.2015
comment
Что означает (.25,1000) в этом примере? Это то, что я пробовал из того, что вы сказали в комментарии: let duration = Float(CMTimeGetSeconds(AudioManager.sharedInstance.audioPlayer.currentItem.asset.duration)) progressSlider.minimumValue = 0 progressSlider.maximumValue = duration var desiredTime = CMTimeMake(Int64(self.progressSlider.value), 1) AudioManager.sharedInstance.audioPlayer.seekToTime(desiredTime). Это работает, но где мне реализовать ваш пример? - person Enock Nshuti; 30.07.2015
comment
Посмотрите документацию по CMTime - там объясняется значение параметров. 1000 произвольно — я использую его только потому, что это упрощает отладку. Возможно, лучше использовать число, кратное 60, когда вы имеете дело со временем. Что касается вашего другого вопроса, это зависит от вашего общего дизайна, поэтому я не могу на него ответить. Я чувствую, что полностью ответил на ваш первоначальный вопрос. Если у вас есть дополнительные вопросы, пожалуйста, задавайте их как новые вопросы. - person ; 30.07.2015