Если вы внимательно прочитайте документацию, вы увидите, что этот метод возвращает:
Возвращаемое значение: Непрозрачный объект, который вы передаете как аргумент removeTimeObserver: остановить наблюдение.
, а затем, что:
Вы должны сохранить возвращаемое значение до тех пор, как вы хотите, чтобы время наблюдатель должен быть вызван игроком. Каждый вызов этого метода должен быть сопряжен с соответствующим вызовом removeTimeObserver:
Ваш вопрос в том, что вы не сохраняя возвращаемое значение метода, вы просто вызов метода, поэтому время наблюдатель не вызываемый игроком.
Использование переменной __block должна реально работать здесь
player = AVPlayer.playerWithURL(NSURL.URLWithString(someurl))
player.play()
__block id observer = player.addBoundaryTimeObserverForTimes([NSValue.valueWithCMTime(CMTimeMake(1,1))], queue: nil, usingBlock: ->
{
puts 'success'
player.removeTimeObserver(observer) // IMPORTANT, but careful. Read below*
})
ниже *: Как Apple, подчеркивает, что вам нужно позвонить removeTimeObserver, и место, которое имеет больше смысла для меня было бы в блоке завершения , но, по крайней мере, в Obj C, Swift и большинстве других языков, это приведет к циклу сохранения. Вы можете обойти это в Obj C и Swift, объявив наблюдателя и игрока как block variables, чтобы вы могли безопасно ссылаться на них изнутри блока.
Если вы можете найти другое место для безопасного вызова метода removeTimeObserver, вам не нужно беспокоиться об этом.
В любом случае приведенный выше код будет исполнять блок, когда игрок занимает 1 секунду в песне/видео.
отметить также, что:
AV Foundation не гарантирует, чтобы вызвать Ваш блок для каждого интервала или границы прошло. AV Foundation не вызывает блок, если выполнение ранее вызванного блока не завершено. Поэтому вы должны убедиться, что работа, которую вы выполняете в блоке, не слишком сильно налагает налог на систему.
, который, как я думаю, не относится к вам, но может применяться к другому лицу, добавившему несколько временных интервалов/границ.
нет, передача нулевой очереди приводит к тому, что основная очередь используется, согласно документации – gadu