ios - descargar avplayer
Imposible detener AVPlayer (3)
Desde esta post , encontré la mejor solución para detener completamente AVPlayer antes de que abandone o inicie un nuevo reproductor:
videoPlayer.replaceCurrentItemWithPlayerItem(nil)
Actualmente estoy probando el uso de AVPlayer con url de transmisión de audio, usando Swift . Existen métodos play() y pause() , pero el problema es que, al pausar solo, la secuencia permanece en caché en el dispositivo.
Aquí está mi código de prueba:
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()
}
}
Aquí están los problemas al intentar algo:
player = nil
: "No se puede asignar un valor de tipo ''NilLiteralCOnvertible'' a un valor de tipo ''AVPlayer''"
player.currentItem = nil
: "No se puede asignar a la propiedad: ''currentItem'' es una propiedad de solo obtención"
Intenté todo, incluso a través de AVQueuePlayer sin ningún resultado efectivo. (Obviamente, ya que solo tengo un artículo en mi caso).
¿Cómo detener AVPlayer o destruir su instancia ?
Si declara el player
como una variable opcional, puede configurar el jugador en nil
para desasignarlo.
Ejemplo tonto pero muestra lo que sucede:
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")
}
}
}
Versión SWIFT 3:
player.replaceCurrentItem(with: nil)