Ich zeige gerade ein Video in meiner App und möchte, dass der Benutzer es in seiner Gerätegalerie/seinem Albumfoto/seiner Kamerarolle speichern kann. Hier ist es, was ich tue, aber das Video ist nicht im Album gespeichert:/Swift - Lade ein Video von entfernter URL herunter und speichere es in einem Fotoalbum
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");
})
}
})
}
I'va auch in aussehen:
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)
Aber ich habe den Fehler „kann nicht erstellt Daten aus Datei (null) ". Mein "AssetChangeRequest" ist null. Ich verstehe nicht, wie meine URL gültig ist, und wenn ich mit einem Browser dazu gehe, lade eine schnelle Zeitdatei herunter.
Wenn mir jemand helfen kann, wäre es willkommen! Ich benutze Swift und Targeting iOS 8.0 min.
Wenn Sie eine Datei auf Kamerarolle speichern möchten, einen Blick auf PHPhotoLibrary Klassen nehmen und die Methode 'creationRequestForAssetFromVideoAtFileURL' von' PHAssetChangeRequest' – Nimble
Im Dokument hier: https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/index.html#//apple_ref/occ/clm/PHAssetChangeRequest/creationRequestForAssetFromVideoAtFileURL, tue ich nicht verstehe was fileURL ist. –
'fileURL' ist ein Link zu einer Videodatei. Haben Sie versucht, Ihren 'filePath' als' fileURL' zu verwenden? Es kann wie folgt aussehen: 'PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL (NSURL (fileURLWithPath: filePath))' – Nimble