AVPlayer 不播放音频
Posted
技术标签:
【中文标题】AVPlayer 不播放音频【英文标题】:AVPlayer is not playing audio 【发布时间】: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
【参考方案1】:
您应该在您的类/结构中将AVPlayer
声明为一个全局 变量。因此,从 addPeriodicTimeObserver
函数中删除 player
并全局声明。
这背后的原因是:
局部变量(在函数内部声明的变量)一旦函数返回就会被释放;在这种情况下,player
在播放之前就被释放了。
实例变量(在类范围内声明的变量)一旦类实例被释放(除非存在保留循环)。
如果使用真机进行测试,请确保其不是静音模式?
【讨论】:
以上是关于AVPlayer 不播放音频的主要内容,如果未能解决你的问题,请参考以下文章
使用 AVPlayer 播放音频时如何在 UIWebView 中暂停音频