无法在后台播放 mp4 文件
Posted
技术标签:
【中文标题】无法在后台播放 mp4 文件【英文标题】:Unable to play mp4 files in the background 【发布时间】:2019-02-16 10:35:21 【问题描述】:我在尝试播放背景音频时遇到一个奇怪的错误
我做了以下事情:
能力✅
框架 ✅
我的代码:
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)
但是,这是一个标签栏应用程序,当切换到相应的部分时,我会因以下错误而崩溃:
线程 1:致命错误:操作无法完成。 (OSStatus 错误 -50。)在这一行:
fatalError(error.localizedDescription)
更奇怪,
此代码适用于:
模拟器✅
实体版 iPhone X (iOS 12.4.1) ❌
在另一个没有 Tabbar 的 Xcode 项目中 ✅
这是一个带有 2 个视图控制器的简单标签栏。我真的不知道我做错了什么
【问题讨论】:
【参考方案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
【讨论】:
以上是关于无法在后台播放 mp4 文件的主要内容,如果未能解决你的问题,请参考以下文章