Search code examples
iphoneipadvideo-capture

How to save video in documents folder then upload to server


I am recording video from the iPad app and I want that video may be saved in documents folder or directly we may upload that to server. I have store audio file in documents but how to save a video file. I am using following code for recording video.

  UIImagePickerController *picker = [[UIImagePickerController alloc] init];
  picker.delegate = self;

  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
  {
    NSArray *mediaTypes = [NSArray arrayWithObject:(NSString*)kUTTypeMovie];
    picker.mediaTypes = mediaTypes ;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo ;

    [self presentModalViewController:picker animated:NO];

    [picker release];
}
  else
    {

UIAlertView *alt=[[UIAlertView alloc]initWithTitle:@"Error" message:@" Camera Facility is not available with this Device" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [alt show];
    [alt release];
    }

Solution

  • Try this, I've stored it with current Date-Time ::

    -(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary*)info
    {
        [self dismissViewControllerAnimated:NO completion:nil];
        NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
    
        if ([type isEqualToString:(NSString *)kUTTypeVideo] || [type isEqualToString:(NSString *)kUTTypeMovie])
        {
            videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    
            NSLog(@"found a video");
    
            // Code To give Name to video and store to DocumentDirectory //
    
            videoData = [[NSData dataWithContentsOfURL:videoURL] retain];
            NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
            NSString *documentsDirectory = [paths objectAtIndex:0];
    
            NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
            [dateFormat setDateFormat:@"dd-MM-yyyy||HH:mm:SS"];
            NSDate *now = [[[NSDate alloc] init] autorelease];
            theDate = [dateFormat stringFromDate:now];
    
            NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"Default Album"];
    
            if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
               [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil];
    
            NSString *videopath= [[[NSString alloc] initWithString:[NSString stringWithFormat:@"%@/%@.mov",documentsDirectory,theDate]] autorelease];
    
            BOOL success = [videoData writeToFile:videopath atomically:NO];
    
            NSLog(@"Successs:::: %@", success ? @"YES" : @"NO");
            NSLog(@"video path --> %@",videopath);
        }
    }
    

    Video Uploading ::

    videoData is getting from videoData = [[NSData dataWithContentsOfURL:videoURL] retain];

    - (void)uploadVideo
    {
        NSData *imageData = videoData;
    
        NSString *urlString=[NSString stringWithFormat:@"%s", UploadVideoService];
        NSLog(@"url=== %@", urlString);
    
        request = [[[NSMutableURLRequest alloc] init] autorelease];
        [request setURL:[NSURL URLWithString:urlString]];
        [request setHTTPMethod:@"POST"];
    
        NSString *boundary = @"---------------------------14737809831466499882746641449";
        NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
        [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    
        /*  body of the post */
    
        NSMutableData *body = [NSMutableData data];
        [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
        //Video Name with Date-Time
        NSDateFormatter *dateFormat=[[NSDateFormatter alloc]init];
        [dateFormat setDateFormat:@"yyyy-MM-dd-hh:mm:ssa"];
        NSString *currDate = [dateFormat stringFromDate:[NSDate date]];
    
        NSString *str = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"video-%@.mov\"\r\n", currDate];
        NSLog(@"String name::  %@",str);
    
        [dateFormat release];
    
        [body appendData:[[NSString stringWithString:str] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[NSData dataWithData:imageData]];
        [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    
        [request setHTTPBody:body];
    
        NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
        NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    
        NSLog(@"result from webservice:::--> %@", returnString);
    
        [returnString release];
    }
    

    Hope, it'll help you.

    Thanks.