iOS 录像功能的简单实现

本文通过DEMO展示了如何在iOS中实现录像功能,特别提醒在iOS10及以上版本需要在Info.plist中添加特定权限设置,否则应用可能会崩溃。使用了SVProgressHUD库来辅助展示进度。
摘要由CSDN通过智能技术生成

话不多说,上 DEMO 这里用的是 SVProressHUD, 由于 iOS10 的权限缘故,需要在 plist 里添加字段,否则会崩溃,具体请看上一篇

//
//  ViewController.m
//  录制视频
//
//  Created by Amydom on 16/8/25.
//  Copyright © 2016年 Amydom. All rights reserved.
//

#import "ViewController.h"
#import <AVFoundation/AVFoundation.h>
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>

#import <AVFoundation/AVAsset.h>
#import <AVFoundation/AVAssetImageGenerator.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <CoreMedia/CoreMedia.h>

#import "SVProgressHUD.h"

static NSString *const AssetCollectionName = @"录制视频";
@interface ViewController ()<UIImagePickerControllerDelegate , UINavigationControllerDelegate>
@property (weak, nonatomic) UIImageView *centerFrameImageView;
@property (weak, nonatomic)  UILabel *videoDurationLabel;
@property (nonatomic, assign) BOOL shouldAsync;


@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self createBtn];
#pragma mark - 视频相关
    /*
     一.保存图片到【Camera Roll】(相机胶卷)
     1.使用函数UIImageWriteToSavedPhotosAlbum
     2.使用AssetsLibrary.framework(iOS9开始, 已经过期)
     3.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
     
     二.创建新的【自定义Album】(相簿\相册)
     1.使用AssetsLibrary.framework(iOS9开始, 已经过期)
     2.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
     
     三.将【Camera Roll】(相机胶卷)的图片 添加到 【自定义Album】(相簿\相册)中
     1.使用AssetsLibrary.framework(iOS9开始, 已经过期)
     2.使用Photos.framework(iOS8开始可以使用, 从iOS9开始完全取代AssetsLibrary.framework)
     
     四.Photos.framework须知
     1.PHAsset : 一个PHAsset对象就代表一张图片或者一段视频
     2.PHAssetCollection : 一个PHAssetCollection对象就代表一本相册
     
     五.PHAssetChangeRequest的基本认识
     1.可以对相册图片进行【增\删\改】的操作
     
     六.PHPhotoLibrary的基本认识
     1.对相册的任何修改都必须放在以下其中一个方法的block中
     [[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:error:];
     [[PHPhotoLibrary sharedPhotoLibrary] performChanges:completionHandler:];
     */

    
}

- (void)createBtn{
    
    // 录制视频
    UIButton *RecordVideo = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    [RecordVideo setTitle:@"开始录制" forState:UIControlStateNormal];
    RecordVideo.backgroundColor = [UIColor lightGrayColor];
    [RecordVideo addTarget:self action:@selector(videoFromcamera) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:RecordVideo];
    
    // 从选择视频
    UIButton *SelectLocalVideo = [[UIButton alloc]initWithFrame:CGRectMake(100, 250, 100, 100)];
    [SelectLocalVideo setTitle:@"选择视频" forState:UIControlStateNormal];
    SelectLocalVideo.backgroundColor = [UIColor lightGrayColor];
    [SelectLocalVideo addTarget:self action:@selector(videoFromPhotos) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:SelectLocalVideo];
}

// 录制视频
- (void)videoFromcamera{
        [self getVideoWithsourceType:UIImagePickerControllerSourceTypeCamera shouldAsync:YES];
    
}

// 从相册中选择视频"
- (void)videoFromPhotos{
    //UIImagePickerControllerSourceTypeSavedPhotosAlbum - 这个是自定义库,是由用户截图或保存到里面的
        [self getVideoWithsourceType:UIImagePickerControllerSourceTypeSavedPhotosAlbum shouldAsync:NO];
}
//调用摄像头
- (void)getVideoWithsourceType:(UIImagePickerControllerSourceType)type shouldAsync:(BOOL)shouldAsync{
    //取得授权状态
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    //判断当前状态
    if (authStatus == AVAuthorizationStatusRestricted
        || authStatus == AVAuthorizationStatusDenied) {
        //拒绝当前 app 访问[phtot]运行
        [SVProgressHUD showInfoWithStatus:@"提醒用户打开访问开关 [设置] - [隐私] - [视频] - [App]"];
        return;
    }
    
    if ([UIImagePickerController isSourceTypeAvailable:type]) {
        UIImagePickerController *picker = [[UIImagePickerController alloc]init];
        picker.delegate = self;
        //可以编辑
        picker.allowsEditing = YES;
        //设置资源获取类型
        picker.sourceType = type;
        picker.mediaTypes 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值