【问题标题】:AVPlayer is not playing audioAVPlayer 不播放音频
【发布时间】:2018-12-11 15:42:41
【问题描述】:

我正在尝试播放使用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

【问题讨论】:

  • @AhmadF 我在控制台中只得到打印 time is CMTime(value: 0, timescale: 1, flags: __C.CMTimeFlags(rawValue: 1), epoch: 0) ,但没有声音播放。见imgur.com/a/b4N7n0f

标签: swift avplayer


【解决方案1】:

您应该在您的类/结构中将AVPlayer 声明为一个全局 变量。因此,从 addPeriodicTimeObserver 函数中删除 player 并全局声明。

这背后的原因是:

局部变量(在函数内部声明的变量)一旦函数返回就会被释放;在这种情况下,player 在播放之前就被释放了。

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

如果使用真机进行测试,请确保其不是静音模式?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-20
    • 2018-02-20
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多