zoukankan      html  css  js  c++  java
  • 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];










  • 相关阅读:
    ProjectEuler 13
    ProjectEuler 8
    ProjectEuler 5
    ProjectEuler 6
    ProjectEuler 7
    ProjectEuler 9
    日程管理系统维护改善1
    日程管理系统改错
    android作业Text
    四则运算
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6785242.html
Copyright © 2011-2022 走看看