我当前正在我的应用程序中显示视频,我希望用户能够将其保存到其设备图库/相册照片/相机胶卷中。
这就是我正在做的,但视频未保存在相册中:/
func downloadVideo(videoImageUrl:String)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
//All stuff here
print("downloadVideo");
let url=NSURL(string: videoImageUrl);
let urlData=NSData(contentsOfURL: url!);
if((urlData) != nil)
{
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0];
let fileName = videoImageUrl; //.stringByDeletingPathExtension
let filePath="\(documentsPath)/\(fileName)";
//saving is done on main thread
dispatch_async(dispatch_get_main_queue(), { () -> Void in
urlData?.writeToFile(filePath, atomically: true);
print("videoSaved");
})
}
})
}
我也研究过这个:
let url:NSURL = NSURL(string: fileURL)!;
PHPhotoLibrary.sharedPhotoLibrary().performChanges({
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(url);
let assetPlaceHolder = assetChangeRequest!.placeholderForCreatedAsset;
let albumChangeRequest = PHAssetCollectionChangeRequest(forAssetCollection: self.assetCollection)
albumChangeRequest!.addAssets([assetPlaceHolder!])
}, completionHandler: saveVideoCallBack)
但我有错误“无法从文件创建数据(空)”。我的“assetChangeRequest”为零。我不明白,因为我的网址是有效的,当我使用浏览器访问它时,它会下载一个快速文件。
如果有人可以帮助我,我将不胜感激!我正在使用 Swift,目标是 iOS 8.0 分钟。
Update
想要使用 URLSession 更新 Swift 3 的答案,并发现答案已经存在于相关主题中here https://stackoverflow.com/questions/35503723/swift-downloading-video-with-downloadtaskwithurl。用它。
原答案
下面的代码将视频文件保存到相机胶卷。我重复使用了你的代码,做了一点小小的改变 - 我删除了let fileName = videoImageUrl;
因为它会导致文件路径不正确。
我测试了这段代码,它将资产保存到相机胶卷中。你问要放入什么creationRequestForAssetFromVideoAtFileURL
- 添加下载视频文件的链接,如下例所示。
let videoImageUrl = "http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"
DispatchQueue.global(qos: .background).async {
if let url = URL(string: urlString),
let urlData = NSData(contentsOf: url) {
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: URL(fileURLWithPath: filePath))
}) { completed, error in
if completed {
print("Video is saved!")
}
}
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)