无法在后台播放mp4文件

问题描述 投票:0回答:1

我在尝试播放背景音频时遇到了一个奇怪的错误

我做了以下事情:

能力✅

框架✅

我的代码:

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)

IMG

更奇怪的是,

此代码适用于:

模拟器✅

物理iPhone X(iOS 12.4.1)❌

另一个没有Tabbar的Xcode项目✅

它是一个带有2个视图控制器的简单tabbar。我真的不知道我做错了什么

swift avkit
1个回答
1
投票

我建议在进入后台时用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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.