这个是AudioSession的结构图:

前一个部分已经介绍了AVFoundation对音频录制、播放的一种方法,以下再介绍第二种:

AVCaptureSession

用这个类的长处在什么地方呢?

(1)能够方面的对输入源进行控制:方便录制音频视频。抓取图片。

(2)採集到数据源方便二次加工。比方音频变声、加背景音乐。视频加入滤镜特效。

(3)定制编解码方法,尽可能採用IOS支持的硬编硬解。

比方7.0之前的AAC MPEG-4

当然8.0之后都支持H264的硬编解码。

所以假设想做一些复杂点的音视频APP,这个类是经经常使用到也是很重要的。

先来看看AVCaptureSession的总体结构:

我们用这个结构能够做哪些事情呢?
(1)录制音频、视频、音频+视频
(2)录制过程中录制界面展示
(3)静态图片抓取
(4)中间层截获音视频数据流,实现音频特效,视频特效。

由于这里我们拿到的是数据流。所以要想进行本地存储还须要用到一个类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];

音频相关參数设置參考还有一篇博客:

音频格式具体解释:WAV

(3)  启动整个音频管道,開始进行录音

(4)  音频回调方法会接收到录制的音频数据。将数据传递给AVAsset,写入到本地文件里。

写入音频数据:

[_AudioWriteInput
appendSampleBuffer:sampleBuffer];

写入音频时间戳:

[_AudioWriter
startSessionAtSourceTime:startTime];









AudioSession/AudioCaptureSession的分析与使用的更多相关文章

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. 火焰图分析openresty性能瓶颈

    注:本文操作基于CentOS 系统 准备工作 用wget从https://sourceware.org/systemtap/ftp/releases/下载最新版的systemtap.tar.gz压缩包 ...

  3. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  4. 应用工具 .NET Portability Analyzer 分析迁移dotnet core

    大多数开发人员更喜欢一次性编写好业务逻辑代码,以后再重用这些代码.与构建不同的应用以面向多个平台相比,这种方法更加容易.如果您创建与 .NET Core 兼容的.NET 标准库,那么现在比以往任何时候 ...

  5. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  6. 查看w3wp进程占用的内存及.NET内存泄露,死锁分析

    一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方 ...

  7. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  8. ABP源码分析一:整体项目结构及目录

    ABP是一套非常优秀的web应用程序架构,适合用来搭建集中式架构的web应用程序. 整个Abp的Infrastructure是以Abp这个package为核心模块(core)+15个模块(module ...

  9. HashMap与TreeMap源码分析

    1. 引言     在红黑树--算法导论(15)中学习了红黑树的原理.本来打算自己来试着实现一下,然而在看了JDK(1.8.0)TreeMap的源码后恍然发现原来它就是利用红黑树实现的(很惭愧学了Ja ...

随机推荐

  1. AngularJs 特性 之 模块化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. POJ 3104:Drying(二分)

    题目大意:你有一台机器可以烘干衣物,现在有n个衣物需要烘干,每件衣服都有一个值表示含水量,烘干机一秒可以烘干k滴水,一件衣服不在烘干机上时会每秒自动蒸发一滴水,求最少用多少时间烘干所有衣服. 分析: ...

  3. WS-*协议栈及相关概念

    1. 什么是WS-Security? WS-Security 是一个 SOAP 的扩展,它提供了对 SOAP 消息的认证和加密. 在介绍 WS-Security 之前,我们有必要了解一下 WS-Sec ...

  4. g2o安装

    1.安装依赖项 sudo apt-get install libeigen3-dev libsuitesparse-dev libqt4-dev qt4-qmake 2.安装依赖项  libqglvi ...

  5. APK包与类更改分析

    360APK包与类更改分析 1 题目要求 这是360的全球招募无线攻防中的第二题,题目要求如下: 1)请以重打包的形式将qihootest2.apk的程序包名改为 "com.qihoo.cr ...

  6. [LeetCode] Add Two Numbers 链表

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  7. poj 2699 The Maximum Number of Strong Kings 枚举 最大流

    题目链接 题意 对于一个竞赛图(有向完全图),其顶点是选手,边是比赛,边\(e=(u,v)\)代表该场比赛中\(u\)战胜\(v\). 现定义选手的分数为其战胜的人的个数(即竞赛图中点的出度).并且定 ...

  8. linux 共享内存 信号量 同步

    这篇文章将讲述别一种进程间通信的机制——信号量.注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物.有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号.下面 ...

  9. formal parameter

    formal parameter : [3.16] object declared as part of a function declaration or definition that acqui ...

  10. python3列表推导式和生成器。

    1.把一个字符串变成 Unicode 码位的列表 >>> symbols = '$¢£¥€¤' >>> codes = [] >>> for sy ...