AVPlayer не воспроизводит аудио - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь воспроизвести аудиофайл URL, выбранный с помощью MPMediaPickerController, и прикрепить наблюдателя к объекту player.Я не знаю, почему проигрыватель не воспроизводит аудиофайл, на устройстве нет звука, и не отображается сообщение об ошибке.

var timeObserverToken: Any?

 func addPeriodicTimeObserver(url: URL) {

    let playerItem = AVPlayerItem(url: url)
    let player = AVPlayer(playerItem: playerItem)
        player.play()


    // Invoke callback every half second
    let interval = CMTime(seconds: 0.5,
                          preferredTimescale: CMTimeScale(NSEC_PER_SEC))

    let mainQueue = DispatchQueue.main
    timeObserverToken = player.addPeriodicTimeObserver(forInterval: interval, queue: mainQueue) { [weak self] time in

            //it is never called
            print("time is \(time)") 
     }
   }//end addPeriodicTimeObserver

1 Ответ

0 голосов
/ 11 декабря 2018

Вы должны объявить AVPlayer как глобальную переменную внутри вашего класса / структуры.Итак, удалите player из addPeriodicTimeObserver функции и объявите глобально.

Причина этого заключается в том, что

Локальные переменные (переменные, объявленные внутри функции) освобождаются как только функция вернет ;В этом случае player освобождается до того, как начнет играть.

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

В случае использования реального устройства для тестирования, убедитесь, что оно не находится в беззвучном режиме ?

...