AvPlayer ищет перерыв по секундам при воспроизведении URL-адреса аудиоIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 AvPlayer ищет перерыв по секундам при воспроизведении URL-адреса аудио

Сообщение Anonymous »

У меня есть очень простой аудиоплеер, который воспроизводит mp3-файлы по URL-адресу.

Код: Выделить всё

func start() {
if let url = URL(string: cloudinaryUrl) {
self.avPlayerItem = AVPlayerItem(url: url)
self.avPlayer = AVPlayer(playerItem: avPlayerItem)
self.avPlayer?.rate = Float(rate.rate)
self.avPlayer?.play()
}
}
И ползунок, представляющий дорожку:

Код: Выделить всё

///View Model
func setTime(_ newValue: Double) {
guard let avPlayer = avPlayer, let avPlayerItem = avPlayerItem else { return }
let clampedValue = max(0, min(1, newValue))
let time = CMTimeGetSeconds(avPlayerItem.duration) * clampedValue
let cmtime: CMTime = CMTimeMake(value: Int64(time * 1000 as Float64), timescale: 1000)
avPlayer.seek(to: cmtime, toleranceBefore: .zero, toleranceAfter: .zero)
}

// SwiftUI View
@State var slider: Double = 0

Slider(value: $slider, in: 0...1, onEditingChanged: { moving in
viewModel.setTime(slider)
})
Это работает хорошо, и я могу переместить ползунок туда, где я хочу, чтобы звук начинался, и это происходит стабильно.
Однако у меня есть список кнопок с интервалами времени, например. 27.320. Когда я нажимаю кнопку, я хочу перейти к моменту времени с помощью аудиоплеера. Однако, похоже, это не всегда соответствует метке времени, и я не знаю, почему. Как ни странно, с первого раза он воспроизводится правильно, а затем при последующих щелчках воспроизводится на секунду или две назад.

Код: Выделить всё

// view model
func setTranscriptTime(_ newValue: Double) {
guard let avPlayer = avPlayer else {
setError(error: .noPlayer)
return
}

let cmtime: CMTime = CMTimeMake(
value: Int64(newValue * 1000 as Float64),
timescale: 1000
)
print(cmtime)
avPlayer.seek(
to: cmtime,
toleranceBefore: .zero,
toleranceAfter: .zero
)
}

// view
Button(action: {
viewModel.setTranscriptTime(dialogue[index].startTime)
}) {
Text(line.text)
}
Это печатается

Код: Выделить всё

CMTime(value: 27320, timescale: 1000, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0)
Чего я и ожидал, учитывая нулевой допуск, я не уверен, почему это вообще отключено. Буду признателен за совет! Спасибо

Подробнее здесь: https://stackoverflow.com/questions/786 ... -audio-url
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»