美文网首页
swift 音频编码

swift 音频编码

作者: 我会回来的 | 来源:发表于2021-12-29 18:04 被阅读0次

音频编码:  

原始音频数据(PCM)---------------(编码)------------------  压缩数据类型(AAC) 

第一步:------------------------初始化编码器 

// 初始化音频文件结构信息 

// 使用音频文件的结构 :AudioStreamBasicDescription  

保存录制的音频

创建编码器 :  使用 AudioConverterNewSpecific

设置: 码率使用AudioConverterSetProperty 

估算音频大小:使用AudioConverterGetProperty    

采样率指数: 获取音频位流中的通道数  

AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。 

AAC原始数据块长度是可变的,对原始帧加上ADTS头进行ADTS封装,就形成了ADTS帧。

----------------------------------------------------------------------------------------------

iOS 下 如何进行 AAC 编码

设置输入、输出格式 ( AudioStreamBasicDescription:音频文件的结构) 

创建AAC编码器。

转码。

增加ADTS头。  

代码如下: 

https://blog.csdn.net/jay100500/article/details/52955232    AAC的ADTS头文件

赋给值 

// 添加编码器

        letaacEncoder =

            AACEncode(frequencyInHz: Int(audioSampleRate), channelCount: audioChannelCount,

                      averageBitrate: audioChannelCount > 1 ? 105000 : 88000)

——————————————  AAC 初始化  : 设置AAC编器的输入、输出格式  ———————————————————————————

// 输入格式

        varinDesc: AudioStreamBasicDescription = .init()

        // 输出格式

        varoutDesc: AudioStreamBasicDescription = .init()

        // passing anything except 48000, 44100, and 22050 for mSampleRate results in "!dat"

        // OSStatus when querying for kAudioConverterPropertyMaximumOutputPacketSize property

        // below

        inDesc.mSampleRate = Float64(frequencyInHz)

        // passing anything except 2 for mChannelsPerFrame results in "!dat" OSStatus when

        // querying for kAudioConverterPropertyMaximumOutputPacketSize property below

        inDesc.mChannelsPerFrame = UInt32(channelCount)

        inDesc.mBitsPerChannel = 16

        inDesc.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked

        inDesc.mFormatID = kAudioFormatLinearPCM

        inDesc.mFramesPerPacket = 1

        inDesc.mBytesPerFrame = inDesc.mBitsPerChannel * inDesc.mChannelsPerFrame / 8

        inDesc.mBytesPerPacket = inDesc.mFramesPerPacket*inDesc.mBytesPerFrame

        self.inDesc = inDesc

        outDesc.mFormatID = kAudioFormatMPEG4AAC

        outDesc.mFormatFlags = 2

        outDesc.mFramesPerPacket = kSamplesPerFrame

        outDesc.mSampleRate = Float64(frequencyInHz)

        outDesc.mChannelsPerFrame = UInt32(channelCount)

        self.outDesc = outDesc

————————————————— 创建AAC编码器————————————————————————

 // 保存录制的音频

        letsubtype = kAudioFormatMPEG4AAC

        // 音频类描述

        /*

             AudioClassDescription: 用于描述系统中安装的编解码工具

             音频编码器组件类型

             音频格式AAC

             软编码和硬编码

             */

        letrequestedCodecs: [AudioClassDescription] = [

            .init(

                mType: kAudioEncoderComponentType,

                mSubType: subtype,

                mManufacturer: kAppleSoftwareAudioCodecManufacturer),

            .init(

                mType: kAudioEncoderComponentType,

                mSubType: subtype,

                mManufacturer: kAppleHardwareAudioCodecManufacturer)

        ]

 /*

            用特定的编码器创建一个音频转换工具对象

            param1. 输入格式

            param2. 输出格式

            param3. 编码器描述类个数

            param4. 编码器描述类

            param5. 编码器地址

            */

        result = AudioConverterNewSpecific(&inDesc, &outDesc, 2, requestedCodecs, &audioConverter)

—————————————————转码————————————————————————————————

 /*

            用特定的编码器创建一个音频转换工具对象

            param1. 输入格式

            param2. 输出格式

            param3. 编码器描述类个数

            param4. 编码器描述类

            param5. 编码器地址

            */

        result = AudioConverterNewSpecific(&inDesc, &outDesc, 2, requestedCodecs, &audioConverter)

//  采样频率 采样帧队列 (13)

 http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config

———————————————加ADTS---------------------——————————————————————

得到AAC编码数据后,增加ADTS头。该头用于区分每个AAC数据帧。 

 

相关文章

  • swift 音频编码

    音频编码: 原始音频数据(PCM)---------------(编码)------------------ 压...

  • Android RTMP录频直播三(AAC音频编码)

    1. AAC音频编码流程 2. AAC音频编码代码

  • 六:音频编码介绍

    音频编码:就是将采集的音频数(例如PCM)压缩成为音频编码流,从而降低音频的数据传输量。目前常见的音频编码方式主要...

  • ACC编码

    ACC编码 AAC(Advanced Audio Coding,译为:高级音频编码),有损音频编码和文件格式。被设...

  • 音频技术基础

    一、音频编码调制技术 根据编码方式的不同,音频编码技术分为三种:波形编码、参数编码和混合编码。一般来说,波形编码的...

  • 视频编解码七:FFmpeg音频编码

    音频编码流程pcm->aac FFmpeg默认不包含aac音频编码器库,需要自行下载 acc音频编码器库:fdka...

  • 音频编码

    音频基础知识 PCM格式pcm是经过话筒录音后直接得到的未经压缩的数据流数据大小=采样频率采样位数声道*秒数/8采...

  • 音频编码

    音频编码和视频编码流程基本是一样的,大家可以参考视频编码来做,唯一的不同大家看demo去了解吧,这里不细说了,最关...

  • 音频编码

    一. 声音的三要素 音调.(音频).小孩>女孩>男孩 音量:声音震动幅度 音色:材质有关!谐波 . 二 .心理声学...

  • 音频编码流程

    音频编码流程

网友评论

      本文标题:swift 音频编码

      本文链接:https://www.haomeiwen.com/subject/ucrvqrtx.html