我有一个可以让用户全屏播放视频的应用程序。使用AVPlayerViewController
非常简单地完成此操作。
这很好用,但是在用户收听播客的情况下,如果他们点击视频观看,则会暂停播客,以便用户可以观看视频,但是当我关闭播客时视频,我希望播客能够恢复。这是大多数应用程序中的行为,例如,我已经通过Twitter和Tweetbot进行了确认。奇怪的是,下面的代码适用于Apple Podcast(将恢复),但没有其他功能,并且其他应用(例如上述Tweetbot)都可以通用。
但是我绝对没有运气让它自己工作。
我尝试过的事情:
AVPlayerViewController
所需的最少代码量:不会恢复。viewDidDisappear
的{{1}}上调用AVPlayerViewController
:不会恢复,并显示“玩家忙”错误。AVAudioSession.sharedInstance().setActive(false, options: .notifyOthersOnDeactivation)
中的player?.pause()
手动停止播放器:不会继续播放,仍然会显示“播放器忙”错误。viewDidDisappear
1秒后致电setActive
吗?没有错误,但不会继续。我已经用很少的代码将它放在了一个测试项目中:
DispatchQueue.main.asyncAfter
这是完整的可编译项目(实际上就是上面的代码):https://drive.google.com/file/d/1oWb-bNIQv5B1KjMkez6BxuEIh_n6eFxH/view
播放诸如Apple Music,Spotify,Overcast之类的内容,然后运行该应用并点按观看视频。
我想弄清楚这个相对琐碎的事情有点发疯,因为我敢肯定我只是在做一件令人难以置信的愚蠢的事情,但是任何帮助都将不胜感激。
答案 0 :(得分:0)
您是否尝试过将player
用作成员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)
}
}
}
答案 1 :(得分:0)
(对不起,我似乎无法发表评论)
您是否尝试过在其他设备(具有不同的iOS版本)上进行测试?您的示例代码在我的iPhone 6(iOS 12.1.2)上运行良好,我测试了音乐和播客。