码迷,mamicode.com
首页 > 移动开发 > 详细

AudioSession/AudioCaptureSession的分析与使用

时间:2015-07-14 11:42:41      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:ios   录音   录像   audiosession   audiocapturesession   

这个是AudioSession的结构图:

技术分享

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

AVCaptureSession

用这个类的优点在什么地方呢?

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

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

(3)定制编解码方法,尽可能采用IOS支持的硬编硬解。比如7.0之前的AAC MPEG-4

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

所以如果想做一些复杂点的音视频APP,这个类是经常用到也是非常重要的。

先来看看AVCaptureSession的整体结构:

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

因为这里我们拿到的是数据流,所以要想进行本地存储还需要用到一个类AVAsset。

看看我们到底怎么用这个东东:

下面这个图描述了AVCaptureSession使用的基本流程

技术分享

(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: 64000 ], AVEncoderBitRateKey,

                             _AudioChannelLayoutData, AVChannelLayoutKey,

    nil];

音频相关参数设置参考另一篇博客:

音频格式详解:WAV

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

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

写入音频数据:

[_AudioWriteInput appendSampleBuffer:sampleBuffer];

写入音频时间戳:

[_AudioWriter startSessionAtSourceTime:startTime];

 










版权声明:本文为博主原创文章,未经博主允许不得转载。

AudioSession/AudioCaptureSession的分析与使用

标签:ios   录音   录像   audiosession   audiocapturesession   

原文地址:http://blog.csdn.net/u014011807/article/details/46873323

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!