无法在后台播放 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 从 avi 文件生成无法播放的 MP4 文件

Webpack 3 找到 .mp4 文件,但视频无法播放

IE9 无法播放 MP4 文件

FFMPEG 转换的 mp4 文件无法在 firefox 和 chrome 中播放

Chrome 无法播放 .mp4 文件

无法从 mainBundle 播放 MP4 视频文件