Video recorder in ios
Bài đăng này đã không được cập nhật trong 3 năm
Ở 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 đây
Tiếp kéo thả 1 UIButton vào trong view như trong hình
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
Nhúng VideoViewController
Mở file ViewController.h lên và import các file header cần thiết sau:
import <MediaPlayer/MediaPlayer.h>
import <MobileCoreServices/MobileCoreServices.h>
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
import <UIKit/UIKit.h>
import <MediaPlayer/MediaPlayer.h>
import <MobileCoreServices/MobileCoreServices.h>
@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)
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:
All rights reserved