使用AVFoundation 自定义相机和录制视频

先来了解几个重要的类

1、AVCaptureDevice:输入设备,包括摄像头和麦克风

2、AVCaptureSession:负责把AVCaptureDevice捕捉得到的视频或声音数据输出到输出设备中,需要为该对象添加输入设备和输出设备

3、AVCaptureDeviceInput:是AVCaptureInput的子类,使用该对象从AVCaptureDevice设备获取数据,该对象将会被添加给AVCaptureSession管理.

4、AVCaptureScreenInput:它是AVCaptureInput的子类,使用该对象从屏幕获取数据(用于录制屏幕动作).该对象将会被添加给AVCaptureSeesion管理

5、AVCaptureAudioDataOutput、AVCaptureAudioPreviewOutput、AVCaptureFileOutput[BL4] 、AVCaptureStillImageOutput、AVCaptureVideoDataOutput:它们都是AVCaptureOutput的子类,用于接收各种数据.该对象也会被添加给AVCaptureSession管理.其中AVCaptureFileOutput依然代表输出到文件的输出端,

6、AVCaptureVideoPreviewLayer:是CALayer的子类,用于预览。开发者只要创建它的实例,并为它设置AVCaptureSession,就可以非常方便地用它来实现拍摄预览.

拍照和录制视频的步骤如下:

1、使用AVCaptureDevice的静态方法获取设备

2、利用AVCaptureDevice初始化AVCaptureDeviceInput对象

3、初始化输出端.如果只是拍照,则初始化AVCaptureStillImageOutput输出端即可;如果要捕捉视频,则初始化AVCaptureMovieFileOutput输出端.

4、创建AVCaptureSession对象,使用该对象来添加输入设备和输出端.调用AVCaptureSession的startRunning方法开始捕捉画面或声音数据.

5、将捕捉的数据(照片、视频数据)输出到指定文件。

使用AVFoundation生成视频缩略图

AVFoundation生成视频缩略图主要靠两个类.:

1、AVURLAsset:该类是AVAsset的子类,AVAsset类专门用于获取多媒体的相关信息,包括获取多媒体的画面、声音等信息。而AVURLAsset子类的作用则是根据NSURL来初始化AVAsset对象。

2、AVAssetImageGenerator:该类专门用于截取视频指定帧的画面。

步骤:1、根据视频的NSURL创建AVURLAsset对象

2、根据AVURLAsset对象创建AVAssetImageGenerator对象

3、调用AVAssetImageGenerator对象的copyCGImageAtTime:actualTime:error:方法来获取该视频指定时间点的视频截图.该方法的第一个CMTime参数用于指定获取哪个时间点的视频截图,第2个CMTime参数用于获取实际截图 位于哪个时间点.

其中CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime.

1、CMTimeMake(int64_t  value, int_32  timescale): 第1个参数代表获取第几帧的截图,第2个参数代表每秒的帧数.因此实际截取的时间点是value/timescale.

2、CMTimeMakeWithSeconds(Float64  seconds, int32_t  preferredTimeScale): 第1个参数代表获取第几秒的截图,第2个参数则代表每秒的帧数.

实例:

// 为增加UIImage增加一个类别,通过在该类别中为UIImage增加一个imageWithVideo:方法来获取视频的缩略图 

// UIImage + Video.m

@implementation UIImage (Video)

+ (UIImage *)imageWithVideo:(NSURL *)vidoURL

{

  // 根据视频的URL创建AVURLAsset

AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];

// 根据AVURLAsset创建AVAssetImageGenerator对象

 AVAssetImageGenerator* gen = [[AVAssetImageGenerator alloc] initWithAsset: asset];

 gen.appliesPreferredTrackTransform = YES;

 // 定义获取0帧处的视频截图

CMTime time = CMTimeMake(0, 10);

 NSError *error = nil;

CMTime actualTime;

// 获取time处的视频截图

CGImageRef  image = [gen  copyCGImageAtTime: time actualTime: &actualTime error:&error];

// 将CGImageRef转换为UIImage

UIImage *thumb = [[UIImage alloc] initWithCGImage: image];

CGImageRelease(image);

return  thumb;

}

@end

原文地址:https://www.cnblogs.com/xiaonizicome/p/11022578.html

时间: 2024-10-03 08:20:17

使用AVFoundation 自定义相机和录制视频的相关文章

用AVFoundation自定义相机拍照

