12/08/2018, 11:46

Video recorder in ios

Ở bài này sẽ hướng dẫn tạo một ứng dụng sử dụng camera để ghi hình và xem lại cơ bản sử dụng MediaPlayer framework. Tạo project Mở XCode và tạo mới một project như trong hình dưới đây Thiết kế UI Đầu tiên để UI để có thể quan sát và dễ nhìn chúng ta Disable Size Classes như hình dưới ...

Ở bài này sẽ hướng dẫn tạo một ứng dụng sử dụng camera để ghi hình và xem lại cơ bản sử dụng MediaPlayer framework.

Tạo project

Mở XCode và tạo mới một project như trong hình dưới đây 1.png

Thiết kế UI

Đầu tiên để UI để có thể quan sát và dễ nhìn chúng ta Disable Size Classes như hình dưới đây 2.png

Tiếp kéo thả 1 UIButton vào trong view như trong hình 3.png

Tiếp tục chúng ta connect Button và View, trên View Editor chọn Assitant Editor rồi giữ chuột phải chỉ từ button kéo vào trong ViewController.h và thiết lập thông số như hình rồi bấm Connect 4.png

Nhúng VideoViewController

Mở file ViewController.h lên và import các file header cần thiết sau:

Tiếp theo khai báo 2 thuộc tính vURL và vController trong “ViewController.h”. vURL để chứa giá trị url của video hiện tại, còn vController dùng để hiện video. Hoàn thành các bước trên sẽ có file ViewController.h như sau

@interface ViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>

@property (strong, nonatomic) NSURL *vURL;
@property (strong, nonatomic) MPMoviePlayerController *vController;
- (IBAction)recordVideoTap:(id)sender;
@end

Xử lí sự kiện khi nhấn vào button “record”

Khi người dùng tap vào button “record” sẽ gọi đến hàm “recordVideoTap:” đã connect ở trên bên ViewController.m,viết xử l ý hàm đó như sau

- (IBAction)recordVideoTap:(id)sender {
if ([UIImagePickerController 	isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie, nil];

    [self presentViewController:picker animated:YES completion:NULL];
}
}

Ở đây chú ý mediaTypes là kUTTypeMovie để định nghĩa việc cần camera để ghi hình.

Nhúng video playback vào View Sau khi video được ghi xong, sẽ thực hiện các việc sau:

– Lấy URL của video vừa ghi

– Ẩn UImagePickerController đi

– Chạy video vừa ghi xong sử dụng class MPMoviePlayerController (class này dùng để chạy video từ file, hoặc qua network stream)

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

self.vURL = info[UIImagePickerControllerMediaURL];
[picker dismissViewControllerAnimated:YES completion:NULL];

self.vController = [[MPMoviePlayerController alloc] init];

[self.vController setContentURL:self.vURL];
[self.vController.view setFrame:CGRectMake (0, 0, 320, 460)];
[self.view addSubview:self.vController.view];

[self.vController play];

}

Build và chạy thử ứng dụng

Chú ý: Simulator đến hiện tại Apple vẫn không hỗ trợ Camera giả lập, bởi vậy hãy test ứng dụng trên thiết bị thật. Lần đầu chạy nó sẽ hỏi quyền truy cập camera và Voice ( quay video và có âm thanh và cần đồng ý quyền truy cập)

5.png

Xử lí sự kiện khi video play xong

Một trong những đặc tính của MPMoviePlayerController là nó có một tập hợp các notifications để quản lí việc playback video. Chẳng hạn như khi video được play xong thì nó sẽ gửi đi MPMoviePlayerPlaybackDidFinishNotification. sẽ thêm dòng sau vào hàm “didFinishPickingMediaWithInfo:”, và thêm vào trước [self.vController play].

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(videoPlayBackFinished:)
                                             name:MPMoviePlayerPlaybackDidFinishNotification
                                           object:self.vController];

NSNotificationCenter thì nó như là một trung tâm của các thông báo (notifications) bên trong mỗi ứng dụng. Dựa vào nó, bất cứ phần nào của app đều có thể gửi thông báo hoặc nhận thông báo từ các phần khác của app. Ở ví dụ này, dòng code trên cho phép NSNotificationCenter lắng nghe thông báo MPMoviePlayerPlaybackDidFinishNotification và gọi hàm “videoPlayBackFinished:” Hàm “videoPlayBackFinished:” sẽ xóa thông báo khi đã nhận được, dừng video player và xóa nó khỏi view, đồng thời hiện tin nhắn báo cho người dùng. thêm hàm “videoPlayBackFinished:” vào ViewController.m

- (void)videoPlayBackFinished:(NSNotification *)notification {

[[NSNotificationCenter defaultCenter]removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

// Dừng phát video và xóa nó khỏi view
[self.vController stop];
[self.vController.view removeFromSuperview];
self.vController = nil;

// Hiện thông báo
UIAlertView *alert = [[UIAlertView alloc]
                      initWithTitle:@"Done" message:@"Video đã phát xong và được XOÁ." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];

}

build và chạy lại ứng dụng, bấm ghi hình và sau khi ghi xong nó sẽ play lại, sau khi play nó sẽ hiện thông báo và xóa video player khỏi view. chú ý: chỉ hoạt động trên các thiết bị ios thật

Download source code:

0