我在尝试播放背景音频时遇到了一个奇怪的错误
我做了以下事情:
能力✅
框架✅
我的代码:
var player = AVPlayer()
var playerViewController = AVPlayerViewController()
override func viewDidLoad() {
super.viewDidLoad()
do {
try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
print("Playback OK")
UIApplication.shared.beginReceivingRemoteControlEvents()
addPlayerNotifications()
try AVAudioSession.sharedInstance().setActive(true)
print("Session is Active")
} catch {
fatalError(error.localizedDescription)
}
}
addPlayerNotifications()
:
func addPlayerNotifications() {
NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEnd), name: .AVPlayerItemDidPlayToEndTime, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}
但是,当切换到相应的部分时,这是一个tabbar应用程序我遇到此错误的崩溃:
线程1:致命错误:无法完成操作。 (OSStatus错误-50。)在这一行:
fatalError(error.localizedDescription)
更奇怪的是,
此代码适用于:
模拟器✅
物理iPhone X(iOS 12.4.1)❌
另一个没有Tabbar的Xcode项目✅
它是一个带有2个视图控制器的简单tabbar。我真的不知道我做错了什么
我建议在进入后台时用isOn = false
调用这个功能,当来自前景时调用true
。这将关闭轨道媒体但保持声音。
func setPlayerMediaCharacteristic(isOn: Bool) {
guard let currentPlayerItem = playerViewController.player?.currentItem else { return }
for track in currentPlayerItem.tracks where track.assetTrack.hasMediaCharacteristic(.visual) {
track.isEnabled = isOn
}
}