尝试在iOS Swift上下载视频Locall



我正在尝试单击一个按钮将视频下载到我的手机中。

i" m使用以下内容:

@IBAction func startDownload(_ sender: AnyObject) {
    let videoImageUrl = "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
    dispatch_async.global(DispatchQueue.(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
        let url = NSURL(string: videoImageUrl);
        let urlData = NSData(contentsOfURL: url! as URL);
        if(urlData != nil)
        {
            let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .userDomainMask, true)[0];
            let filePath="(documentsPath)/tempFile.mp4";
            dispatch_async(DispatchQueue.main, {
                urlData?.writeToFile(filePath, atomically: true);
                PHPhotoLibrary.sharedPhotoLibrary().performChanges({
                    PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(NSURL(fileURLWithPath: filePath))
                }) { completed, error in
                    if completed {
                        print("Video is saved!")
                    }
                }
            })
        }
    })
}

没有任何成功。

我有一个"无法调用'global'的类型参数列表(int,int)'

和未解决的phphotolibrary和phassetchangerequest

的未解决标识符

有人会知道这个工作如何吗?

非常感谢:)

- 编辑 -

@IBAction func startDownload(_ sender: UIButton) {
    let videoImageUrl = "https://my-video.mp4"

    DispatchQueue.global(qos: .default).async {
        let url = NSURL(string: videoImageUrl);
        let urlData = NSData(contentsOf: url! as URL);
        if(urlData != nil)
        {
            let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
            let filePath="(documentsPath)/tempFile.mp4";
            DispatchQueue.main.async {
                urlData?.write(toFile: filePath, atomically: true);
                PHPhotoLibrary.shared().performChanges({
                    PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: NSURL(fileURLWithPath: filePath) as URL)
                }) { completed, error in
                    if completed {
                        print("Video is saved!")
                    }
                }
            }
        }
    }
}

您的代码有几件事。

首先使用调度队列的方式。背景队列的正确方法是:

DispatchQueue.global(qos: .default).async {
    // Code ...
}

或主要队列:

DispatchQueue.main.async {
    // Code ...
}

第二,为了使用Photos框架,您需要导入它。在文件顶部添加import Photos

第三,Swift 3中有几个API更改,但是编译器应提供自动使用它们(例如,您应该在任何地方使用URLData,而不是NSURLNSData)。另外,您可以通过转到Edit-> Convert-> To Current Swift Syntax

将Swift 2项目转换为Swift 3项目

最后,下载视频的方式是错误的,它将完全加载到内存中,然后再保存到磁盘。如果视频很大,这将引起问题。查看URLSession API,以直接下载ressource的方法。

相关内容

  • 没有找到相关文章

最新更新