1、添加录音和拍摄权限
NSMicrophoneUsageDescription
Privacy - Camera Usage Description
2、代码
objectivec
#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <MobileCoreServices/MobileCoreServices.h>
// 接下来是你的 ViewController 的实现代码,不需要修改。
@interface ViewController () <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
@property (nonatomic, strong) UIImageView *imageView;
@property (nonatomic, strong) NSURL *videoURL;
@property (nonatomic, strong) AVPlayer *player;
@property (nonatomic, strong) AVPlayerLayer *playerLayer;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建显示视频的视图
self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
[self.view addSubview:self.imageView];
// 创建拍摄视频按钮
UIButton *recordVideoButton = [UIButton buttonWithType:UIButtonTypeSystem];
[recordVideoButton setTitle:@"拍摄视频" forState:UIControlStateNormal];
recordVideoButton.frame = CGRectMake(50, 350, 100, 50);
[recordVideoButton addTarget:self action:@selector(recordVideo) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:recordVideoButton];
}
- (void)recordVideo {
// 检查相机是否可用
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error" message:@"相机不可用" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
[self presentViewController:alert animated:YES completion:nil];
return;
}
// 创建 UIImagePickerController
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePicker.mediaTypes = @[(NSString *)kUTTypeMovie];
imagePicker.delegate = self;
[self presentViewController:imagePicker animated:YES completion:nil];
}
// 拍摄视频完成后调用的代理方法
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<UIImagePickerControllerInfoKey, id> *)info {
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {
self.videoURL = info[UIImagePickerControllerMediaURL];
[self displayVideo];
}
[picker dismissViewControllerAnimated:YES completion:nil];
}
// 用户取消拍摄视频时调用的代理方法
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
}
// 显示拍摄的视频
- (void)displayVideo {
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:self.videoURL];
self.player = [AVPlayer playerWithPlayerItem:playerItem];
self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.frame = CGRectMake(50, 100, 200, 200);
[self.view.layer addSublayer:self.playerLayer];
[self.player play];
}
@end