【发布时间】:2016-05-30 12:38:33
【问题描述】:
我目前正在我的应用中显示一个视频,我希望用户能够将其保存到其设备图库/相册照片/相机胶卷中。 这就是我正在做的,但视频没有保存在相册中:/
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 分钟。
【问题讨论】:
-
如果要将文件保存到相机胶卷,请查看 PHPhotoLibrary 类和方法
creationRequestForAssetFromVideoAtFileURL的PHAssetChangeRequest -
在此处的文档中:developer.apple.com/library/prerelease/ios/documentation/Photos/…,我不明白 fileURL 是什么。
-
fileURL是指向视频文件的链接。您是否尝试将您的filePath用作fileURL?它可能看起来像这样PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(NSURL(fileURLWithPath: filePath)) -
顺便说一下,您不需要手动保存文件。使用 NSURLSession downloadTaskWithURL 下载视频文件。有一个完成处理程序返回
location:NSURL,这是存储服务器响应的临时文件的位置。在creationRequestForAssetFromVideoAtFileURL中使用这个location:NSURL -
我的 url 在字符串中,然后我让 url = NSURL(string: fileURL);我在第二次代码和平中使用了这个 url,但是在执行时 Xcode 在这个 ligne 上停止:albumChangeRequest!.addAssets([assetPlaceHolder!])