无法阻止AVPlayer

我目前正在使用Swift测试AVPlayer与音频流url的使用。 有play()和pause()方法,但问题是,仅暂停,流仍然缓存在设备中。

这是我的测试代码:

import UIKit import AVFoundation class ViewController: UIViewController { let player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!) @IBOutlet weak var btnPlay: UIButton! override func viewDidLoad() { super.viewDidLoad() } @IBAction func btnPress(sender: AnyObject) { if (btnPlay.titleLabel?.text == "Play") { initPlayer() btnPlay.setTitle("Stop", forState: UIControlState.Normal) } else { stopPlayer() btnPlay.setTitle("Play", forState: UIControlState.Normal) } } func initPlayer() { player.play() } func stopPlayer() { // player.currentItem = nil // Last thing I tried, but generate an error player.pause() } } 

以下是尝试某些事情时的问题:

player = nil :“无法将’NilLiteralCnvertible’类型的值赋给’AVPlayer’类型的值”

player.currentItem = nil :“无法分配给属性:’currentItem’是一个只用属性”


我尝试了一切,甚至通过AVQueuePlayer没有任何有效的结果。 (显然,因为我的情况只有一个项目)。

如何停止AVPlayer销毁他的实例

如果您将player声明为可选变量,则可以将播放器设置为nil以取消分配它。

愚蠢的例子但它显示了会发生什么:

 import UIKit import AVFoundation class ViewController: UIViewController { @IBOutlet weak var btnPlay: UIButton! var player:AVPlayer? override func viewDidLoad() { super.viewDidLoad() } @IBAction func btnPress(sender: AnyObject) { if (btnPlay.titleLabel?.text == "Play") { initPlayer() btnPlay.setTitle("Stop", forState: UIControlState.Normal) } else { stopPlayer() btnPlay.setTitle("Play", forState: UIControlState.Normal) } } func initPlayer() { if let play = player { print("playing") play.play() } else { print("player allocated") player = AVPlayer(URL: NSURL(string: "http://streaming.radio.rtl.fr/rtl-1-48-192")!) print("playing") player!.play() } } func stopPlayer() { if let play = player { print("stopped") play.pause() player = nil print("player deallocated") } else { print("player was already deallocated") } } } 

从这篇文章中我发现了在离开或开始新玩家之前完全停止AVPlayer的最佳解决方案:

 videoPlayer.replaceCurrentItemWithPlayerItem(nil) 

SWIFT 3版本:

 player.replaceCurrentItem(with: nil)