Воспроизведение mp3-данных (строка mp3 в кодировке 64) на AVAudioPlayer с обратными вызовами в разное время? - PullRequest
0 голосов
/ 16 октября 2019

Мне нужно воспроизвести строку mp3 в кодировке base64 и получать обратные вызовы в определенное время, чтобы я мог выполнять некоторые операции.

Я попробовал AVAudioPlayer initWithData и смог воспроизвести эту строку, но метода обратного вызова нетв AVAudioPlayer.

AVPlayer предоставляет наблюдения за состоянием во времени, но не позволяет воспроизводить строку в кодировке base 64, поскольку в ней нет метода initwithdata.

1 Ответ

0 голосов
/ 17 октября 2019

В зависимости от вашей цели, вы можете наблюдать тайминги через заданные интервалы и в рамках этого обратного вызова оптимизировать свою логику до определенной продолжительности, чтобы действовать.

Просто реализуйте 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
}

. Убедитесь, чтосохранять строгую ссылку на любого наблюдателя, в противном случае он будет освобожден и обратный вызов не будет вызван.

...