如果您的应用播放视频并暂停背景音频,如何在完成后让背景音频恢复?



我有一个应用程序,用户可以在其中全屏播放视频。这是用CCD_ 1非常简单地完成的。

它工作得很好,但在用户正在听播客的情况下,如果他们点击视频观看,它会暂停播客,这样用户就可以观看视频,但当我关闭视频时,我希望播客会继续。这是大多数应用程序中的行为,例如,我已经在推特和推特上证实了这一点。奇怪的是,下面的代码适用于苹果播客(它恢复),但没有其他代码,而且像前面提到的Tweetbot这样的其他应用程序普遍适用。

然而,我自己完全没有运气把它发挥作用。

我尝试过的东西:

  • 仅向AVPlayerViewController提供所需的最少代码量:不会继续
  • AVPlayerViewControllerviewDidDisappear上调用AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation):未恢复,并抛出"播放器正忙"错误
  • 好吧,让我们尝试在viewDidDisappear中使用player?.pause()手动停止播放器:不会恢复,仍然会出现"播放器正忙"错误
  • 嗯,也许等一下?尝试在DispatchQueue.main.asyncAfter1秒后调用setActive?没有错误,但不会继续

我用最少的代码将其放入一个测试项目中:

import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .system)
button.addTarget(self, action: #selector(buttoned(sender:)), for: .touchUpInside)
button.setTitle("Tap here to view video", for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 19.0)
button.frame = view.bounds
view.addSubview(button)
}
@objc private func buttoned(sender: UIButton) {
let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = CustomVideoController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player?.play()
}
}
}
class CustomVideoController: AVPlayerViewController {
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
do {
try AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
} catch {
print(error)
}
}
}

以下是完整的可编译项目(实际上只是上面的代码):https://drive.google.com/file/d/1oWb-bNIQv5B1KjMkez6BxuEIh_n6eFxH/view

播放Apple Music、Spotify、Overcast等的内容,然后运行应用程序并点击查看视频。

我有点疯狂地试图弄清楚这件相对琐碎的事情,因为我确信我只是在做一些非常愚蠢的事情,但任何帮助都将不胜感激。

您是否尝试使用AVPlayerViewController0作为成员var?所以你可以在视图消失后销毁它,还没有测试,但代码应该是这样的:

import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController {
var player:AVPlayer?
override func viewDidLoad() {
super.viewDidLoad()
let button = UIButton(type: .system)
button.addTarget(self, action: #selector(buttoned(sender:)), for: .touchUpInside)
button.setTitle("Tap here to view video", for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 19.0)
button.frame = view.bounds
view.addSubview(button)
}
@objc private func buttoned(sender: UIButton) {
let videoURL = URL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
player = AVPlayer(url: videoURL!)
let playerViewController = CustomVideoController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player?.play()
}
}
}
class CustomVideoController: AVPlayerViewController {
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
player.pause()
player = nil
do {
try AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
} catch {
print(error)
}
}
}

(抱歉,我似乎无法留下评论)

你是否尝试过在不同的设备上进行测试(使用不同的iOS版本?)。你的示例代码在我的iPhone 6(iOS 12.1.2)上运行良好,我测试了音乐和播客。

最新更新