目录
一、AVI结构分析
打开一个你机器上的AVI文件,回答下述问题:
1.音频和视频的数据是如何放置的?交织放置or连续放置?
2.一个视频帧大约占用多少字节?一个音频数据块大约占用多少字节?
问题1
由上图可知:
AVI文件中音频和视频的数据是交织放置的的。
问题2
由上图可知:
音频数据块(01wb)大小总是为:01 A2 = 416字节;
视频数据块(00dc)大小可以为:2E 10 = 11792字节
或 48 71 = 18545字节
或 33 F1 = 13297字节
说明视频数据块大小是可变的。
二、WAV文件结构分析
1、WAV文件简介
WAV是最常见的声音文件格式之一,是微软公司专门为Windows开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真。但WAV文件有一个致命的缺点,就是它所占用的磁盘空间太大。它符合资源互换文件格式(RIFF)规范。
2、WAV文件结构
WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV一般由3个区块组成:RIFF chunk、Format chunk、Data chunk。另外,文件中还可能包含一些可选的区块,如:Fact chunk、Cue points chunk、Playlist chunk、Associated data list chunk等
(1)RIFF Chunk
名称 | 偏移 地址 |
字节数 | 端序 | 内容 | 说明 |
ID | 0x00 | 4Byte | 大端 | 'RIFF' (0x52494646) | 以'RIFF' 为标识 |
Size | 0x04 | 4Byte | 小端 | fileSize - 8 | Size是整个文件的长度减去ID 和Size的长度 |
Type | 0x08 | 4Byte | 大端 | 'WAVE'(0x57415645) | Type是WAVE表示后面需要两个子块:Format区块和Data 区块 |
- 大端:数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中。
- 小端:数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
(2)Format Chunk
名称 | 偏移地址 | 字节数 | 端序 | 内容 | 说明 |
ID | 0x00 | 4Byte | 大端 | 'fmt ' (0x666D7420) | 以'fmt '为标识 |
Size | 0x04 | 4Byte | 小端 | 16 | 表示该区块数据的长度(不包含ID和Size的长度) |
AudioFormat | 0x08 | 2Byte | 小端 | 音频格式 | 表示Data区块存储的音频数据的格式,PCM音频数据的值为1 |
NumChannels | 0x0A | 2Byte | 小端 | 声道数 | 表示音频数据的声道数,1:单声道,2:双声道 |
SampleRate | 0x0C | 4Byte | 小端 | 采样率 | 表示音频数据的采样率 |
ByteRate | 0x10 | 4Byte | 小端 | 每秒数据字节数 | 表示每秒数据字节数 = SampleRate * NumChannels * BitsPerSample / 8 |
BlockAlign | 0x14 | 2Byte | 小端 | 数据块对齐 | 表示每个采样所需的字节数 = NumChannels * BitsPerSample / 8 |
BitsPerSample | 0x16 | 2Byte | 小端 | 采样位数 |
表示每个采样存储的bit数,8:8bit,16:16bit,32:32bit |
(3)Data Chunk
名称 | 偏移 地址 |
字节数 | 端序 | 内容 | 说明 |
ID | 0x00 | 4Byte | 大端 | 'data' (0x64617461) | 以'data'为标识 |
Size | 0x04 | 4Byte | 小端 | N | Size表示音频数据的长度, N = ByteRate * seconds |
Data | 0x08 | NByte | 小端 | 音频数据 | Data音频数据 |
3、WAV文件实例分析
子块 | 名称 | 数据 | 说明 |
RIFF Chunk | ID | 52 49 46 46 | 标识符RIFF |
Size | CC 17 0D 01 | 文件总长度=010D17CC(17635276)+4+4 =17635284字节 |
|
Type | 57 41 56 45 | 标识符WAVE | |
Format Chunk | ID | 66 6D 74 20 | 标识符fmt |
Size | 10 00 00 00 | 该Format区块的大小为16+4+4=24字节 | |
AudioFormat | 01 00 | 音频格式为PCM | |
NumChannels | 02 00 | 双声道 | |
SampleRate | 44 AC 00 00 | 采样率=0000AC44=44100Hz | |
ByteRate | 10 B1 02 00 | 每秒数据字节数=0002B110=176400 | |
BlockAlign | 04 00 | 数据块对齐为’4‘ | |
BitsPerSample | 10 00 | 表示每个采样存储16bit | |
Data Chunk | ID | 64 61 74 61 | 标识符data |
Size | BC 16 0D 01 | data音频数据大小=010D16BC=17635004字节 |