AudioSession/AudioCaptureSession的分析与使用

本文详细介绍了AVCaptureSession在音视频应用中的优势、整体结构及使用流程,包括如何方便地控制输入输出源、二次加工数据源、定制编解码方法等,并通过实例演示了录制音频、视频、音频+视频、录制界面展示、静态图片抓取等功能。同时,文章解释了如何利用AVAsset进行本地存储,并提供了关键参数设置的指导。
摘要由CSDN通过智能技术生成

这个是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];

 










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值