iOS:如何停止直播 AVPlayer?

Posted

技术标签:

【中文标题】iOS:如何停止直播 AVPlayer?【英文标题】:iOS: How can you stop live-streaming AVPlayer? 【发布时间】:2021-11-14 21:42:15 【问题描述】:

我想要一个用于播放直播的 AVPlayer。 音频播放效果很好。

class CustomPlayer: ObservableObject 

    let audiosession = AVAudioSession.sharedInstance()
    var p: AVPlayer

    init ()
        let string = "https://..."
        let url: URL! = URL(string: string)
        p = AVPlayer(url: URL)
        p.play()
        try! self.audioSession.setCategory(AVAudioSession.Category.playback)
        try! self.audioSession.setActive(true)
    


但是一旦我到了暂停/停止它的地步,它就变得困难了。

p.pause() 方法确实有效,但会暂停播放器,使其在暂停的同一点开始播放。这没有什么帮助,因为它当然应该毫无延迟地播放实时流。

所以我的想法是只使用p.isMuted = true 将播放器静音。但是后来我遇到了控制中心的NowPlayingInfoCenter中出现错误播放状态的问题,因为它继承自AVPlayer的播放状态。要手动更改播放状态,我的应用程序需要特殊权限/权利。 https://developer.apple.com/documentation/mediaplayer/mpnowplayinginfocenter/2588243-playbackstate/

所以这就是我被这个问题困扰的原因,我希望有人可以帮助我解决它。

非常感谢!

【问题讨论】:

您是否尝试简单地将当前 AVPlayerItem 替换为具有相同 URL 的“新”AVPlayerItem,即p.replaceCurrentItem(with: AVPlayerItem(url: string))。同样停止直播我认为你可以这样做:p.replaceCurrentItem(with: nil) 感谢您的建议!它的性能不是很好,但它对我有用。谢谢! 【参考方案1】:

除了p.pause(),你可以试试这个:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) 
    if avPlayer.player?.rate ?? 0 > 0 
        avPlayer.contentOverlayView?.removeAllSubviews()
    

并预先添加观察者:

avPlayer.player?.addObserver(self, forKeyPath: "rate", options: .new, context: nil)

注意: 这里,avPlayer 的类型应该是 AVPlayerViewController()

【讨论】:

以上是关于iOS:如何停止直播 AVPlayer?的主要内容,如果未能解决你的问题,请参考以下文章

同时播放两个 AVPlayer 音频文件时出现音频故障

AVPlayer HLS 直播 IOS

UIView 中的 AVPlayer 视图缺少控件

如何在 iOS 中使用 AVPlayer 缓冲音频?

iOS AVPlayer 后台播放问题自动停止问题 防止应用被后台挂起方法

由于间隙,AVPlayer 流在后台停止 [关闭]