(Graphic Images, animations, multimedia) Reading Notes-recording and editing videos
Use UIImagePickerController for recording
# Import ViewController. h # import
# Import
@ Interface ViewController ()
-(IBAction) videoRecod :( id) sender; @ end @ implementation ViewController-(void) viewDidLoad {[super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib .} -(void) didReceiveMemoryWarning {[super didreceivemorywarning]; // Dispose of any resources that can be recreated .} -(IBAction) videoRecod :( id) sender {if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerCo NtrollerSourceTypeCamera]) {UIImagePickerController * imagePickerController = [[UIImagePickerController alloc] init]; imagePickerController. delegate = self; imagePickerController. sourceType = UIImagePickerControllerSourceTypeCamera; imagePickerController. mediaTypes = [[NSArray alloc] initWithObjects :( NSString *) kUTTypeMovie, nil]; // sets the recording quality to imagePickerController. videoQuality = UIImagePickerControll ErQualityTypeHigh; // only 30 seconds at most can be recorded. imagePickerController. videoMaximumDuration = 30366f; [self presentViewController: imagePickerController animated: YES completion: nil];} else {NSLog (@ camera unavailable .); }-(Void) handle: (UIImagePickerController *) picker {[self dismissViewControllerAnimated: YES completion: nil];}-(void) imagePickerController: (UIImagePickerController *) picker handle: (NSDictionary *) info {NSURL * url = [info objectForKey: UIImagePickerControllerMediaURL]; NSString * tempFilePath = [url path]; if (UIVideoAtPathIsCompatibleWithSave DPhotosAlbum (tempFilePath) {// video: didFinishSavingWithError: contextInfo: Must be saved as the callback class (tempFilePath, self, @ selector (video: didFinishSavingWithError: contextInfo :), (_ bridge void *) (tempFilePath);} [self dismissViewControllerAnimated: YES completion: nil];}-(void) video :( NSString *) videoPath didFinishSavingWithError :( NSError *) error contextInfo :( NSString *) cont ExtInfo {NSString * title; NSString * message; if (! Error) {title = @ save video; message = @ the video has been saved to the camera film of the device;} else {title = @ video failed; message = [error description];} UIAlertView * alert = [[UIAlertView alloc] initWithTitle: title message: message delegate: nil cancelButtonTitle: @ OK otherButtonTitles: nil]; [alert show];}-(void) navigationController :( UINavigationController *) navigationController willShowViewController :( UIViewController *) viewController animate D :( BOOL) animated {NSLog (@ selector will be displayed .);} -(Void) navigationController :( UINavigationController *) navigationController didShowViewController :( UIViewController *) viewController animated :( BOOL) animated {NSLog (@ selector display ends .);}
Use AVFoundation
AVCaptureSession: capture sessions to capture data from the camera and microphone. The AVCaptureSession object must be used to coordinate input and output data.
AVCaptureDevice: capture device, which indicates entering a device, such as a camera and a microphone.
AVCaptureDeviceInput: capture an input data source of a session
AVCaptureOutput captures an output target of a session, such as the output video file and static image.
AVCaptureMovieFileOutput is a subclass of AVCaptureOutput. It can be used to output captured data to a QuickTime video file (MOV)
AVCaptureVideoPreviewLayer is a subclass of CALayer that can be used to display recorded videos.
AVCaptureConnection: capture a connection. It is a connection between input and output in a capture session.
# Import ViewController. h # import @ interface ViewController () vcapturefileoutputrecordingdelegate> {BOOL isRecording;} @ property (weak, nonatomic) IBOutlet UILabel * label; @ property (weak, nonatomic) IBOutlet UIButton * button; @ property (strong, nonatomic) AVCaptureSession * session; @ property (strong, nonatomic) AVCaptureMovieFileOutput * output;-(IBAction) recordPressed :( id) sender; @ end @ implement Ation ViewController-(void) viewDidLoad {[super viewDidLoad]; self. session = [[AVCaptureSession alloc] init]; self. session. sessionPreset = camera; AVCaptureDevice * cameraDevice = [AVCaptureDevice failed: camera]; NSError * error = nil; camera * camera = [deviceInputWithDevice: cameraDevice error: & error]; AVCaptureDe Vice * micDevice = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeAudio]; AVCaptureDeviceInput * mic = [AVCaptureDeviceInput deviceInputWithDevice: micDevice error: & error]; if (error |! Camera |! Mic) {NSLog (@ Input Error);} else {// Add the captured audio and video [self. session addInput: camera]; [self. session addInput: mic];} self. output = [[AVCaptureMovieFileOutput alloc] init]; if ([self. session canAddOutput: self. output]) {[self. session addOutput: self. output]; // output} AVCaptureVideoPreviewLayer * previewLayer = [AVCaptureVideoPreviewLayer layerWithSession: self. session]; previewLayer. frame = CGRectMake (0, 0, self. View. frame. size. width, self. view. frame. size. height); [self. view. layer insertSublayer: previewLayer atIndex: 0]; [self. session startRunning]; isRecording = NO; self. label. text = @;}-(void) didreceivemorywarning {[super didreceivemorywarning];}-(void) viewWillAppear :( BOOL) animated {[super viewWillAppear: animated]; if (! [Self. session isRunning]) {[self. session startRunning] ;}}- (void) viewWillDisappear :( BOOL) animated {[super viewWillDisappear: animated]; if ([self. session isRunning]) {[self. session stopRunning] ;}}- (IBAction) recordPressed :( id) sender {if (! IsRecording) {[self. button setTitle: @ stop forState: UIControlStateNormal]; self. label. text = @ recording ...; isRecording = YES; NSURL * fileURL = [self fileURL]; [self. output startRecordingToOutputFileURL: fileURL recordingDelegate: self];} else {[self. button setTitle: @ recording forState: UIControlStateNormal]; self. label. text = @ stop; [self. output stopRecording]; isRecording = NO;}-(NSURL *) fileURL {NSString * out PutPath = [[NSString alloc] initWithFormat: %%@, NSTemporaryDirectory (), @ movie. mov]; NSURL * outputURL = [[NSURL alloc] initFileURLWithPath: outputPath]; NSFileManager * manager = [[NSFileManager alloc] init]; if ([manager fileExistsAtPath: outputPath]) {[manager removeItemAtPath: outputPath error: nil];} return outputURL;} # pragma mark -- AVCaptureFileOutputRecordingDelegate delegate protocol implementation method-(void) captureOut Put :( AVCaptureFileOutput *) captureOutput didFinishRecordingToOutputFileAtURL :( NSURL *) outputFileURL fromConnections :( NSArray *) connections error :( NSError *) error {if (error = nil) {ALAssetsLibrary * library = [[ALAssetsLibrary alloc] init]; [library writeVideoAtPathToSavedPhotosAlbum: outputFileURL completionBlock: ^ (NSURL * assetURL, NSError * error) {if (error) {NSLog (@ write error .) ;}}] ;}}
Use UIVideoEditorController
# Import ViewController. h @ interface ViewController ()
-(IBAction) editButtonPress :( id) sender; @ end @ implementation ViewController-(void) viewDidLoad {[super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib .} -(void) didReceiveMemoryWarning {[super didreceivemorywarning]; // Dispose of any resources that can be recreated .} -(IBAction) editButtonPress :( id) sender {NSBundle * bundle = [NSBundle mainBundle]; NSString * movie Path = [bundle pathForResource: @ YY ofType: @ mp4]; // determines whether the device supports video editing if ([UIVideoEditorController canEditVideoAtPath: moviePath]) {UIVideoEditorController * videoEditor = [[UIVideoEditorController alloc] init]; videoEditor. delegate = self; videoEditor. videoPath = moviePath; [self presentViewController: videoEditor animated: YES completion: NULL];} else {NSLog (@ cannot edit this video);}-(void) videoEditorController :( UIVideoEditorController *) editor identifier :( NSString *) editedVideoPath {[editor dismissViewControllerAnimated: YES completion: NULL]; if (Response (editedVideoPath) {response (editedVideoPath, self, @ selector (video: didFinishSavingWithError: contextInfo :), (_ bridge void *) (editedVideoPath) ;}}-(void) videoEditorControll Er :( UIVideoEditorController *) editor didFailWithError :( NSError *) error {NSLog (@ error in Video editing); NSLog (@ Video editor error occurred =%@, error); [editor dismissViewControllerAnimated: YES completion: NULL];}-(void) videoEditorControllerDidCancel :( UIVideoEditorController *) editor {NSLog (@ video edit canceled); [editor dismissViewControllerAnimated: YES completion: NULL];} -(void) video :( NSString *) videoPathdidFinishSavingWit HError :( NSError *) error contextInfo :( NSString *) contextInfo {NSString * title; NSString * message; if (! Error) {title = @ save video; message = @ the video has been saved to the camera film of the device;} else {title = @ video failed; message = [error description];} UIAlertView * alert = [[UIAlertView alloc] initWithTitle: title message: message delegate: nil cancelButtonTitle: @ OK otherButtonTitles: nil]; [alert show];}
My personal comments: in fact, I have done video before, and there are similar articles. I can find better and more technical Code and articles on some foreign websites, but in short, it's a learning record ~