1

我有培训应用程序,我希望当用户单击 recordVideo 按钮相机应该启动以录制视频时,有没有办法在 ipad 应用程序中执行此操作。我已经完成了音频录制,我需要进行视频录制。

4

3 回答 3

1

试试这个 ::

-(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);
    }
}

希望,它会帮助你。

谢谢。

于 2013-03-18T11:09:17.713 回答
1
//for video..
#import <MobileCoreServices/MobileCoreServices.h>
#import <AVFoundation/AVFoundation.h>
#import <MediaPlayer/Mediaplayer.h>

#import <CoreMedia/CoreMedia.h>



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

用于保存到 Document 文件夹并保存在照片库中

NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* documentsDirectory = [paths objectAtIndex:0];


        //for video
        NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
        NSLog(@"video url-%@",videoURL);

        NSData *videoData = [NSData dataWithContentsOfURL:videoURL];

        NSString * videoName = [NSString stringWithFormat:@"student_%d_%d.mp4",stud_id,imgVidID];

        videoPath = [documentsDirectory stringByAppendingPathComponent:videoName];

        NSLog(@"video path-%@",videoPath);

        [videoData writeToFile:videoPath atomically:YES];

        NSString *sourcePath = [[info objectForKey:@"UIImagePickerControllerMediaURL"]relativePath];

        UISaveVideoAtPathToSavedPhotosAlbum(sourcePath,nil,nil,nil);

}
于 2013-03-18T11:30:52.283 回答
0

就试一试吧 :

-(void) imagePickerController: (UIImagePickerController *) picker didFinishPickingMediaWithInfo: (NSDictionary *) info 
{
    NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType];
    [self dismissModalViewControllerAnimated:NO];
    NSString *moviePath = [[info objectForKey: UIImagePickerControllerMediaURL] path];
    if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (moviePath)){
        UISaveVideoAtPathToSavedPhotosAlbum (moviePath,self, @selector(video:didFinishSavingWithError:contextInfo:), nil);
                }
} 

-(void)video:(NSString*)videoPath didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo {
 if (error) {
        [AJNotificationView showNoticeInView:self.view type:AJNotificationTypeRed title:@"Video Saving Failed" linedBackground:AJLinedBackgroundTypeAnimated hideAfter:1.0];
    }
    else{        
        NSURL *videoURl = [NSURL fileURLWithPath:videoPath];
        AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURl options:nil];
        AVAssetImageGenerator *generate = [[AVAssetImageGenerator alloc]  initWithAsset:asset];
        generate.appliesPreferredTrackTransform = YES;
        NSError *err = NULL;
        CMTime time = CMTimeMake(1, 60);
        CGImageRef imgRef = [generate copyCGImageAtTime:time actualTime:NULL error:&err];





  self.strUploadVideoURL = videoPath;
        [imgPhoto setImage:[[[UIImage alloc] initWithCGImage:imgRef] autorelease]];
        intWhenPushView = 2;
        btnShare.enabled = YES;
        btnFacebookShare.enabled = YES;



CGImageRelease(imgRef);
    [generate release];
    [asset release];
    }
}
于 2013-03-18T11:12:57.443 回答