AVPlayer 不播放音频

AVPlayer is not playing audio

我正在尝试播放用 MPMediaPickerController 选取的 url 音频文件,并在 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

您应该在 class/struct 中将 AVPlayer 声明为 全局 变量。因此,从 addPeriodicTimeObserver 函数中删除 player 并全局声明。

这背后的原因是:

局部变量(在函数内部声明的变量)被释放一旦函数returns;在这种情况下,player 在 甚至播放之前 被释放。

实例变量(在class范围内声明的变量)被释放一旦class实例被释放(除非有一个保留循环)。

如果使用真实设备进行测试,请确保其未处于静音模式