ios - values - twitter meta tag




come salvare il file video nella directory del documento (6)

Sto catturando video usando il seguente codice:

UIImagePickerController *ipc = [[UIImagePickerController alloc] init];
ipc.sourceType =  UIImagePickerControllerSourceTypeCamera;
ipc.delegate = self;
//need to handle delegates methods 
//
ipc.allowsEditing = YES;
ipc.videoQuality = UIImagePickerControllerQualityTypeMedium;
ipc.videoMaximumDuration = 30.0f; // 30 seconds
//temporary duation of 30 seconds for testing

ipc.mediaTypes = [NSArray arrayWithObject:@"public.movie"];
// ipc.mediaTypes = [NSArray arrayWithObjects:@"public.movie", @"public.image", nil];
[self presentModalViewController:ipc animated:YES]; 
//this controller allows to record the videos

e posso salvare il video registrato nell'album usando il seguente codice

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{ 
    // recover video URL
    NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];

    // check if video is compatible with album
    BOOL compatible = UIVideoAtPathIsCompatibleWithSavedPhotosAlbum([url path]);

    // save
    if (compatible){
        UISaveVideoAtPathToSavedPhotosAlbum([url path], self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
        NSLog(@"saved!!!! %@",[url path]);
    }
    [self dismissModalViewControllerAnimated:YES];
    [picker release];
}

ma ho bisogno di recuperare quel file dall'album e ho bisogno di memorizzarlo nella directory dei documenti?


Ecco il codice rapido se qualcuno ne ha bisogno in futuro:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {

    let videoURL = info[UIImagePickerControllerMediaURL] as! NSURL
    let videoData = NSData(contentsOfURL: videoURL)
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let documentsDirectory: AnyObject = paths[0]
    let dataPath = documentsDirectory.stringByAppendingPathComponent("/vid1.mp4")

    videoData?.writeToFile(dataPath, atomically: false)
    self.dismissViewControllerAnimated(true, completion: nil)

}

Il salvataggio del video nella directory dei documenti è il seguente:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *tempPath = [documentsDirectory stringByAppendingFormat:@"/vid1.mp4"];
    BOOL success = [videoData writeToFile:tempPath atomically:NO];
    [picker dismissModalViewControllerAnimated:YES];
}

Swift 3/4

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        // recover video URL
        let url = info[UIImagePickerControllerMediaURL] as? URL
        // check if video is compatible with album
        let compatible: Bool = UIVideoAtPathIsCompatibleWithSavedPhotosAlbum((url?.path)!)
        // save
        if compatible {
            UISaveVideoAtPathToSavedPhotosAlbum((url?.path)!, self, nil, nil)
            print("saved!!!! \(String(describing: url?.path))")
        }
        dismiss(animated: true, completion: nil)
    }
//   error
    func video(_ videoPath: String, didFinishSavingWithError error: Error?, contextInfo: UnsafeMutableRawPointer) {
    }

esempio di salvataggio Percorso: -

"/private/var/mobile/Containers/Data/Application/EA53C844-7931-446C-800D-DA90717426BB/tmp/xxxxxx.MOV"

Un po 'di R & S, questo ha funzionato per me

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

 NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
  // Save video to app document directory

NSString *filePath = [url path];
NSString *pathExtension = [filePath pathExtension] ;
if ([pathExtension length] > 0)
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ;
    NSString *documentsDirectory = [paths objectAtIndex:0];

    NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", [filePath lastPathComponent]]];

   // Method last path component is used here, so that each video saved will get different name.

    NSError *error = nil ;
    BOOL res = [[NSFileManager defaultManager] moveItemAtPath:filePath toPath:localFilePath error:&error] ;

    if (!res)
    {
        NSLog(@"%@", [error localizedDescription]) ;
    }
    else
    {
       NSLog(@"File saved at : %@",localFilePath);
    }
}

}

// Anche quando è necessario verificare lo stesso video già presente nella directory del documento dell'app e non si desidera crearne più copie, sono state apportate alcune modifiche come di seguito

NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
NSURL *videoAsset = [info objectForKey:UIImagePickerControllerReferenceURL];

__weak typeof(self) weakSelf = self;

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library assetForURL:videoAsset resultBlock:^(ALAsset *asset)
{
    weakSelf.selectedFileName = [[asset defaultRepresentation] filename];
    NSLog(@"Video Filename %@",weakSelf.selectedFileName);

    // Save video to doc directory
    NSString *filePath = [url path];
    NSString *pathExtension = [filePath pathExtension] ;
    if ([pathExtension length] > 0)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ;
        NSString *documentsDirectory = [paths objectAtIndex:0];

        NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", weakSelf.selectedFileName]];

        //check if same video is having its copy in app directory.
        //so that multiple entries of same file should not happen.

        BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:localFilePath];

        if (!fileExists)
        {
            NSError *error = nil ;

            BOOL res = [[NSFileManager defaultManager] moveItemAtPath:filePath toPath:localFilePath error:&error] ;

            if (!res)
            {
                NSLog(@"%@", [error localizedDescription]) ;
            }
            else
            {
                NSLog(@"File saved at : %@",localFilePath);
                weakSelf.filePathURL = [NSURL URLWithString:localFilePath];
            }
        }
        else
        {
            NSLog(@"File exist at : %@",localFilePath);
            weakSelf.filePathURL = [NSURL URLWithString:localFilePath];
        }

    }
}

}

// Dove weakSelf.selectedFileName e weakSelf.filePathURL sono rispettivamente proprietà NSString e NSURL type della mia classe.


    videoURL = info[UIImagePickerControllerMediaURL]as? NSURL
    print(videoURL!)

    let urlData=NSData(contentsOf: videoURL as! URL)

    if((urlData) != nil)
    {
        let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let documentDirectory = path.first! as NSString
        let fileName = "Video.MOV"
        let PDFPathFileName = documentDirectory.appendingPathComponent(fileName as String)

        print(PDFPathFileName)

        DispatchQueue.main.async( execute: {
            urlData?.write(toFile: PDFPathFileName, atomically: true)
        })

        do {
            let asset = AVURLAsset(url: videoURL as! URL , options: nil)
            let imgGenerator = AVAssetImageGenerator(asset: asset)
            imgGenerator.appliesPreferredTrackTransform = true
            let cgImage = try imgGenerator.copyCGImage(at: CMTimeMake(0, 1), actualTime: nil)
            let thumbnail = UIImage(cgImage: cgImage)
            imgView.image = thumbnail
            // thumbnail here

        } catch let error {
            print("*** Error generating thumbnail: \(error.localizedDescription)")
        }

    }
    self.dismiss(animated: true, completion: nil)

 videoUrl = [info objectForKey:UIImagePickerControllerMediaURL];
urlString=[urlvideo path];
NSLog(@"path url %@",videoUrl);
NSData *videoData = [NSData dataWithContentsOfURL:videoUrl];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *sourcePath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.mp4"];

[videoData writeToFile:sourcePath atomically:YES];
//Below code will save video to iOS Device
 ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:videoUrl
                            completionBlock:^(NSURL *assetURL, NSError *error){/*notify of completion*/}];

[picker dismissViewControllerAnimated:YES completion:nil];

Spero che questo aiuto





video