В зависимости от вашей цели, вы можете наблюдать тайминги через заданные интервалы и в рамках этого обратного вызова оптимизировать свою логику до определенной продолжительности, чтобы действовать.
Просто реализуйте addPeriodicTimeObserver(forInterval:queue:using:)
, который будет срабатывать при предопределенном CMTime
ивызвать обратный вызов триггера.
Полная информация с примерами приведена в документации
https://developer.apple.com/documentation/avfoundation/media_assets_playback_and_editing/observing_the_playback_time
, но включая фрагмент для справки
var player: AVPlayer!
var playerItem: AVPlayerItem!
var timeObserverToken: Any?
// Notify every half second
let timeScale = CMTimeScale(NSEC_PER_SEC)
let time = CMTime(seconds: 0.5, preferredTimescale: timeScale)
timeObserverToken = player.addPeriodicTimeObserver(forInterval: time,
queue: .main) {
[weak self] time in
// implement your logic based on your required timings
}
. Убедитесь, чтосохранять строгую ссылку на любого наблюдателя, в противном случае он будет освобожден и обратный вызов не будет вызван.