获取下载数据的本地URL,而不是提供服务器URL

时间:2017-06-14 15:49:10

标签: ios swift video avplayer

我想在ViewController中播放一个视频文件,该文件已加载到PageViewController的每个页面中。正如您将能够看到我使用名为Carlos的插件来缓存视频(最初需要从服务器下载),以便每次用户点击新页面时都不必下载它们。但是,我无法想办法如何播放这个下载的文件(NSData)。因此,我真的想知道如何获取下载文件的URL,以便我可以使用AVPlayer播放它。

代码(仍然使用来自服务器的URL)

let omniCache = videoCache.cache

let request = omniCache.get(URL(string: video!)!)

request
    .onSuccess { videoFile in

        print("The file..." )
        print(videoFile)

        //How can I get the local URL here instead of my server url
        if let videoURL = URL(string: self.video!){

            if self.player == nil {

                let playerItemToBePlayed = AVPlayerItem(url: videoURL as URL)

                self.player = AVPlayer(playerItem: playerItemToBePlayed)

                let playerLayer = AVPlayerLayer(player: self.player)
                playerLayer.frame = self.view.frame
                self.controlsContainerView.layer.insertSublayer(playerLayer, at: 0)

            }

        }

    }
    .onFailure { error in

        print("An error occurred :( \(error)")

    }

1 个答案:

答案 0 :(得分:0)

看看你的代码:

    videoFile in

    print("The file..." )
    print(videoFile)

    if let videoURL = URL(string: self.video!){

所以在第一行中打印videoFile,结果证明是文件的数据。但是你忽略了它!你再也不提起videoFile了。你为什么忽略它?那个数据,你已经有了数据。现在玩吧!

如果数据是文件,请获取其文件URL并进行播放。如果它在内存中 - 它绝对不应该是,因为完全保存在内存中的视频会使程序崩溃 - 保存它,并获取那个文件URL并播放它。

[但是,我不得不问,为什么要在自己和这么简单的任务之间插入这个缓存插件。为什么不直接将远程视频下载到磁盘上?]