Cómo transmitir un video con AVURLAsset y guardar en el disco los datos en caché
Hace unos días me pidieron que verificara cuán difícil es reproducir un video mientras lo descargo de Internet. Sé que es una tarea fácil porque alguien me lo dijo hace un tiempo. Así que lo comprobé y fue súper fácil.
El problema era que quería guardar en el disco el video para no obligar al usuario a descargarlo una y otra vez.
El problema era acceder al búfer y almacenarlo en el disco.
Muchas respuestas en Stackoverflow dicen que no es posible. Especialmente con videos.
Mi código original para reproducir el video:
import AVFoundation
....
//MARK: - Accessors
lazy var player: AVPlayer = {
var player: AVPlayer = AVPlayer(playerItem: self.playerItem)
player.actionAtItemEnd = AVPlayerActionAtItemEnd.None
return player
}()
lazy var playerItem: AVPlayerItem = {
var playerItem: AVPlayerItem = AVPlayerItem(asset: self.asset)
return playerItem
}()
lazy var asset: AVURLAsset = {
var asset: AVURLAsset = AVURLAsset(URL: self.url)
return asset
}()
lazy var playerLayer: AVPlayerLayer = {
var playerLayer: AVPlayerLayer = AVPlayerLayer(player: self.player)
playerLayer.frame = UIScreen.mainScreen().bounds
playerLayer.backgroundColor = UIColor.clearColor().CGColor
return playerLayer
}()
var url: NSURL = {
var url = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
return url!
}()
//MARK: - ViewLifeCycle
override func viewDidLoad() {
super.viewDidLoad()
view.layer.addSublayer(playerLayer)
player.play()
}