ios实现拍摄视频与显示在界面上

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
相关推荐
ssshooter38 分钟前
Tauri 2 iOS 开发避坑指南:文件保存、Dialog 和 Documents 目录的那些坑
前端·后端·ios
AF_INET63 小时前
RV1126B开发板学习篇(二)v4l2+mpp编码
c语言·经验分享·音视频·视频编解码·嵌入式软件·rv1126b
reembarkation5 小时前
vue3中使用howler播放音频列表
前端·vue.js·音视频
BryanGG9 小时前
【说明书】索尼A7C视频拍摄PP值配置
音视频·规格说明书
带娃的IT创业者10 小时前
音乐播放器开发:QtMultimedia 音频引擎与播放列表管理
音视频·pyside6·qtmultimedia·音乐播放·qmediaplayer·播放列表·audio ducking
优选资源分享13 小时前
小白转文字 v1.2.8.0 | 安卓离线免费音视频转写工具
android·音视频
不才小强14 小时前
Qt开发实战:屏幕录制项目中学习到的知识与遇到的难题
qt·音视频
要开心吖ZSH14 小时前
MP4 转 WAV 音频转码方案详解(ProcessBuilder + FFmpeg)
java·ffmpeg·音视频
deepdata_cn15 小时前
移动端高并发视频合成
音视频·视频合成