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?的主要内容,如果未能解决你的问题,请参考以下文章