Search code examples
iphoneuiimagepickercontrollermpmovieplayercontroller

Play recorded video using UIImagePickerController


I am creating an app which will record a video using UIImagePickerController and I am saving the recorded video in documents directory and trying to play back the video on click of USE (want to show the full first frame of recorded video along with play button in the middle like the native application of iPhone).

I am able to record the video and save it into document directory but unable to create the frame and playback.

I tried to move on new class where I can play the recorded video but gets crashed on click of USE button.

Here is my code

-(void)btnRecord_Press
{
    BOOL canRecordVideo;

    canRecordVideo = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

    if (canRecordVideo)
    {
        UIImagePickerController *videoRecorder = [[UIImagePickerController alloc]init];
        videoRecorder.sourceType = UIImagePickerControllerSourceTypeCamera;
        videoRecorder.delegate=self;

        videoRecorder.showsCameraControls = TRUE;

        NSArray *mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];

        NSArray *videoMediaTypesOnly = [mediaTypes filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF CONTAINS %@)",@"movie"]];

        BOOL movieOuputPossible  = (videoMediaTypesOnly!=nil);

        if (movieOuputPossible)
        {
            videoRecorder.mediaTypes = videoMediaTypesOnly;

            [self presentViewController:videoRecorder animated:YES completion:nil];
        }

    }
}

-(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];


    [self dismissViewControllerAnimated:NO completion:nil];

    PlayMovie *play = [[PlayMovie alloc]initWithNibName:@"PlayMovie" bundle:Nil];

    [self.navigationController pushViewController:play animated:YES];

}

Any help would be appreciable.

Thanks


Solution

  • I did this using this code.

    -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
    
        [self dismissViewControllerAnimated:NO completion:nil];
    
        [self Play];
    
    }
    
    -(void)Play
    {
    
        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];
    
        player = [[MPMoviePlayerController alloc]initWithContentURL:videoURL];
    
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(btnDone_Press) name:MPMoviePlayerWillExitFullscreenNotification object:nil];
    
        self._player.shouldAutoplay = NO;
    
        UIImage *thumbnail = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame];
    
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
        {        
            screenSize = [[UIScreen mainScreen]bounds].size;
    
    
            if (screenSize.height >480.0f)
            {
                player.view.frame = CGRectMake(0, 0, 320, 548);
    
            }
            else
            {
                player.view.frame = CGRectMake(0, 0, 320, 460);
    
            }
    
        }
    
        [self.view addSubview:player.view];
    
        self._player.scalingMode = MPMovieScalingModeAspectFit;
    
        self._player.fullscreen = YES;
    
        [self._player play];
    }