2013-09-29 19 views
0

在我的应用程序中,我允许用户录制视频并将视频保存到默认的照片应用程序。我将视频的网址保存到核心数据中,并想知道是否有任何方法可以将保存的网址中的视频与AVPlayer拉起来,而无需拉起UIImagePicker。下面是我使用的录制和播放视频的内容:从iOS 7中的照片应用播放视频

record.m

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; 
    [self dismissModalViewControllerAnimated:NO]; 
    // Handle a movie capture 
    if (CFStringCompare ((__bridge_retained CFStringRef) mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { 
     NSString *moviePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; 

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

     NSLog(@"%hhd",success); 

     if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePath)) { 
      UISaveVideoAtPathToSavedPhotosAlbum(moviePath, self, 
               @selector(video:didFinishSavingWithError:contextInfo:), nil); 

     } 
    } 
} 

play.m

-(BOOL)startMediaBrowserFromViewController:(UIViewController*)controller usingDelegate:(id)delegate { 
    // 1 - Validations 
    if (([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum] == NO) 
     || (delegate == nil) 
     || (controller == nil)) { 
     return NO; 
    } 
    // 2 - Get image picker 
    UIImagePickerController *mediaUI = [[UIImagePickerController alloc] init]; 
    mediaUI.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
    mediaUI.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil]; 
    // Hides the controls for moving & scaling pictures, or for 
    // trimming movies. To instead show the controls, use YES. 
    mediaUI.allowsEditing = YES; 
    mediaUI.delegate = delegate; 
    // 3 - Display image picker 
    [controller presentModalViewController:mediaUI animated:YES]; 
    return YES; 
} 
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    // 1 - Get media type 
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; 
    // 2 - Dismiss image picker 
    [self dismissModalViewControllerAnimated:NO]; 
    // Handle a movie capture 
    NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL]; 

    if (CFStringCompare ((__bridge_retained CFStringRef)mediaType, kUTTypeMovie, 0) == kCFCompareEqualTo) { 
     // 3 - Play the video 
     MPMoviePlayerViewController *theMovie = [[MPMoviePlayerViewController alloc] 
               initWithContentURL:[info objectForKey:UIImagePickerControllerMediaURL]]; 
     MPMoviePlayerViewController *movie = [[MPMoviePlayerViewController alloc] initWithContentURL:assetURL]; 

     [self presentMoviePlayerViewControllerAnimated:movie]; 
     // 4 - Register for the playback finished notification 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) 
                name:MPMoviePlayerPlaybackDidFinishNotification object:theMovie]; 
    } 
} 

回答

0

真正简单其实,刚刚得到的URL,并设置了一个MPMoviePlayer它。

NSURL *assetURL = [NSURL URLWithString:videoSelected.videoURL]; 
MPMoviePlayerViewController *movie = [[MPMoviePlayerViewController alloc] initWithContentURL:assetURL]; 
[self presentMoviePlayerViewControllerAnimated:movie]; 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMovieFinishedCallback:) 
              name:MPMoviePlayerPlaybackDidFinishNotification object:movie];