自定义拍照或者录视频的功能,就需要用到AVFoundation框架,目前我只用到了拍照,所以记录下自定义拍照用法,视频用法等用上了再补充,应该是大同小异 demo在这里:https://github.com/Phelthas/TEST_XMLCommon 以拍照过程为例,实现主要包括以下几个部分: 1,首先要判断用户授权: let authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVi

iOS开发笔记17:自定义相机拍照

之前用AVFoundation自定义相机做了拍照与视频相关的东西,为什么要自定义呢?主要是提供更个性化的交互设计,符合app主题,对于视频来说,也便于提供更多丰富有趣的功能.前段时间整理了下拍照部分的功能,主要分为以下五个部分 1.初始化,建立会话,获取摄像头 使用AVCaptureSessionPresetPhoto模式,输出的图片分辨率与系统相机输出的分辨率保持一致 添加后置摄像头与图片输出(默认采用后置摄像头拍摄) 2.嵌入实时预览层 获取实时预览画面,添加手势,初始化时默认在画面中心点对

iOS开发进阶 - 用AVFoundation自定义视频录制功能

如果移动端访问不佳,请访问我的个人博客 系统自带的录制视频的功能显然无法满足美工和项目经理的要求,自定义视频录制就非常重要了,那么下面来带大家制作属于自己的视频录制界面. 简介 自定义视频录制需要用到的框架主要是AVFoundation和CoreMedia,包括视频输出,输入和文件的读写,下面给大家罗列一下将要用到的类: AVCaptureSession AVCaptureVideoPreviewLayer AVCaptureDeviceInput AVCaptureConnection AVC

AVFoundation的自定义相机

最近由于工作项目的功能需求,需要用到AVFoundation来自定义相机的功能.所以花了点时间去研究了一下. 在网上可以找到很多实用AVFoundation的自定义相机自定义相机的博文,虽然功能的确是完成了,但是距离我的目标还是有不少的差距的. 首先声明,预览的照片是正方形的,拍摄结果最后得到的图片也是正方形的,再好多的博文上我都没有找到该怎么设置才可以得到正方形的图片. 我是首先拍一张照片,然后在使用图片裁剪的方式得到的正方行图片.好了,接下来就让我们开始吧. 首先要了解这几个类的用处 /**

Android拍照,录制视频,相机简单功能实现

1.效果图,功能没有录制出来. 基本实现了拍照,录制视频,前后摄像头切换的功能,可以转屏,聚焦. 代码在最下面,可以看代码,运行apk看实际效果. 2.工具类 package com.example.mycamera; import android.content.Context; import android.hardware.Camera; import android.media.MediaRecorder; import android.util.Log; import android.

根据分析查看相关知识点分析iOS 三种录制视频方式

这篇文章讨论了关于如何配置视频捕获管线 (pipeline) 和最大限度地利用硬件性能的一些不同选择. 这里有个使用了不同管线的样例 app,可以在 GitHub 查看. 第一种:UIImagePickerController 目前,将视频捕获集成到你的应用中的最简单的方法是使用 UIImagePickerController.这是一个封装了完整视频捕获管线和相机 UI 的 view controller. 在实例化相机之前,首先要检查设备是否支持相机录制: 1 2 3 4 5 6 7 8 if

iOS 三种录制视频方式

随着每一代 iPhone 处理能力和相机硬件配置的提高,使用它来捕获视频也变得更加有意思.它们小巧,轻便,低调,而且与专业摄像机之间的差距已经变得非常小,小到在某些情况下,iPhone 可以真正替代它们. 这篇文章讨论了关于如何配置视频捕获管线 (pipeline) 和最大限度地利用硬件性能的一些不同选择. 这里有个使用了不同管线的样例 app,可以在 GitHub 查看. UIImagePickerController 目前,将视频捕获集成到你的应用中的最简单的方法是使用 UIImagePic

Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段落,又是新一月,上月主要是围绕MediaPlayer相关展开,从今天开始,开始分析多媒体框架中的Camera模块,看下今天的Agenda: Camera拍照 Camera录像 新API android.hardware.camera2 新旧API特点对比 Camera自定义相机 新API andro

Android自定义相机超详细讲解

Android自定义相机超详细讲解 转载请标明出处: http://blog.csdn.net/vinicolor/article/details/49642861: 由于网上关于Android自定义相机的文章写得不是太详细,Google官方的文档又说得不太容易理解,所以今天我来详细讲解一下Android自定义相机. 这篇文章主要写给一些刚刚接触Android的那些看官方API困难以及不太了解Android机制的同学们,所以熟练开发者可以绕道了. 最近在使用Camera类的时候发现居然被弃用了,