使用Alamofire下载视频,然后在AV播放器上播放

Abh*_*ore 0 nsdata ios avplayer alamofire swift3

我已使用以下代码从下载视频URL。下载视频效果很好。

func downloadVideo(){

    Alamofire.request("https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4").downloadProgress(closure:{ (progress) in
    print(progress.fractionCompleted)
    self.progressView.progress = Float(progress.fractionCompleted)

    }).responseData{ (response) in
       print(response.result)
       print(response.result.value!)
       print(response.result.description)

        if let data = response.result.value {
            let obj = String(data: data, encoding: .utf8)
            let player = AVPlayer(url: URL(string: obj!)!)
            self.playerController.player = player
            self.addChildViewController(self.playerController)
            self.view.addSubview(self.playerController.view)
            self.playerController.view.frame = self.view.frame
            player.play()

        }

    }
Run Code Online (Sandbox Code Playgroud)

但我想在播放此视频 AVPlayer

我发现“可能是视频”下载为NSData。是正确的。?下载完成后,任何人都可以帮助我如何播放此视频吗?

如果有人可以建议一些其他代码供您使用进度条下载视频,然后在Swift 3.0中播放它,那将是很好的。

TIA。

Abh*_*ore 6

下班后搜寻这些东西

我想出了一种简单可靠的方法来在URL中转换NSData,以便AVPlayer可以播放它

func downloadVideo(){

    Alamofire.request("https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4").downloadProgress(closure : { (progress) in
    print(progress.fractionCompleted)
    self.progressView.progress = Float(progress.fractionCompleted)
    }).responseData{ (response) in
       print(response)
       print(response.result.value!)
       print(response.result.description)
        if let data = response.result.value {

            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let videoURL = documentsURL.appendingPathComponent("video.mp4")
            do {
                try data.write(to: videoURL)
                } catch {
                print("Something went wrong!")
            }
            print(videoURL)
            let player = AVPlayer(url: videoURL as URL)
            self.playerController.player = player
            self.addChildViewController(self.playerController)
            self.view.addSubview(self.playerController.view)
            self.playerController.view.frame = self.view.frame
            player.play()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用下面的这段代码来转换它

if let data = response.result.value {

            let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
            let videoURL = documentsURL.appendingPathComponent("video.mp4")
            do {
                try data.write(to: videoURL) // Pass this videoURL to AVPlayer after Downloading Video it will be played.
                } catch {
                print("Something went wrong!")
            }
            print(videoURL)
Run Code Online (Sandbox Code Playgroud)

根据请求,这是完整实现的源代码。

下载源代码

PS:-这是考虑到一个演示。你们中许多人会争辩说可以优化此代码,并且可以做得更好,但是是的,这是一个演示,您可以根据自己的需求选择部分或全部