AudioSession/AudioCaptureSession的分析与使用
这个是AudioSession的结构图:
前一个部分已经介绍了AVFoundation对音频录制、播放的一种方法,以下再介绍第二种:
AVCaptureSession
用这个类的长处在什么地方呢?
(1)能够方面的对输入源进行控制:方便录制音频视频。抓取图片。
(2)採集到数据源方便二次加工。比方音频变声、加背景音乐。视频加入滤镜特效。
(3)定制编解码方法,尽可能採用IOS支持的硬编硬解。
比方7.0之前的AAC MPEG-4
当然8.0之后都支持H264的硬编解码。
所以假设想做一些复杂点的音视频APP,这个类是经经常使用到也是很重要的。
先来看看AVCaptureSession的总体结构:
由于这里我们拿到的是数据流。所以要想进行本地存储还须要用到一个类AVAsset。
看看我们究竟怎么用这个东东:
以下这个图描写叙述了AVCaptureSession使用的基本流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="412" height="280" alt="">
(1) 实例化AVCaptureSession(橙色部分)将输入输出源绑定到AVCaptureSession上。
输入源设置为mic:
AVCaptureDevice *mic = [AVCaptureDevice
defaultDeviceWithMediaType:AVMediaTypeAudio];
AVCaptureDeviceInput *audioinput = [AVCaptureDeviceInput
deviceInputWithDevice:mic
error:nil];
输出源设置为AVCaptureAudioDataOutput:
(2) 实例化紫色部分
紫色部拿到录音数据怎样写到本地呢?这个时候就须要实例化AVAsset:
_AudioWriteInput = [[AVAssetWriterInput
alloc]initWithMediaType:AVMediaTypeAudio
outputSettings:setting];
參数设置:
NSDictionary *setting = [NSDictionary
dictionaryWithObjectsAndKeys:
[ NSNumber
numberWithInt: kAudioFormatMPEG4AAC],
AVFormatIDKey,
[ NSNumber
numberWithInt: _AudioChannels],
AVNumberOfChannelsKey,
[ NSNumber
numberWithFloat: _Audiosamplerate],
AVSampleRateKey,
[ NSNumber
numberWithInt: ],
AVEncoderBitRateKey,
_AudioChannelLayoutData,
AVChannelLayoutKey,
nil];
音频相关參数设置參考还有一篇博客:
(3) 启动整个音频管道,開始进行录音
(4) 音频回调方法会接收到录制的音频数据。将数据传递给AVAsset,写入到本地文件里。
写入音频数据:
[_AudioWriteInput
appendSampleBuffer:sampleBuffer];
写入音频时间戳:
[_AudioWriter
startSessionAtSourceTime:startTime];
AudioSession/AudioCaptureSession的分析与使用的更多相关文章
- alias导致virtualenv异常的分析和解法
title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...
- 火焰图分析openresty性能瓶颈
注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...
- 一起来玩echarts系列(一)------箱线图的分析与绘制
一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...
- 应用工具 .NET Portability Analyzer 分析迁移dotnet core
大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...
- UWP中新加的数据绑定方式x:Bind分析总结
UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...
- 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- ABP源码分析一:整体项目结构及目录
ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...
- HashMap与TreeMap源码分析
1. 引言 在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...
随机推荐
- HTML5 新增绘图功能
<!DOCTYPE html> <html> <head lang="en"> <title></title> < ...
- iOS自定义控件创建原理(持续更新)
前言 因为如果要创建各种自定义控件根据需求的不同会有很多的差别,所以我就在这里,分析一些自定义控件的创建实现方法 弹出视图 1.把要弹出的视图装在一个控制器里面,自定义转场动画 2.创建一个弹出视图, ...
- 静态分析:IDA逆向代码段说明 text、idata、rdata、data
静态分析:IDA逆向代码段说明 text.idata.rdata.data 通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件 ...
- 移动端页面a input去除点击效果及pc端切换
1 手机端页面a button input去除点击效果以及闪屏问题 添加: a, button, input { -webkit-tap-highlight-color: rgba(255, 0, 0 ...
- 东野圭吾--嫌疑人X的献身读后感
经推荐,打算看日本大作家东野圭吾的<嫌疑人X的献身>.书很薄,八开大小的书两百多页,一下午的时间差不多就能读完.读了前面几章,代入感很强,压抑浓郁的气氛着实让人难受,所以打算先看一下电影, ...
- 洛谷 P1174 打砖块
题目描述 小红很喜欢玩一个叫打砖块的游戏,这个游戏的规则如下: 在刚开始的时候,有n行*m列的砖块,小红有k发子弹.小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分. ...
- 洛谷 P1270 “访问”美术馆
P1270 “访问”美术馆 题目描述 经过数月的精心准备,Peer Brelstet,一个出了名的盗画者,准备开始他的下一个行动.艺术馆的结构,每条走廊要么分叉为两条走廊,要么通向一个展览室.Peer ...
- android基本控件学习-----Button
Button讲解: 一.在我们实际的使用button的时候经常会对button不同状态会有不同的显示,在讲解Button前,首先对drawable下面的statelistdrawable的相关知识讲一 ...
- 使用vim修改和查看16进制文件
使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...
- jenkins 中 violation使用pylint
在jenkins中无法打开源码问题: 1. 在 Report Violations的 Source encoding 设置为 项目文件的编码, 如: utf-8. 缺省是 default. 2. 在 ...