gpt4 book ai didi

ios - 解散 AVPlayerViewController 后如何恢复其他应用程序的音频播放?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:22:27 25 4
gpt4 key购买 nike

我使用 AVPlayerViewController 在我的应用中播放短视频。

如果在用户在我的应用中播放视频之前有一个应用在后台播放音频,我希望在我的视频播放器关闭后恢复另一个应用的后台音频播放。我目前使用 AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation) 来做到这一点。

即使在我调用 AVAudioSession.setActive(false, with: .notifyOthersOnDeactivation) 后苹果的音乐应用程序和播客应用程序确实恢复播放——如果没有调用就不会继续播放,所以这意味着这个调用确实有效果——我测试过的第 3 方音乐或播客应用程序(Spotify、SoundCloud、Amazon Music、Overcast)都没有。

这是我的代码:

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

// I know it's not the best place to call setActive nor it covers all the cases. It's just a convenient place to put the code to test its effect after dismissing the video player.
do {
try AVAudioSession.sharedInstance().setActive(false, with: .notifyOthersOnDeactivation)
} catch {
print(error)
}
}

@IBAction func play(_ sender: Any) {
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}

let playerController = AVPlayerViewController()
playerController.player = AVPlayer(url: URL(string: "http://gslb.miaopai.com/stream/UkjiD45ddxZFQ79I2bLaGg__.mp4")!)
playerController.player?.play()
present(playerController, animated: true)
}

起初我认为这可能是这些第 3 方应用程序的错。但后来我用官方推特应用程序测试了它们,发现它们可以在推特应用程序播放视频后恢复音频播放。

那我错过了什么?我应该怎么做才能让这些第 3 方应用在我的应用中播放视频后恢复音频播放,就像 Twitter 应用一样?

PS:这里是完整的 project所以有兴趣的人可以试试。

最佳答案

I want the background audio playing of the other app to resume after my video player is dismissed

您需要接受这不取决于您。 所能做的就是妥善管理您的 Audio Session 。其他应用程序是否“接受提示”并恢复其音频不在您的控制范围内。

但是,您没有正确地管理您的 Audio Session 。你应该:

  • 一般使用无干扰的类别(例如环境光)。

  • 更改您的播放类别并仅在您需要时(即仅当我们真正要播放时)激活它

  • 播放完毕后,使用 notifyOthersOnDeactivation 停用,然后切换回无干扰的音频类别(例如 Ambient)并激活它。

一旦你完成了这些事情,你就已经完成了所有你能做的。有些应用会恢复,有些则不会。

关于ios - 解散 AVPlayerViewController 后如何恢复其他应用程序的音频播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42407925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com