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

Ios 使用Alamofire下载视频,然后在AV播放器上播放,ios,swift3,alamofire,avplayer,nsdata,Ios,Swift3,Alamofire,Avplayer,Nsdata,我使用以下代码从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(pr

我使用以下代码从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()

        }

    }
但我想用AVPlayer播放这段视频

我发现可能是视频作为NSData下载的。我是对的。? 有人能帮我下载完视频后如何播放吗

如果有人能给我推荐一些其他的代码就好了 使用进度条下载视频,然后在Swift 3.0中播放


TIA.

经过几个小时的搜索,这些东西

我想出了一个简单可靠的方法来转换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()
        }
    }
}
您可以使用下面这段代码来转换

按照要求,, 下面是完整实现的源代码

附言:这是一个演示的想法。你们中的许多人会争辩说,这段代码可以优化,可以做得更好,但确实如此 是一个演示,您可以根据需要选择部分或全部 你的要求


经过几个小时的搜寻

我想出了一个简单可靠的方法来转换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()
        }
    }
}
您可以使用下面这段代码来转换

按照要求,, 下面是完整实现的源代码

附言:这是一个演示的想法。你们中的许多人会争辩说,这段代码可以优化,可以做得更好,但确实如此 是一个演示,您可以根据需要选择部分或全部 你的要求


设obj=Stringdata:data,编码:.utf8;让player=avplayerrl:URLstring:obj!!那没有道理。obj应该是视频字节的内容,如何将其转换为字符串?这怎么会是一个URL?@Larme我知道我走错了路。请建议一些更好的路径你真的需要加载它吗?为什么不直接执行let player=avplayerrl:URLstring:https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4!? 否则,您需要将数据保存到应用程序文件管理器或类似文件路径中,并将该路径用于AVPlayerurl:URLstring:myFilePath@Larme为了将来的参考,我需要下载视频并将其存储到我的本地目录中。是否有其他方法可以做到这一点,然后在AVPlayer中播放它。Thankslet obj=Stringdata:数据,编码:.utf8;让player=avplayerrl:URLstring:obj!!那没有道理。obj应该是视频字节的内容,如何将其转换为字符串?这怎么会是一个URL?@Larme我知道我走错了路。请建议一些更好的路径你真的需要加载它吗?为什么不直接执行let player=avplayerrl:URLstring:https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4!? 否则,您需要将数据保存到应用程序文件管理器或类似文件路径中,并将该路径用于AVPlayerurl:URLstring:myFilePath@Larme为了将来的参考,我需要下载视频并将其存储到我的本地目录中。是否有其他方法可以做到这一点,然后在AVPlayer中播放它。感谢您的代码在tableview中帮助了我很多,我可以显示视频,但在单个页面中我无法显示。是否有其他下载选项&play@UmaMadhavi此代码仅适用于单一视图。你能分享你的代码片段吗,比如你是如何使用它的,这样我就可以看到你的问题了。我已使用此当前代码下载了Solo视频,然后在View Controller的全屏AV播放器中播放。为什么使用appendingPathComponent?@Lakshay访问我的名为Video.mp4的文件。澄清你的疑问。首先只打印printdocumentsURL,然后打印视频URL。看到这个变化,你的疑问将有望得到澄清。@AbhirajsinhThakore你能提供完整的来源吗?我正在开发一个流媒体应用程序,希望检查这是否适用于我的情况。谢谢您的代码在tableview中帮助了我很多,我可以显示视频,但在单个页面中我无法显示。是否有其他下载选项&play@UmaMadhavi此代码仅适用于单一视图。你能分享你的代码片段吗,比如你是如何使用它的,这样我就可以看到你的问题了。我已使用此当前代码下载了Solo视频,然后在View Controller的全屏AV播放器中播放。为什么使用appendingPathComponent?@Lakshay访问我的名为Video.mp4的文件。澄清你的疑问。首先只打印printdocumentsURL,然后打印视频URL。看到这个变化,你的疑问将有望得到澄清。@AbhirajsinhThakore你能提供完整的来源吗?我正在开发一个流媒体应用程序,希望检查这是否适用于我的情况。谢谢