如果您的应用程序播放视频并暂停背景音频,您如何在完成后让背景音频恢复?
Posted
技术标签:
【中文标题】如果您的应用程序播放视频并暂停背景音频,您如何在完成后让背景音频恢复?【英文标题】:If your app plays video and pauses background audio, how do you get the background audio to RESUME when you're finished? 【发布时间】:2019-01-30 19:29:46 【问题描述】:我有一个应用程序,用户可以在其中全屏播放视频。这可以通过AVPlayerViewController
轻松完成。
效果很好,但是在用户正在收听播客的情况下,如果他们点击视频进行观看,它会暂停播客以便用户观看视频,但是当我关闭视频我希望播客能够恢复。这是大多数应用程序中的行为,例如,我已经通过 Twitter 和 Tweetbot 确认了这一点。奇怪的是,下面的代码适用于 Apple Podcast(它将恢复),但没有其他的,并且像前面提到的 Tweetbot 这样的其他应用程序普遍适用。
但是,我绝对没有运气让这个自己工作。
我尝试过的事情:
仅向AVPlayerViewController
提供所需的最少代码量:不会恢复。
在AVPlayerViewController
中的viewDidDisappear
调用AVAudiosession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
:不恢复并显示“玩家正忙”错误。
好的,让我们尝试在viewDidDisappear
中使用player?.pause()
手动停止播放器:不会恢复,仍然给出“播放器正忙”错误。
嗯,也许再等一下?尝试在 DispatchQueue.main.asyncAfter
1 秒后调用 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 等的内容,然后运行该应用并点击查看视频。
试图弄清楚这个相对微不足道的事情我有点发疯了,因为我确信我只是在做一些非常愚蠢的事情,但任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:您是否尝试过使用player
作为成员变量?所以你可以在view消失后销毁它,还没有测试,但是代码应该是这样的:
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)
【讨论】:
不幸的是,销毁它似乎没有任何效果。 ://【参考方案2】:(抱歉,我好像不能离开 cmets)
您是否尝试过在不同的设备上进行测试(使用不同的 iOS 版本?)。您的示例代码在我的 iPhone 6 (iOS 12.1.2) 上运行良好,我测试了音乐和播客。
【讨论】:
Apple 制造的应用程序似乎确实有效,但我找不到任何有效的第三方应用程序。尝试任何其他播放背景音频的应用。以上是关于如果您的应用程序播放视频并暂停背景音频,您如何在完成后让背景音频恢复?的主要内容,如果未能解决你的问题,请参考以下文章