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()
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta