FFmpeg之音频封装格式、音频编解码器

语音基础知识:https://mp.csdn.net/editor/html/111210192

音频封装格式

无损压缩
无损压缩指的是在无损格式之间的压缩(转换),无论压缩(转换)成什么格式,音质都是相同的,并且都能还原成最初同样的文件。平时所说的无损均是指无损压缩,没有无损码率的说法。对于各种格式的压缩都是对应着一种算法(或者说编码),播放的时候需要有解码器进行译码,而且不同的解码器也可能会影响解压出来的文件完整性。常见的无损格式有:
wav:微软公司的一种声音文件格式,是无压缩的最接近真实声音的格式(其次是midi),支持多采样率多量化精度。所有的无损格式本质都是wav的压缩,在播放时会转回wav。
flac:Free Lossless Audio Coded,是国际通用格式,特点是压缩比高,编码算法也相当成熟,当flac文件受损时依然能正常播放。另外,该格式也是最先得到广泛硬件支持的无损格式。
ape:使用Monkey‘s Audio软件对CD抓轨而转换成的文件格式,但优势并不突出,解码较慢。
wma-lossless:也是微软公司出品,特点是压缩比高,但未成为主流。
aiff:苹果公司出品,是Apple苹果电脑上面的标准音频格式。
DSD:Sony大法的,不是很了解,欣赏不来辣种文化,但就说单纯的冲,还是要冲的。

有损压缩
有损压缩指的是声音信息在压缩过程中发生了丢失,且所丢失的声音无法用采样率和位数表示出来。但特点就是压缩后的文件变的很小,常在流媒体中使用。常见的有损格式有:
mp3:模拟人耳听觉研究出的一种复杂算法,被称为“心理声学模型”。它通过抽取音频中的一些频段来达到提高压缩比,降低码率,减少所占空间,但同时声音的细节如人声的情感、后期的混响等等都已经发生变形。盲听的话也很难较快地分辨出wav和mp3,需要借助设备。mp3目前是最为普及的声频压缩格式,可以最大程度地保留压缩前的音质。
wma:微软公司力作,不开放,哟版权。特点是在较低比特率下(如64kbps),wma可以在与mp3相同的音质条件下获得更小的体积。并且在超低比特率(如16kbps),wma音质比mp3要好得多。
aac:苹果电脑上的声音文件储存格式。
ogg:完全免费、开放和没有专利限制,但普及性较差。

m4a:M4A是MPEG-4 音频标准的文件的扩展名,最常用的.m4a文件是使用AAC格式的(文件),不过其他的格式,比如Apple Lossless甚至mp3也可以被放在.m4a容器里(TC注:这个container的概念类似于.mkv文件)。可以安全地把只包含音频的.mp4 文件的扩展名改成.m4a。

 

*************aac***********

 

我们采用的是脉冲代码调制编码,即PCM编码。它是一种将模拟语音信号转换为数字信号的编码方式,是无损非压缩编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码(最后输出一组二进制数据,就是PCM格式的数据,该文件没有附加的文件头和文件结束标志)。PCM又称为脉冲调制数据,是计算机可以播放的最原始数据

ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。

AAC原始流能让ffmpeg软解或系统硬解码,需要在ES流前面加上ADTS头,打包成ADTS的格式,一般是在AAC ES流前添加7个字节的ADTS header。

AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。https://www.cnblogs.com/zhangxuan/p/8809245.html

一般情况下ADTS的头信息是7个字节,分为2部分:

  • 抽样:对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号;
  • 量化:用一组规定的电平,把瞬时抽样值用最接近的电平值来表示,通常是用二进制表示;
  • 编码:用一组二进制码组来表示每一个有固定电平的量化值;
  • 采样后的数据大小 = 采样率值×采样大小值×声道数 bps。
    一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率=44.1K×16×2 bps=1411.2 Kbps= 176.4 KB/s。

  •   AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术。由Fraunhofer IIS、Dolby Laboratories、AT&T、Sony等公司共同开发,目的是取代MP3格式。2000年,MPEG-4标准出台,AAC重新集成了其它技术(PS,SBR),为区别于传统的MPEG-2 AAC,故含有SBR或PS特性的AAC又称为MPEG-4 AAC。

        AAC是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如PS,SBR等),衍生出了LC-AAC,HE-AAC,HE-AACv2三种主要的编码,LC-AAC就是比较传统的AAC,相对而言,主要用于中高码率(>=80Kbps),HE-AAC(相当于AAC+SBR)主要用于中低码(<=80Kbps),而新近推出的HE-AACv2(相当于AAC+SBR+PS)主要用于低码率(<=48Kbps),事实上大部分编码器设成<=48Kbps自动启用PS技术,而>48Kbps就不加PS,就相当于普通的HE-AAC。

  • AAC共有9种规格,以适应不同的场合的需要:

           MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了

      编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点

           MPEG-2 AAC Main 主规格

           MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)

           MPEG-4 AAC LC 低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中 的音频部份就包括了该规格音频文件

           MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好

           MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)

           MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)

          MPEG-4 AAC LD 低延迟规格(Low Delay)

          MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有Nero ACC 编码器支持

                 目前使用最多的是LC和HE(适合低码率)。流行的Nero AAC编码程序只支持LC,HE,HEv2这三种规格,编码后的AAC音频,规格显示都是LC。HE其实就是AAC(LC)+SBR技术,HEv2就是AAC(LC)+SBR+PS技术;

     

       

     

    AAC音频文件(传输流)格式有ADIF和ADTS:
  • ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
  • ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

adts_fixed_header();固定的头部

adts_variable_header();可变的头部

 

syncword :同步头 总是0xFFF, all bits must be 1,代表着一个ADTS帧的开始

ID:MPEG标识符,0标识MPEG-4,1标识MPEG-2

Layer:always: '00'

protection_absent:表示是否误码校验。Warning, set to 1 if there is no CRC and 0 if there is CRC

profile:表示使用哪个级别的AAC,如01 Low Complexity(LC)--- AAC LC。有些芯片只支持AAC LC 。

在MPEG-2 AAC中定义了3种:

sampling_frequency_index:表示使用的采样率下标,通过这个下标在 Sampling Frequencies[ ]数组中查找得知采样率的值。

channel_configuration: 表示声道数 

frame_length : 一个ADTS帧的长度包括ADTS头和AAC原始流.

adts_buffer_fullness:0x7FF 说明是码率可变的码流

 

在AAC中,原始数据块的组成可能有六种不同的元素:

       SCE: Single Channel Element单通道元素。单通道元素基本上只由一个ICS组成。一个

           原始数据块最可能由16个SCE组成。

       CPE: Channel Pair Element 双通道元素,由两个可能共享边信息的ICS和一些联合立体

            声编码信息组成。一个原始数据块最多可能由16个SCE组成。

       CCE: Coupling Channel Element 藕合通道元素。代表一个块的多通道联合立体声信息

           或者多语种程序的对话信息。

       LFE: Low Frequency Element 低频元素。包含了一个加强低采样频率的通道。

       DSE: Data Stream Element 数据流元素,包含了一些并不属于音频的附加信息。

       PCE: Program Config Element 程序配置元素。包含了声道的配置信息。它可能出现在

            ADIF 头部信息中。

       FIL: Fill Element 填充元素。包含了一些扩展信息。如SBR,动态范围控制信息等。

 

 

 

术语说明:

AAC: Advanced Audio Coding 高级音频编码

AAC LC: AAC with Low Complexity AAC的低复杂度配置

AAC plus: 也叫HE-AAC, AAC+,MPEG4 AAC LC加入SBR模块后形成的一个AAC版本

MPEG:Motion Picture Expert Group

IMDCT:反离散余弦变换

ADIF:Audio Data Interchange Format 音频数据交换格式

ADTS:Audio Data Transport Stream 音频数据传输流

SCE: Single Channel Element单通道元素

CPE: Channel Pair Element 双通道元素

CCE: Coupling Channel Element 藕合通道元素

DSE: Data Stream Element 数据流元素

PCE: Program Config Element 程序配置元素

FIL: Fill Element 填充元素

ICS: Individual Channel Stream 独立通道流

PNS: Perceptual Noise Substitution 知觉噪声替换

SBR: Spectral Band Replication 频段复制

TNS: Temporal Noise Shaping 瞬时噪声整形

ch:channel 通道

PS:parametric stereo 参数立体声

SBR:Spectral Band Replication 频段复制

 

********MP3*********

Layer-3 音频文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3,且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。

名称说明
ID3V2

包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1的信息量。

音频数据

1.音频数据由一系列的数据帧帧构成,个数由文件大小和帧长决定

2.每个FRAME的长度可能不固定,也可能固定,由位率bitrate决定

3.每个FRAME又分为帧头和数据实体两部分

4.帧头记录了mp3的位率,采样率,版本等信息,每个帧之间相互独立

5.如果启用CRC校验,则帧头后面跟着2字节CRC校验,之后存在两字节的附加信息,也可能无附加是信息。

ID3V1包含了作者,作曲,专辑等信息,长度固定为128字节。

ID3V2.

每个ID3V2.3 都一个标签头和若干个标签帧或一个扩展标签头组成关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。

标签头:位于文件开始处,长度为10字节,结构如下:

  
char Header[3]  必须为“ID3”否则认为标签不存在
char Ver版本号ID3V2.3 就记录3
char Revision副版本号此版本记录为0
char Flag

标志字节,只使用高三位,其它位为0,

标志字节一般为0,定义如下(abc000000B)

a:表示是否使用Unsynchronisation

b:表示是否有扩展头部,一般没有,所以一般也不设置

c:表示是否为测试标签,99.99%的标签都不是测试标签,不设置

char Size[4]标签大小,包括标签头的10 个字节和所有的标签帧的大小,

标签大小共四个字节,每个字节只使用低7位,最高位不使用恒为0,计算时将最高位去掉,得到28bit的数据,计算公式如下:

Size=(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x400+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)

 

标签帧:每个标签帧都有10个字节的帧头(和标签头不是一个东西,虽然他们刚好都是10字节,标签头只有一个,每个标签帧都有一个帧头)和至少一个字节的内容构成,标签帧与标签头/其他标签帧无特殊字节分割,只能通过帧头信息来确定帧内容的大小。

标签帧的帧头结构:

  
char ID[4]

标识帧,说明其内容,例如作者/标题等,

用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下: 

TIT2=标题表示内容为这首歌的标题,下同 

TPE1=作者

TALB=专集

TRCK=音轨格式:N/M 其中N 为专集中的第N 首,M为专集中共M 首,N和M 为ASCII 码表示的数字 

TYER=年代是用ASCII 码表示的数字 

TCON=类型直接用字符串表示 

COMM=备注格式:"eng\0备注内容",其中eng 表示备注所使用的自然语言

char Size[4]

帧内容的大小,不包括帧头,不得小于1,每个字节的8 位全用,

算法如下: 

int FSize; 

FSize = Size[0]*0x100000000 + Size[1]*0x10000+ Size[2]*0x100 + Size[3]; 

第5到8字节为标签帧的大小,这里为

FSize = 0x00*0x100000000+ 0x00*0x10000 + 0x00*0x100 + 0x24 = 0x24 = 36

char Flags[2]

标志帧,只定义了6 位,另外的10 位为0,但大部分的情况下16 位都为0 就可以了。格式如下: 

abc00000ijk00000 

a -- 标签保护标志,设置时认为此帧作废

b -- 文件保护标志,设置时认为此帧作废

c -- 只读标志,设置时认为此帧不能修改(但我没有找到一个软件理会这个标志) 

i -- 压缩标志,设置时一个字节存放两个BCD 码表示数字 

j -- 加密标志(没有见过哪个MP3 文件的标签用了加密) 

k -- 组标志,设置时说明此帧和其他的某帧是一组

注意:winamp 在保存和读取帧内容的时候会在内容前面加个''\0'',并把这个字节计算在帧内容的大小中。

  
  

MP3音频数据(除了ID3v2和ID3v1之外的数据)

MP3的帧格式:每个帧都有一个帧头Header,长度是4Byte(32bit),帧头后面可能有两个字节的CRC 校验值,这两个字节的是否存在决定于Header 信息的第16bit,为0 则帧头后面无校验,为1 则有校验,校验值长度为2 个字节,紧跟在Header 后面,接着就是帧的实体数据了。

名称长度(Byte)属性
帧头4必存在
CRC2可能存在
通道信息32必存在
声音数据N必存在

        帧头:帧头长4字节,对于固定位率的MP3文件,所有帧的帧头格式一样,如下:

名称

位长

说          明

同步信息

11

第1、2字节

所有位均为1,第1字节恒为FF。

版本

2

00-MPEG 2.5   01-未定义     10-MPEG 2     11-MPEG 1

2

00-未定义      01-Layer 3     10-Layer 2      11-Layer 1

CRC校验

1

0-校验        1-不校验

位率

4

第3字节

 取样率,单位是kbps,例如采用MPEG-1 Layer 3,64kbps是,值为0101。

bits

V1,L1

V1,L2

V1,L3

V2,L1

V2,L2

V2,L3

0000

free

free

free

free

free

free

0001

32

32

32

32(32)

32(8)

8 (8)

0010

64

48

40

64(48)

48(16)

16 (16)

0011

96

56

48

96(56)

56(24)

24 (24)

0100

128

64

56

128(64)

64(32)

32 (32)

0101

160

80

64

160(80)

80(40)

64 (40)

0110

192

96

80

192(96)

96(48)

80 (48)

0111

224

112

96

224(112)

112(56)

56 (56)

1000

256

128

112

256(128)

128(64)

64 (64)

1001

288

160

128

288(144)

160(80)

128 (80)

1010

320

192

160

320(160)

192(96)

160 (96)

1011

352

224

192

352(176)

224(112)

112 (112)

1100

384

256

224

384(192)

256(128)

128 (128)

1101

416

320

256

416(224)

320(144)

256 (144)

1110

448

384

320

448(256)

384(160)

320 (160)

1111

bad

bad

bad

bad

bad

bad

V1 - MPEG 1    V2 - MPEG 2 and MPEG 2.5
L1 - Layer 1     L2 - Layer 2     L3 - Layer 3
"free" 表示位率可变    "bad"  表示不允许值

采样频率

2

采样频率,对于MPEG-1:  00-44.1kHz    01-48kHz    10-32kHz      11-未定义

          对于MPEG-2:  00-22.05kHz   01-24kHz    10-16kHz      11-未定义

          对于MPEG-2.5: 00-11.025kHz 01-12kHz    10-8kHz       11-未定义

帧长调节

1

用来调整文件头长度,0-无需调整,1-调整,具体调整计算方法见下文。

保留字

1

没有使用。

声道模式

2

第4字节

表示声道, 00-立体声Stereo    01-Joint Stereo    10-双声道        11-单声道

扩充模式

2

当声道模式为01是才使用。

Value

强度立体声

MS立体声

00

off

off

01

on

off

10

off

on

11

on

on

版权

1

文件是否合法,0-不合法   1-合法

原版标志

1

是否原版,    0-非原版   1-原版

强调方式

2

用于声音经降噪压缩后再补偿的分类,很少用到,今后也可能不会用。

00-未定义     01-50/15ms     10-保留       11-CCITT J.17

MP3帧长取决于位率和频率

计算帧长度 

我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这是恒定值。其值如下表所示 

 

MPEG 1

MPEG 2(LSF)

MPEG 2.5(LSF)

Layer 1

384

384

384

Layer 2

1152

1152

1152

Layer 3

1152

576

576

帧长度是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI的一个空位长4字节,LayerII和LayerIII的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。注意:因为有填充和比特率变换,帧长度可能变化。 

从头中读取比特率,采样频率和填充的值后可以进行计算, 

LyaerI使用公式: 

帧长度(字节) = (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充 * 4

LyerII和LyaerIII使用公式: 

帧长度(字节)= (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充

例: 

LayerIII 比特率 128000,采样频率 44100,填充0  =〉帧大小 417字节;

如图 2.3中,比特率为128K,采样率为44.1K,填充0,则其帧长度为:

(1152 / 8 * 128K)/44.1K = 417 (字节)

每帧的持续时间 

每帧的持续时间可以通过计算获得,下面给出计算公式 

每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000

如图 2.3中,其每帧时间为:

1152 / 44.1K * 1000 = 26.12 (约等于26ms)

如果是MPEG2 Layer III 采样率为16KHz的话那一帧要持续36毫秒,这个相差还是蛮大的,所以还是应该通过计算来获的。

CRC校验 

如果帧头的校验位为0,则帧头后就有一个16位的CRC值,这个值是big-endian的值,把这个值和该帧通过计算得出的CRC值进行比较就可以得知该帧是否有效。

帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。

对于mp3来说现在有两种编码方式,一种是CBR,也就是固定位率,固定位率的帧的大小在整个文件中都是是固定的,只要知道文件总长度,和从第一帧帧头读出的信息,就都可以通过计算得出这个mp3文件的信息,比如总的帧数,总的播放时间等等,要定位到某一帧或某个时间点也很方便,这种编码方式不需要文件头,第一帧开始就是音频数据。另一种是VBR,就是可变位率,VBR是XING公司推出的算法,所以在MP3的FRAME里会有“Xing"这个关键字(也有用"Info"来标识的),它存放在MP3文件中的第一个有效帧的数据区里,它标识了这个MP3文件是VBR的。同时第一个帧里存放了MP3文件的帧的总个数,这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的帧索引,假设4分钟的MP3歌曲,240S,分成100段,每两个相邻INDEX的时间差就是2.4S,所以通过这个INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快进的帧头。

VBR文件头位于MP3文件中第一个有效帧的数据区。有两种格式,一种是常见的XINGHeader(头部包含字符‘Xing’),另一种是VBRIHeader(头部包含字符‘VBRI’)鉴于VBRIHeader不常见,下面只说XINGHeader:

XING Header的起始位置,相对于第一帧帧头的位置,单位是字节 

36-39 "Xing" 文件为MPEG1并且不是单声道(大多数VBR的mp3文件都是如此)

21-24 "Xing" 文件为MPEG1并且是单声道 

21-24 "Xing" 文件为MPEG2并且不是单声道 

13-16 "Xing" 文件为MPEG2并且是单声道

 

 VBR文件头结构:

ID3v1

MP3的结尾,固定128字节;ID3V1 的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30 个字节,则使用''\0''填充。

字节

长度 (字节)

说       明

charHeader[3]

1-3(A)

3

存放“TAG”字符,表示ID3 V1.0标准,紧接其后的是歌曲信息。

charTitle[30]

4-33(B)

30

歌名

charArtist[30]

34-63(C)

30

作者

charAlbum[30]

64-93(D)

30

专辑名

charYear[4]

94-97(E)

4

年份

charComment[28]

98-125(F)

28

附注

charreserve

126(G)

1

保留位

chartrack

127(H)

1

音轨号

charGenre

128(I)

1

MP3音乐类别,共147种。

 

MP3音乐类别:

/* Standard genres */ 
0="Blues"; 
1="ClassicRock"; 
2="Country"; 
3="Dance"; 
4="Disco"; 
5="Funk"; 
6="Grunge"; 
7="Hip-Hop"; 
8="Jazz"; 
9="Metal"; 
10="NewAge"; 
11="Oldies"; 
12="Other"; 
13="Pop"; 
14="R&B"; 
15="Rap"; 
16="Reggae"; 
17="Rock"; 
18="Techno"; 
19="Industrial"; 
20="Alternative"; 
21="Ska"; 
22="Deathl"; 
23="Pranks"; 
24="Soundtrack"; 
25="Euro-Techno"; 
26="Ambient"; 
27="Trip-Hop"; 
28="Vocal"; 
29="Jazz+Funk"; 
30="Fusion"; 
31="Trance"; 
32="Classical"; 
33="Instrumental"; 
34="Acid"; 
35="House"; 
36="Game"; 
37="SoundClip"; 
38="Gospel"; 
39="Noise"; 
40="AlternRock"; 
41="Bass"; 
42="Soul"; 
43="Punk"; 
44="Space"; 
45="Meditative"; 
46="InstrumentalPop"; 
47="InstrumentalRock"; 
48="Ethnic"; 
49="Gothic"; 
50="Darkwave"; 
51="Techno-Industrial"; 
52="Electronic"; 
53="Pop-Folk"; 
54="Eurodance"; 
55="Dream"; 
56="SouthernRock"; 
57="Comedy"; 
58="Cult"; 
59="Gangsta"; 
60="Top40"; 
61="ChristianRap"; 
62="Pop/Funk"; 
63="Jungle"; 
64="NativeAmerican"; 
65="Cabaret"; 
66="NewWave"; 
67="Psychadelic"; 
68="Rave"; 
69="Showtunes"; 
70="Trailer"; 
71="Lo-Fi"; 
72="Tribal"; 
73="AcidPunk"; 
74="AcidJazz"; 
75="Polka"; 
76="Retro"; 
77="Musical"; 
78="Rock&Roll"; 
79="HardRock"; 


 

Winamp扩充了这个表 

80="Folk"; 
81="Folk-Rock"; 
82="NationalFolk"; 
83="Swing"; 
84="FastFusion"; 
85="Bebob"; 
86="Latin"; 
87="Revival"; 
88="Celtic"; 
89="Bluegrass"; 
90="Avantgarde"; 
91="GothicRock"; 
92="ProgessiveRock"; 
93="PsychedelicRock"; 
94="SymphonicRock"; 
95="SlowRock"; 
96="BigBand"; 
97="Chorus"; 
98="EasyListening"; 
99="Acoustic"; 
100="Humour"; 
101="Speech"; 
102="Chanson"; 
103="Opera"; 
104="ChamberMusic"; 
105="Sonata"; 
106="Symphony"; 
107="BootyBass"; 
108="Primus"; 
109="PornGroove"; 
110="Satire"; 
111="SlowJam"; 
112="Club"; 
113="Tango"; 
114="Samba"; 
115="Folklore"; 
116="Ballad"; 
117="PowerBallad"; 
118="RhythmicSoul"; 
119="Freestyle"; 
120="Duet"; 
121="PunkRock"; 
122="DrumSolo"; 
123="Acapella"; 
124="Euro-House"; 
125="DanceHall"; 

其他扩充

126="Goa"; 
127="Drum&Bass"; 
128="Club-House"; 
129="Hardcore"; 
130="Terror"; 
131="Indie"; 
132="BritPop"; 
133="Negerpunk"; 
134="PolskPunk"; 
135="Beat"; 
136="ChristianGangstaRap"; 
137="Heavyl"; 
138="Blackl"; 
139="Crossover"; 
140="ContemporaryChristian"; 
141="ChristianRock"; 
142="Merengue"; 
143="Salsa"; 
144="Trashl"; 
145="Anime"; 
146="JPop"; 
147="Synthpop";

 

实例分析:https://blog.csdn.net/u010650845/article/details/53520426

 

********wma********

wma是微软出的有损压缩,不对外开放,有版权限制,下面是头部解析:

******wav**********

无损格式

RIFF全称为资源互换文件格式(Resources Interchange File Format),RIFF文件是windows环境下大部分多媒体文件遵循的一种文件结构,常见的如WAV文件、AVI文件等。RIFF可以看成一种树状结构,其基本组成单元为LIST和CHUNK,分别如树的节点和叶子。

在RIFF文件中,数据保存的基本单元是CHUNK,可用于保存音视频数据或者一些参数信息,LIST相当于文件系统的目录,可以包含多个CHUNK或者多个LIST。

1 、FOURCC

一个FOURCC(four character code)是一个占4个字节的数据,一般表示4个ASCII字符。在RIFF文件格式中,FOURCC非常普遍,LISTtype, chunkid, 起始标识等信息都是用FOURCC表示的。FOURCC一般是四个字符,如”abcd”这样的形式,也可以三个字符包含一个空格,如”abc ”这样的形式。

2 、CHUNK

一个CHUNK数据块的数据结构如下:

ChunkID    ChunkSize    ChunkData

ChunkID是一个FOURCC,标识该CHUNK的名称,类似于windows文件系统中的文件名。 ChunkSize占用4个字节,表示ChunkData部分的数据内容大小,以字节为单位。ChunkData则是CHUNK中实质性的内容,保存的是CHUNK的具体数据内容。一个CHUNK保存的数据可以是关于声音文件的编码方式、音视频采样等信息,也可以是音频或视频数据。具体表示是哪类数据则通过ChunkID来标识。

3 、LIST

一个LIST数据块的数据结构如下:

“LIST”   ListSize    ListType    ListData

“LIST”也是一个FOURCC,而且是固定的,每个LIST都是以“LIST”为开头。ListSize占用4个字节,表示ListType和ListData两部分加在一起的大小。ListType是一个FOURCC,是对LIST具体包含的数据内容的标识。而ListData则是该LIST的数据内容区,有CHUNK和子LIST组成,它们的个数和组成次序可以是不确定的。

4 、RIFF 文件头

RIFF文件头的数据结构如下:

“RIFF”   FileSize   FileType   FileData

“RIFF”也是一个FOURCC,用于标识该文件是一个RIFF格式的文件。FileSize是一个4字节的数据,给出文件的大小,但仅包括FileType和FileData两部分。FileType是一个FOURCC,用来说明文件类型,如”WAV”, “AVI”等。FileData部分表示文件的具体内容,可以是LIST也可以是CHUNK.

wav通常用来保存PCM格式的原始音频数据,所以通常被称为无损音频。但是严格意义上来讲,WAV也可以存储其它压缩格式的音频数据。WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunkFormat chunk、Fact Chunk(可选)Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunkCue points chunkPlaylist chunkAssociated data list chunk等。

每个文件最前端写入的是RIFF块,每个文件只有一个RIFF块。从 Wave文件格式详细说明 中可以看到这一点。

非PCM格式的文件会至少多加入一个 "fact" 块,它用来记录数据(注意是数据而不是文件)解压缩后的大小。这个 "fact" 块一般加在 "data" 块的前面。

wav常见的结构:

RIFF区块

名称偏移地址字节数端序内容
ID0x004Byte大端'RIFF' (0x52494646),以'RIFF'为标识
Size0x044Byte小端fileSize - 8,Size是整个文件的长度减去IDSize的长度
Type0x084Byte大端'WAVE'(0x57415645),TypeWAVE表示后面需要两个子块:Format区块和Data区块

FORMAT区块

名称偏移地址字节数端序内容
ID0x004Byte大端'fmt ' (0x666D7420),以'fmt '为标识
Size0x044Byte小端16,Size表示该区块数据的长度(不包含IDSize的长度)
AudioFormat0x082Byte小端音频格式,AudioFormat表示Data区块存储的音频数据的格式,PCM音频数据的值为1
NumChannels0x0A2Byte小端声道数,NumChannels表示音频数据的声道数,1:单声道,2:双声道
SampleRate0x0C4Byte小端采样率,SampleRate表示音频数据的采样率
ByteRate0x104Byte小端每秒数据字节数,ByteRate每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8
BlockAlign0x142Byte小端数据块对齐,BlockAlign每个采样所需的字节数 = NumChannels * BitsPerSample / 8
BitsPerSample0x162Byte小端采样位数,BitsPerSample每个采样存储的bit数,8:8bit,16:16bit,32:32bit

 NumChannels SampleRate BitsPerSample 三个参数最重要,其它的都是依据这三个计算出来的。

Fact

在非PCM格式的文件中(即压缩编码文件),一般会在WAVEFORMAT结构后面加入一个 "fact" chunk。

常见的压缩编码格式:

格式代码格式名称fmt 块长度fact 块
1(0x0001)PCM/非压缩格式16 
2(0x0002Microsoft ADPCM18
3(0x0003)IEEE float18
6(0x0006)ITU G.711 a-law18
7(0x0007)ITU G.711 μ-law18
49(0x0031)GSM 6.1020
64(0x0040)ITU G.721 ADPCM 
65,534(0xFFFE)见子格式块中的编码格式40 

 

 DATA区块

名称偏移地址字节数端序内容
ID0x004Byte大端'data' (0x64617461),以'data'为标识
Size0x044Byte小端N,Size表示音频数据的长度,N = ByteRate * seconds
Data0x08NByte小端音频数据,

WAV文件以小端形式来进行数据存储。

所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。

 

******flac********

https://blog.csdn.net/yu_yuan_1314/article/details/9491763

block、subblock 指没有被编码的原始数据;frame、subframe指编码后的数据;

Block:一组或多组跨所有声道的采样点(flac采样组数范围16~65535)。

Subblock:一个或多个单声道的采样点,一个Block包含几个声道就有几个subblock,同个block内subblock的采样点数相同。

Blocksize:一个block中任意subblock的采样点个数(与声道数无关)。

Frame:一个frame帧头加一个或多个Subframe

Subframe:一个subframe帧头加某一声道上一个或多个编码后的采样点,一个frame中的所有subframe包含的采样点数一样。

(每次一个subblock被编码成一个subframe,多个subframe组成一个frame)

Flac中所有数值都是整形,大端模式,除非特别指出,否则数值都是unsigned的。

Flac比特流以“fLaC”开始,接着是必须的metadata块(STREAMINFO),然后是其他可选的metadata块,接着是音频帧。

Flac最多可以支持到128类metadata,已经定义的包括下面几种:

A.   STREAMINFO:包含整个比特流的一些信息,如采样率、声道数、采样总数等。他一定是第一个metadata而且必须有。之后可以接其他metadata,这些metadata可以不用识别直接跳过。

B. APPLICATION:包含第三方应用软件信息,这个段里的32位识别码是flac维护组织提供的,是唯一的。

C. PADDING:没有意义的东西,主要用来后期添加其他metadata。

D. SEEKTABLE:保存快速定位点,一个点由18bytes组成(2k就可以精确到1%的定位),表里可以有任意多个定位点。

E.  VORBIS_COMMENT:存储了一系列可读的“名/值”的键值对,使用UTF-8编码。这是flac唯一官方支持的标签段。

F.  CUESHEET:存储用在cue sheet中的各种信息。可以用来划分音轨,在备份CD时十分有用。

G. PICTURE:保存相关图片,同时还有url、分辨率等信息,可以有不止一个picture block。

 

FLAC文件结构:

Field Name 

Length(bit)

Description

文件标记”fLaC”

32

“fLaC”, 文件标记,0x66 0x41 0x61 0x43

METADATA BLOCK

34*8

STREAMINFO,必选的metadata block,说明Stream的基本特性。

METADATA BLOCK

 

一个或者多个metadata block,可选。

AUDIO FRAMES

 

一个或者多个Audio Frame

 Metadata block结构:

Field Name

L(bit)

Description

METADATA

BLOCK

HEADER

 

1

‘1’表示是最后一个metadata

BLOCK TYPE

7

0 : STREAMINFO

1 : PADDING

2 : APPLICATION

3 : SEEKTABLE

4 : VORBIS_COMMEN

5 : CUESHEET

6 : PICTURE

7-126 : reserved

127 : 无效

BLOCK SIZE

24

数据长度,不包括header,单位byte

METADATA

BLOCK

DATA

STREAMINFO

16

最小的block size,单位sample

16

最大的block size,单位sample

24

最小的frame size,单位byte,0表示未知

24

最大的frame size,单位byte,0表示未知

20

采样率(Hz)

3

声道数减一,flac支持1~8个声道

5

采样位数减一,flac支持4~32位采

样位数

36

一个声道的总采样数,0表示未知

128

未编码时的原始信号的MD5信息

PADDING

N

N必须为8的倍数,目前设置为0

APPLICATION

32

应用程序ID

N

应用程序数据,N必须是8的倍数

SEEK

TABLE

多个

SEEK

POINT

64

目标帧中第一个sample的序号

64

相对于第一帧开始的偏移(byte)

16

目标帧中的采样数

VORBIS COMMENT

N

Vorbis comment packet的内容

CUESHEET

HEADER

128*8

媒体目录号,ASCII为0x20-0x7e

64

引导sample的个数

1

1表示CUESHEET对应一个Compact Disc

7+258*8

Reserved

8

Track的个数

多个

TRACK

HEADER

64

Track偏移量,单位sample

8

Track号

12*8

TrackISRC

1

Track类型:0 音乐 1非音乐

1

pre-emphasis标记

6+13*8

Reserved

8

索引数目

多个

INDEX

64

偏移,单位sample

8

索引号

3*8

Reserved

PICTURE

32

图片类型(同ID3v2 APIC)

0 - Other

1- 32x32 pixels 'file icon' (PNG only)

2 - Other file icon

3 - Cover (front)

4 - Cover (back)

5 - Leaflet page

6 - Media (e.g. label side of CD)

7 - Lead artist/lead performer/soloist

8 - Artist/performer

9 - Conductor

10 - Band/Orchestra

11 - Composer

12 - Lyricist/text writer

13 - Recording Location

14 - During recording

15 - During performance

16 - Movie/video screen capture

17 - A bright coloured fish

18 - Illustration

19 - Band/artist logotype

20 - Publisher/Studio logotype

32

MIME类型字符长度(byte)

N*8

MIME类型

32

描述符长度(byte)

N*8

描述符UTF-8

32

图片宽度

32

图片高度

32

图片颜色深度

32

索引图使用的颜色数目,0非索引图

32

图片数据长度

N*8

图片数据

 

音频数据由一个或多个音频帧组成.

Audio Frame结构:

 

Field Name

L(bit)

Description

FRAME HEADER

14

同步字,'11111111111110'

1

0 : 强制值,1 : 保留未来使用

1

分块策略,0:固定块大小,帧头包含帧的序号

1:块大小可变,帧头包含采样点序号

4

块内的采样数

0000 : reserved

0001 : 192 samples

0010-0101 : 576 * (2^(n-2)) samples

0110 : get 8 bit (blocksize-1) from end of header

0111 : get 16 bit (blocksize-1) from end of header

1000-1111:256 * (2^(n-8)) 采样点

4

采样率

0000 : get from STREAMINFO metadata block

0001 : 88.2kHz     0010 : 176.4kHz

0011 : 192kHz      0100 : 8kHz

0101 : 16kHz       0110 : 22.05kHz

0111 : 24kHz       1000 : 32kHz

1001 : 44.1kHz      1010 : 48kHz

1011 : 96kHz

1100 : 从header end 获得8位的比特率(kHz) 

1101 : 从header end 获得16位的比特率(Hz)

1110 : 从header end 获得16位的比特率(ten Hz)

1111 : invalid, to prevent sync-fooling string of 1s

4

0000-0111 :独立声道减一,分配如下:

1 channel: mono

2 channels: left, right

3 channels: left, right, center

4 channels: left, right, back left, back right

5 channels: left, right, center, back/surround left, back/surround right

6 channels: left, right, center, LFE, back/surround left, back/surround right

7 channels、8 channels: not defined

1000 : left/side stereo: channel 0是left channel, channel 1是side channel

1001 : right/side stereo: channel 0 是 side channel, channel 1是right channel

1010 : mid/side stereo: channel 0 是mid channel, channel 1是side channel

1011-1111 : reserved

3

采样深度

000 : get from STREAMINFO metadata block

001 : 8 bits per sample   010 : 12 bits per sample

011 : reserved          100 : 16 bits per sample

101 : 20 bits per sample  110 : 24 bits per sample

111 : reserved

1

0 : 强制值,1 : 保留未来使用

if(variable blocksize) 

<8-56>:"UTF-8" coded sample number (decoded number is 36 bits)

else 

<8-48>:"UTF-8" coded frame number (decoded number is 31 bits)

if(blocksize bits == 011x)   8/16 bit (blocksize-1)

if(sample rate bits == 11xx)  8/16 bit sample rate

8

CRC-8

SUBFRAME

SUBFRAME HEADER

1

填充0,prevent sync-fooling string of 1s

6

Subframe类型

000000 : SUBFRAME_CONSTANT

000001 : SUBFRAME_VERBATIM

00001x : reserved

0001xx : reserved

001xxx : if(xxx <= 4) SUBFRAME_FIXED, xxx=order ; else reserved

01xxxx : reserved

1xxxxx : SUBFRAME_LPC, xxxxx=order-1

1+k

'Wasted bits-per-sample' flag

0 : no wasted bits-per-sample in source subblock, k=0

1 : k wasted bits-per-sample in source subblock, k-1 follows, unary coded;

e.g. k=3 => 001 follows, k=7 => 0000001 follows.

SUBFRAME CONSTANT

N

N = Bits per Sample

SUBFRAME

FIXED

 

N

N = Bits per Sample * Predictor Order

RESIDUAL

 

Encoded Residual

SUBFRAME

LPC

 

N

N = Bits per Sample * Lpc Order

 

4

 

 

5

 

 

N

 

RESIDUAL

 

Encoded Residual

SUBFRAME VERBATIM

N*I

N = Bits per Sample,I = Block Size

 

填充0以实现对齐

FRAME FOOTER

16

CRC-16

 

*******aiff***********

http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html

AIFF是由美国APPLE公司开发的无损音频格式,是Apple苹果电脑上面的标准音频格式,属于QuickTime技术的一部分。AIFF格式只能包含未经压缩的PCM格式的音频数据, AIFF文件包含以下几个区块(Chunk):Common Chunk (必需),Sound Data Chunk (必需),Marker Chunk,Instrument Chunk,Comment Chunk,Name Chunk,Author Chunk,Copyright Chunk,Annotation Chunk,Audio Recording Chunk,MIDI Data Chunk,Application Chunk,ID3 Chunk。

每个区块(Chunk)基本结构:

Chunk ID

Chunk size

data

 

 

 

音频编解码协议

*******MP3*************

MP3的解码总体上可分为9个过程:比特流分析,霍夫曼编码,逆量化处理,立体声处理,频谱重排列,抗锯齿处理,IMDCT变换,子带合成,PCM输出。

 

********AAC**********

编解码流程:https://www.cnblogs.com/fellow1988/p/7545881.html

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第一章 多媒体概念介绍 6 1.1视频格式 6 1.1.1常见格式 6 1.2音频格式 9 1.2.1常见格式 9 1.2.2比较 15 1.3字幕格式 15 1.3.1外挂字幕与内嵌字幕的阐述 15 1.3.2外挂字幕视频与内嵌字幕视频的画面比较 15 1.3.3外挂字幕的三种格式 15 1.4采集录制和播放渲染 16 1.4.1视频采集 16 1. 4.2视频录制 17 1.4.3视频渲染 17 1.5编解码器 18 1.6容器和协议 19 1.6.1容器格式和编码格式 19 1.6.2协议 26 1.6.2.1 视频协议 26 1.6.2.2 音频协议. 26 1.6.2.3 上层通讯协议 27 1.7常用概念介绍 27 1.7.1硬解 27 1.7.2 IBP帧 28 1.7.3 DTS和PTS 31 1.7.4 分辨率 31 1.7.5 码率 32 1.7.6 帧率 32 1.7.7 RGB和YUV 32 1.7.8 实时和非实时 32 1.7.9 复合视频和s-video 32 1.7.10 硬件加速 32 1.7.11 FFmpeg Device 32 第二章 FFmpeg框架 34 2.1 FFmpeg概述 34 2.1.1简介 34 2.1.2功能 34 2.1.3模块组成 35 2.1.4命令集 35 2.2 媒体播放器三大底层框架 37 第三章 编译及简单应用 41 3.1 FFmpeg库编译和入门介绍 41 41 3.2 流媒体数据流程讲解 49 3.3 简单应用 51 3.4 SDL( Simple Direct Layer) 55 3.4.1 SDL显示视频 55 3.4.2 SDL显示音频 55 3.5 ffmpeg程序的使用(ffmpeg.exe,ffplay.exe,ffprobe.exe) 56 3.5.1 ffmpeg.exe 56 3.5.2 ffplay.exe 56 3.5.3 ffprobe.exe 56 第四章 数据结构 57 4.1 AVCodec结构体 59 4.2 AVCodecContext结构体 59 4.3 AVInputFormat结构体 60 4.4 AVFormatContext结构体 61 4.5 MovContext结构体 62 4.6 URLProtocol结构体 62 4.7 URLContext结构体 63 4.8 AVIOContext结构体(老版本为:ByteIOContext) 63 4.9 AVStream结构体 64 4.10 MOVStreamContext 结构体 65 4.11 AVPacket 结构体 66 4.12 AVPacketList 结构体 67 4.13 AVFrame结构体 67 第五章 重要模块 76 5.1 libavutil公共模块 76 1 文件列表 76 2 common.h 文件 76 3 bswap.h 文件 78 4 rational.h 文件 79 5 mathematics.h 文件 80 6 avutil.h 文件 80 5.2 libavcodec编解码模块 82 1 文件列表 82 2 avcodec.h 文件 82 3 allcodec.c 文件 87 4 dsputil.h 文件 87 5 dsputil.c 文件 88 6 utils_codec.c 文件 88 7 imgconvert_template.h 文件 99 8 imgconvert.c 文件 121 9 msrle.c 文件 164 10 turespeech_data.h 文件 171 11 turespeech.c 文件 174 5.3 libavformat容器模块 184 1 文件列表 184 2 avformat.h 文件 184 3 allformat.c 文件 190 4 cutils.c 文件 190 5 file.c 文件 192 6 avio.h 文件 194 7 avio.c 文件 196 8 aviobuf.c 文件 200 9 utils_format.c 文件 209 10 avidec.c 文件 220 5.4 libswscale视频色彩空间转换 243 5.5 libswresample音频重采样 243 5.6 libavfilter音视频滤器 243 5.7 libavdevice设备输入和输出容器 243 5.8 libpostproc视频后期处理 243 第六章 播放器 243 6.1 视频播放器 243 6.1.1 ffmpeg库的配置 243 6.1.2 一个简单的视频播放器 244 6.2 音频播放器 247 6.3 一个完整的播放器--ffplay 253 6.3.1 ffplay流程图 253 6.3.2 ffplay源码剖析 254 第七章 应用开发 275 7.1 ffmpeg库的使用:编码 275 第八章 关键函数介绍 280 8.1 avformat_open_input 280 8.2 avcodec_register_all() 281 8.3 av_read_frame() 283 8.4 avcodec_decode_video2() 283 8.5 transcode_init() 283 8.6 transcode() 294 第九章 ffmpeg相关工程 301 9.1 ffdshow 301 ffdshow 源代码分析1 : 整体结构 302 ffdshow 源代码分析 2: 位图覆盖滤镜(对话框部分Dialog) 304 ffdshow 源代码分析 3: 位图覆盖滤镜(设置部分Settings) 312 ffdshow 源代码分析 4: 位图覆盖滤镜(滤镜部分Filter) 317 ffdshow 源代码分析 5: 位图覆盖滤镜(总结) 322 ffdshow 源代码分析 6: 对解码器的dll的封装(libavcodec) 322 ffdshow 源代码分析 8: 视频解码器类(TvideoCodecDec) 344 ffdshow 源代码分析 9: 编解码器有关类的总结 352 9.2 LAV filters 357 LAV Filter 源代码分析 1: 总体结构 357 LAV Filter 源代码分析 2: LAV Splitter 358 LAV Filter 源代码分析 3: LAV Video (1) 382 LAV Filter 源代码分析 4: LAV Video (2) 400 9.3 MPlayer 427 9.3.1 Mplayer支持的格式 427 9.3.2 Mplayer 中头文件的功能分析 427 9.3.3 MPlayer.main 主流程简要说明 428 9.3.4 Mplayer源码分析 429 第十章 开发实例 436 第十一章 mp4文件封装协议分析 436 11.1 概述 436 11.2 mp4的物理结构 436 11.3 数据的组织结构 437 11.4 mp4的时间结构 437 11.5 文件结构分析 438 11.5.1 File Type Box(ftyp) 438 11.5.2 Movie Box(moov) 438 第十二章 flv 文件格式分析 457 12.1 概述 457 12.2 文件总体结构 457 12.3 文件结构分析 458 12.3.1 flv文件头的结构 458 12.3.2 body主体结构 459 附录A:常见问题 465 1 ffmpeg 从内存中读取数据 465 2 MFC中使用SDL播放音频没有声音的解决方法 465 附录B:经典代码示例 466 附录C:ffmpeg参数中文详细解释 477 附录D:ffplay的快捷键以及选项 479 附录E: ffmpeg处理rtmp流媒体 481
本书共16章,分为4篇,详细讲解了使用各种软件和平台进行音、视频多媒体编程的技术,以案例为对象展示实现过程、分析技术难点。主要内容包括软件Visual C++2005的开发技术、DirectSound开发音频、DirectShow/VFW开发视频、MMX/SSE进行多媒体汇编编程、DM642 DSP进行音视频算法优化和主流视频算法MPEG-4/H.264的编码原理及工程实践。本书系统地介绍Visual C++ 2005进行流媒体编程的基本思路和方法,采用案例为主的叙述方式,将大量的技术理论融入具体的案例剖析中。采用的案例均来源于作者实际开发工作,具有很好的实用价值,可以帮助读者在开发中进行参考或直接应用。 第1篇 开发基础 1 第1章 数字音视频开发技术基础 3 1.1 数字音视频基本概念 4 1.1.1 数字音频技术基础 4 1.1.2 各种数字音频文件格式基础 4 1.1.3 视频的相关基础概念 8 1.1.4 常见的视频文件格式 8 1.2 数字音视频数据的编解码技术 10 1.2.1 音频数据的编解码 11 1.2.2 视频数据的编解码 13 1.2.3 音视频编码的相关标准 13 1.3 音视频处理平台的选择 15 1.3.1 个人多媒体计算机 15 1.3.2 嵌入式处理器ARM 16 1.3.3 数字媒体处理器DSP 16 1.4 音视频开发的典型应用 16 1.4.1 个人消费类电子产品 16 1.4.2 公共领域的音视频应用 18 1.5 常用音视频开发工具 21 1.5.1 DirectSound音频开发 21 1.5.2 DirectShow视频开发 21 1.5.3 DSP CCS算法开发 22 1.6 本章小结 23 第2章 Visual C++ 2005开发基础 25 2.1 Visual C++ 2005新增特性 26 2.1.1 句柄(Handles) 26 2.1.2 类型的声明 26 2.1.3 对代码编辑的改进 27 2.2 VC能做的事情 27 2.2.1 生成传统的控制台应用程序 27 2.2.2 生成基于MFC的应用程序 32 2.2.3 生成静态链接库 40 2.2.4 生成动态链接库 41 2.3 利用向导完成基本开发 46 2.3.1 生成应用程序 46 2.3.2 生成应用库LIB/DLL 53 2.4 MFC编程基础 56 2.4.1 Windows消息与事件 56 2.4.2 消息与事件的响应 63 2.4.3 常用消息 66 2.5 基于对话框的编程 68 2.5.1 创建和编辑对话框 68 2.5.2 对话框种类 75 2.6 常用控件使用技巧 79 2.6.1 按钮类控件的使用 80 2.6.2 文本可编辑类控件的使用 81 2.6.3 静态类控件的使用 82 2.6.4 其他控件 83 2.7 Visual 2005开发技术资源 84 2.7.1 MSDN在线帮助 84 2.7.2 丰富的网络资源 86 2.8 Visual 2005开发的常见问题 86 2.8.1 如何使用volatile和const_cast 86 2.8.2 如何构造unicode版本的程序 87 2.8.3 如何使用.def文件 87 2.8.4 如何正确编写Win32 DLL 87 2.8.5 如何编写和使用资源DLL 88 2.8.6 如何实现对话框的数据交换 88 2.9 本章小结 89 第2篇 音频开发 91 第3章 DirectSound开发基础 93 3.1 Microsoft DirectSound SDK 94 3.1.1 比较DirectSound与DirectMusic 94 3.1.2 DirectSound SDK能做什么 95 3.1.3 如何获取DirectSound SDK 96 3.1.4 DirectSound SDK的基本结构 98 3.1.5 Directsound SDK安装 100 3.1.6 选择最适合用户的DirectSound SDK 100 3.1.7 用DirectSound进行编程的必要步骤 102 3.2 DirectSound的详细使用方法 103 3.2.1 DirectSound设备对象 104 3.2.2 DirectSound缓冲区对象 107 3.2.3 使用WAV数据 114 3.2.4 使用音效 116 3.3 开发环境配置 118 3.3.1 Visual C++基本开发环境配置 119 3.3.2 DirectSound应用程序的开发环境配置 119 3.3.3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值