Я хочу использовать AVPlayer для воспроизведения аудиофайлов на iphone. Аудиофайл - это mp3-файл из локального хранилища на устройстве. Мне нужно синхронизировать его (воспроизведенный файл) с внешним источником времени. Этот источник времени может меняться во время игры, поэтому время от времени требуется синхронизация. Я использовал следующий код, чтобы изменить время в воспроизводимом аудиофайле:avplayer ищет неправильное положение в звуковом файле
player.play()
//sth here......
//the code which is executed periodically whene it is time to synchronize
let currentShowTime = ...... //time in miliseconds
print("current show time \(currentShowTime)")
let timescale = player.currentItem!.asset.duration.timescale
let currentTime = CMTime(value:Int64(Float64(currentShowTime!) * Float64(timescale)/1000.0), timescale:timescale)
//alternative way I count the seek time but the effect is the same
//let currentTime = CMTimeMakeWithSeconds(Float64(currentShowTime!)/1000.0, 1000)
print("currenttime \(currentTime)")
player!.seek(to: currentTime,toleranceBefore:kCMTimeZero, toleranceAfter:kCMTimeZero){done in
print("done: \(done)")
print("player currenttime \(self.player!.currentItem!.currentTime().seconds)")
}
Проблема заключается в том, что звуковой файл играет неправильное место. Все параметры: текущее время показа, текущее время и текущее время игрока одинаковы (печатайте те же значения). Но я слышу, что звук сдвинут. Когда начинается воспроизведение файла, сдвиг мал (возможно, 500 мс), но когда дело доходит до конца (20 минут файла), сдвиг намного больше (около 8 секунд). Я также заметил, что когда я предоставляю меньший mp3-файл (с меньшей скоростью передачи), сдвиг меньше, но когда файл находится в лучшем качестве, сдвиг составляет до 20 секунд. Я делаю это неправильно или это ошибка в AVPlayer?
Спасибо! Это оно! – user7509906