Saturday, 28 September 2013

iOS 7 - Play video from photos app

iOS 7 - Play video from photos app

In my application I allow the user to record videos and it saves the
videos to the default photos app. I save the video's URL into core data
and was wondering if there was any way to pull up AVPlayer with the video
from the URL saved without pulling up the UIImagePicker. Here is what I am
using to record and play videos:
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];
}
}

No comments:

Post a Comment