3GP文件格式分析

 
现在很多智能手机都支持多媒体功能,特别是音频和视频播放功能,而3GP文件格式是手机端普遍支持的视频文件格式。
 
目前很多手机都支持h263视频编码格式的视频文件播放,还有些手机支持h264。音频文件格式普遍支持amr,有些手机还支持AAC音频格式。
 
鉴于凤凰卫视节目主要以新闻类为主,音频压缩采用AMR标准,视频压缩采用H263和H264标准。
 
编号
文件名
文件长度
时长
1
news_h263.3gp
1.38MB
01:21.90
2
zbc1217_h263.3gp
1.92MB
02:37.98
3
zbc1217_h264.3gp
2.44MB
02:37.98
 
 
 
 

2. 3GP文件结构分析示例
AtomicParsley是一个开源的多媒体文件结构分析器。
下面是用该程序分析的两个3GP文件结构:
news_h263.3gp
Atom ftyp @ 0 of size: 28, ends @ 28
Atom mdat @ 28 of size: 65, ends @ 93
Atom mdat @ 93 of size: 130856, ends @ 130949
Atom mdat @ 130949 of size: 1312119, ends @ 1443068
Atom moov @ 1443068 of size: 7136, ends @ 1450204
     Atom mvhd @ 1443076 of size: 108, ends @ 1443184
     Atom trak @ 1443184 of size: 1546, ends @ 1444730
         Atom tkhd @ 1443192 of size: 92, ends @ 1443284
         Atom udta @ 1443284 of size: 48, ends @ 1443332
             Atom uuid=484d496e-6354-7261-636b-496e666f2020 @ 1443292 of size: 40, ends @ 1443332
         Atom mdia @ 1443332 of size: 1398, ends @ 1444730
             Atom mdhd @ 1443340 of size: 32, ends @ 1443372
             Atom hdlr @ 1443372 of size: 37, ends @ 1443409
             Atom minf @ 1443409 of size: 1321, ends @ 1444730
                 Atom smhd @ 1443417 of size: 16, ends @ 1443433
                 Atom dinf @ 1443433 of size: 36, ends @ 1443469
                     Atom dref @ 1443441 of size: 28, ends @ 1443469
                 Atom stbl @ 1443469 of size: 1261, ends @ 1444730
                     Atom stts @ 1443477 of size: 24, ends @ 1443501
                     Atom stsd @ 1443501 of size: 69, ends @ 1443570
                         Atom samr @ 1443517 of size: 53, ends @ 1443570
                             Atom damr @ 1443553 of size: 17, ends @ 1443570
                     Atom stsz @ 1443570 of size: 1112, ends @ 1444682
                     Atom stsc @ 1444682 of size: 28, ends @ 1444710
                     Atom stco @ 1444710 of size: 20, ends @ 1444730
     Atom trak @ 1444730 of size: 5474, ends @ 1450204
         Atom tkhd @ 1444738 of size: 92, ends @ 1444830
         Atom tref @ 1444830 of size: 20, ends @ 1444850
             Atom sync @ 1444838 of size: 12, ends @ 1444850
         Atom udta @ 1444850 of size: 48, ends @ 1444898
             Atom uuid=484d496e-6354-7261-636b-496e666f2020 @ 1444858 of size: 40, ends @ 1444898
         Atom mdia @ 1444898 of size: 5306, ends @ 1450204
             Atom mdhd @ 1444906 of size: 32, ends @ 1444938
             Atom hdlr @ 1444938 of size: 37, ends @ 1444975
             Atom minf @ 1444975 of size: 5229, ends @ 1450204
                 Atom vmhd @ 1444983 of size: 20, ends @ 1445003
                 Atom dinf @ 1445003 of size: 36, ends @ 1445039
                     Atom dref @ 1445011 of size: 28, ends @ 1445039
                 Atom stbl @ 1445039 of size: 5165, ends @ 1450204
                     Atom stts @ 1445047 of size: 24, ends @ 1445071
                     Atom stsd @ 1445071 of size: 117, ends @ 1445188
                         Atom s263 @ 1445087 of size: 101, ends @ 1445188
                             Atom d263 @ 1445173 of size: 15, ends @ 1445188
                     Atom stsz @ 1445188 of size: 4920, ends @ 1450108
                     Atom stss @ 1450108 of size: 48, ends @ 1450156
                     Atom stsc @ 1450156 of size: 28, ends @ 1450184
                     Atom stco @ 1450184 of size: 20, ends @ 1450204
------------------------------------------------------
Total size: 1450204 bytes; 46 atoms total. AtomicParsley version: 0.9.0 (utf16)
Media data: 1442975 bytes; 7229 bytes all other atoms (0.498% atom overhead).
Total free atom space: 0 bytes; 0.000% waste.
------------------------------------------------------
Movie duration: 81.900 seconds (01:21.90) - 140.95* kbp/sec bitrate (*=approximate)
Low-level details. Total tracks: 2
Trk Type Handler                    Kind Lang Bytes
1    soun soun                       samr eng   130848   Encoder: NXTR
     12.78* kbp/s 81.900 sec AMR Narrow-Band. Modes: 0, 1, 2, 3, 4, 5, 6, 7, 8. Encoder vendor code: NXTR
2    vide vide                       s263 eng   1312111   Encoder: NXTR
     128.41* kbp/s 81.748 sec H.263 Baseline Profile, Level 10. Encoder vendor code: NXTR
 

   该3GP文件结构如下:

 

zbc1217_h263.3gp
Atom ftyp @ 0 of size: 24, ends @ 24
Atom mdat @ 24 of size: 1989236, ends @ 1989260
Atom moov @ 1989260 of size: 14951, ends @ 2004211
     Atom mvhd @ 1989268 of size: 108, ends @ 1989376
     Atom iods @ 1989376 of size: 33, ends @ 1989409
     Atom udta @ 1989409 of size: 1069, ends @ 1990478
         Atom rtng [eng] @ 1989417 of size: 29, ends @ 1989446
         Atom uuid=f78caa0c-36be-4ce9-88d2-03c256dabeb2 @ 1989446 of size: 1032, ends @ 1990478
     Atom trak @ 1990478 of size: 9978, ends @ 2000456
         Atom tkhd @ 1990486 of size: 92, ends @ 1990578
         Atom mdia @ 1990578 of size: 9842, ends @ 2000420
             Atom mdhd @ 1990586 of size: 32, ends @ 1990618
             Atom hdlr @ 1990618 of size: 33, ends @ 1990651
             Atom minf @ 1990651 of size: 9769, ends @ 2000420
                 Atom vmhd @ 1990659 of size: 20, ends @ 1990679
                 Atom dinf @ 1990679 of size: 36, ends @ 1990715
                     Atom dref @ 1990687 of size: 28, ends @ 1990715
                 Atom stbl @ 1990715 of size: 9705, ends @ 2000420
                     Atom stsd @ 1990723 of size: 117, ends @ 1990840
                         Atom s263 @ 1990739 of size: 101, ends @ 1990840
                             Atom d263 @ 1990825 of size: 15, ends @ 1990840
                     Atom stts @ 1990840 of size: 32, ends @ 1990872
                     Atom stsc @ 1990872 of size: 1900, ends @ 1992772
                     Atom stsz @ 1992772 of size: 6300, ends @ 1999072
                     Atom stco @ 1999072 of size: 644, ends @ 1999716
                     Atom stss @ 1999716 of size: 704, ends @ 2000420
         Atom udta @ 2000420 of size: 36, ends @ 2000456
             Atom uuid=f78caa0c-36be-4ce9-87d2-03c256dabeb2 @ 2000428 of size: 28, ends @ 2000456
     Atom trak @ 2000456 of size: 2934, ends @ 2003390
         Atom tkhd @ 2000464 of size: 92, ends @ 2000556
         Atom mdia @ 2000556 of size: 2798, ends @ 2003354
             Atom mdhd @ 2000564 of size: 32, ends @ 2000596
             Atom hdlr @ 2000596 of size: 33, ends @ 2000629
             Atom minf @ 2000629 of size: 2725, ends @ 2003354
                 Atom smhd @ 2000637 of size: 16, ends @ 2000653
                 Atom dinf @ 2000653 of size: 36, ends @ 2000689
                     Atom dref @ 2000661 of size: 28, ends @ 2000689
                 Atom stbl @ 2000689 of size: 2665, ends @ 2003354
                     Atom stsd @ 2000697 of size: 69, ends @ 2000766
                         Atom samr @ 2000713 of size: 53, ends @ 2000766
                             Atom damr @ 2000749 of size: 17, ends @ 2000766
                     Atom stts @ 2000766 of size: 24, ends @ 2000790
                     Atom stsc @ 2000790 of size: 1900, ends @ 2002690
                     Atom stsz @ 2002690 of size: 20, ends @ 2002710
                     Atom stco @ 2002710 of size: 644, ends @ 2003354
         Atom udta @ 2003354 of size: 36, ends @ 2003390
             Atom uuid=f78caa0c-36be-4ce9-87d2-03c256dabeb2 @ 2003362 of size: 28, ends @ 2003390
     Atom trak @ 2003390 of size: 420, ends @ 2003810
         Atom tkhd @ 2003398 of size: 92, ends @ 2003490
         Atom mdia @ 2003490 of size: 296, ends @ 2003786
             Atom mdhd @ 2003498 of size: 32, ends @ 2003530
             Atom hdlr @ 2003530 of size: 33, ends @ 2003563
             Atom minf @ 2003563 of size: 223, ends @ 2003786
                 Atom nmhd @ 2003571 of size: 12, ends @ 2003583
                 Atom dinf @ 2003583 of size: 36, ends @ 2003619
                     Atom dref @ 2003591 of size: 28, ends @ 2003619
                 Atom stbl @ 2003619 of size: 167, ends @ 2003786
                     Atom stsd @ 2003627 of size: 67, ends @ 2003694
                         Atom mp4s @ 2003643 of size: 51, ends @ 2003694
                             Atom esds @ 2003659 of size: 35, ends @ 2003694
                     Atom stts @ 2003694 of size: 24, ends @ 2003718
                     Atom stsc @ 2003718 of size: 28, ends @ 2003746
                     Atom stsz @ 2003746 of size: 20, ends @ 2003766
                     Atom stco @ 2003766 of size: 20, ends @ 2003786
         Atom tref @ 2003786 of size: 24, ends @ 2003810
             Atom mpod @ 2003794 of size: 16, ends @ 2003810
     Atom trak @ 2003810 of size: 401, ends @ 2004211
         Atom tkhd @ 2003818 of size: 92, ends @ 2003910
         Atom mdia @ 2003910 of size: 301, ends @ 2004211
             Atom mdhd @ 2003918 of size: 32, ends @ 2003950
             Atom hdlr @ 2003950 of size: 33, ends @ 2003983
             Atom minf @ 2003983 of size: 228, ends @ 2004211
                 Atom nmhd @ 2003991 of size: 12, ends @ 2004003
                 Atom dinf @ 2004003 of size: 36, ends @ 2004039
                     Atom dref @ 2004011 of size: 28, ends @ 2004039
                 Atom stbl @ 2004039 of size: 172, ends @ 2004211
                     Atom stsd @ 2004047 of size: 72, ends @ 2004119
                         Atom mp4s @ 2004063 of size: 56, ends @ 2004119
                             Atom esds @ 2004079 of size: 40, ends @ 2004119
                     Atom stts @ 2004119 of size: 24, ends @ 2004143
                     Atom stsc @ 2004143 of size: 28, ends @ 2004171
                     Atom stsz @ 2004171 of size: 20, ends @ 2004191
                     Atom stco @ 2004191 of size: 20, ends @ 2004211
------------------------------------------------------
Total size: 2004211 bytes; 82 atoms total. AtomicParsley version: 0.9.0 (utf16)
Media data: 1989236 bytes; 14975 bytes all other atoms (0.747% atom overhead).
Total free atom space: 0 bytes; 0.000% waste.
------------------------------------------------------
Movie duration: 156.980 seconds (02:36.98) - 101.38* kbp/sec bitrate (*=approximate)
Low-level details. Total tracks: 4
Trk Type Handler                    Kind Lang Bytes
1    vide [none listed]              s263 und   1738018   Encoder: ViVi
     88.58* kbp/s 156.960 sec H.263 Baseline Profile, Level 20. Encoder vendor code: ViVi
2    soun [none listed]              samr und   251168   Encoder: ViVi
     12.80* kbp/s 156.980 sec AMR Narrow-Band. Modes: 7. Encoder vendor code: ViVi
3    odsm [none listed]              mp4s und   18
4    sdsm [none listed]              mp4s und   24
 
该3GP文件结构如下:
    
其实3GP文件就是一个对象(box)容器,对象还允许包含子对象。
 
对象格式如下:
struct
{
UINT32           size;       // 对象大小
char                      type;      // 对象类型
void*              data;      // 对象数据(属性),大小为(size-8)
};

 

ISO base media file format 》说明不同 box 对象的结构定义细节。

 

 

3. 3GP文件对象实例分析
l         ftype
File Type(该对象仅有一个)
记录该文件使用的规范和版本等信息。
 
 
属性
大小
说明
size
4
0x0000001c = 28
 
ftyp
4
ftyp
 
major_brand
4
3gp4
主类型
minor_version
4
 
最小版本号
compatible_brands[]
string
3gp4 | 3gp5 | 3g2a
兼容类型
 
 
l         mdat
Media Data
mdat 存放媒体数据( media data )。一般包括文字、音频和视频等。这些 mdat 的顺序不固定。
 
当前 mdat 对象包含的是纯文字。
 
 
大小
其他说明
size
4
0x00000041 = 65
 
mdat
4
 
 
 
string
 
 
这个 box 可以忽略。
 
 
l         mdat
音频 数据块
 
 
 
大小
其他说明
size
4
0x0001FF28 = 130856
 
mdat
4
 
 
 
32*N
3C 打头
每个音频帧 32 字节
 
amr 音频数据以 32 字节一帧,每帧 20 毫秒。所以根据 amr 数据包大小就能估算出语音的时间长度。
( 130856 – 8) / 32 = 4089 * 20 = 81780 ms = 817.80 = 01:21.90
这个时间与播放器上显示的时间基本相同。
注意: 这里真实的视频数据起始位置为 0x000005D
在音频 trak 里面的 stso 对象里面的 chunk_offset 记录的就是这个值。
 
RFC3267 中有如下描述:
The sampling frequency used in AMR is 8000 Hz and the speech encoding is
performed on 20 ms speech frames. Therefore, each encoded AMR speech
frame represents 160 samples of the original speech.
 
AMR 语音采样频率为 8Khz ,每帧对应 20ms
 
l         mdat
视频 数据块
 
 
 
大小
其他说明
size
4
0x004946F1 = 4802289
 
mdat
4
 
 
 
4
 
H263 视频数据
实际视频数据大小: 4802289 – 8 = 4802281
 
H263 协议中文版》第 8 5.1 图象层中描述:
每帧图象的数据包含一个图象头,并紧跟着块组数据,最后是一个 end-of-sequence 码和填塞位。
图象开始码 (PSC) (22 bits)
PSC 是一个 22 比特的字。它的值是 0000 0000 0000 0000 1000 00 00 00 80 00 …z
时域参考 (TR) (8 bits)  00 -00 0000 00-
类型信息 (PTYPE) (13 bits)  00-10 0000 1000 000-0
6-8 010 表示图像为 QCIF
9 :图象编码类型, “0” INTRA (I-picture) “1” INTER (P-picture) 。关键帧标志位, 0 :关键帧, 1 p 帧。
 
l         moov
Movie Box
该对象保留了 3GP 视频的 metadata ,即该 3GP 的全部描述信息。
这个对象一般在文件开始或者末尾。
下面详细分析 moov 的各个子对象。
 
l         mvhd
Movie Head Box
 
 
大小
其他说明
size
4
0x0000006C = 108
 
mvhd
4
 
 
version
1
0
 
flag
3
0
 
creation_time
4
 
 
modification_time
4
 
 
timescale
4
0x000003E8 = 1000
时间缩放因子
duration
4
0x00013FEC = 81900 = 81.9s
持续时间
rate
4
0x00010000 1.0 (即全速播放)
播放比率
volume
2
0x0100 1.0 (音量)
音量
reserved
 
 
保留
reserved
 
 
保留
matrix
 
 
视频转换矩阵
pre_defined
 
 
预定义 ( 0)
next_track_ID
4
0x000000CA = 202
下一个 track_id
 
trak ( 音频 )
Track Box
 
l         tkhd
Track Header Box
定义了该 track 的属性。
 
 
大小
其他说明
size
4
0x0000005C = 92
 
tkhd
4
 
 
version
1
0
 
flag
3
1
 
creation_time
4
 
 
modification_time
4
 
 
track_id
4
0x00000065 = 101
 
reserved
4
0
 
duration
4
0x00013FEC = 81900 = 81.9s
音频播放时间
reserved
8
 
 
layer
2
 
 
alternate_group
2
 
 
volume
2
0x0100
如果 track 是音频则为 0x0100 ,视频则为 0x0000
reserved
2
0
 
matrix
4 * 9
 
视频转换矩阵
width
4
0
音频的 w h 0
height
4
0
 
 
注意:如果 track 是音频 volume 则为 0x0100 ,视频 volume 则为 0x0000
 
 
l         mdhd
Media Header Box
 
 
大小
其他说明
size
4
32
 
mdhd
4
 
 
version
1
 
 
flag
3
 
 
creation_time
4
 
 
modification_time
4
 
 
timescale
4
0x00001F40 = 8000
时间缩放因子
duration
4
0x0009FF60 = 655200/8000=81.9
音频播放时长
pad
1bit
 
 
language
15bit
0x15c7 ISO-639-2/T language code
 
pre_defined
2
 
 
 
l         hdlr
Handler Reference Box
 
 
大小
其他说明
size
4
0x00000025 = 37
 
hdlr
4
 
 
version
1
 
 
flag
3
 
 
pre_defined
4
0
 
handler_type
4
soun
vide Video  track
soun Audio  track
reserved
4 * 3
0
 
handler_type
string
4+1
soun
’/0’ 结束
 
l         stbl
Sample Table Box
 
 
l         stts
Decoding Time to Sample Box
 
 
大小
其他说明
size
4
0x00000018 = 24
 
stts
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
sample_count
4
0x00000111 = 273
 
sample_delta
4
0x00000960 = 2400
 
 
 
 
 
 
说明:该 amr 音频数据里面有 273 sample ,每个 sample 的时间为 2400 ,而音频的时间因子为 8000 (见 5.2.3 .1 mdhd timescale ),所以每个 sample 的时长 = 2400 / 8000s = 0.3s
 
l         stsd
Sample Description Box
 
 
大小
其他说明
size
4
0x00000045 = 69
 
stsd
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
AudioSampleEntry
 
 
 
 
l         samr
amr 音频
 
size
4
0x35 = 53
 
samr
4
 
 
reserved
6
0
 
data_reference_index
2
0x0001
 
reserved
4 * 2
0
 
channelcount
2
0x0002 = 2
(1: 单声道 2: 双声道 )
samplesize
2
0x0010 = 16
 
pre_defined
2
0
 
reserved
2
0
 
samplerate
4
0x1F400000 = (14F0)<<16
0x1F40 = 8000
时间因子左移 16 位。
声音采样频率( hz
 
 
 
 
size
4
0x11 = 17
 
damr
4
 
 
NXTR ...
9
 
 
 
 
 
 
 
l         stsz
Sample Size Boxes
 
 
大小
其他说明
size
4
0x00000458 = 1112
 
stsz
4
 
 
version
1
 
 
flag
3
 
 
sample_size
4
0
 
sample_count
4
0x00000111 = 273
 
 
 
 
 
entry_size
4
0x000001E0 = 480
每个 sample 大小
 
4
0x000001E0 = 480
 
 
4
0x000001E0 = 480
 
 
 
...
 
 
说明:在( 5.2.3 .3.3.1 stts )中说明了有 1001 sample ,这里的 sample_count=1001 ,每个 sample 数据块的大小为 480 ,( 480 / 32 *20 = 15*20 = 0.3s
这里包含了每个 sample 的大小,都为 480 字节。
 
l         stsc
Sample To Chunk Box
 
大小
其他说明
size
4
0x0000001C = 28
 
stsc
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
first_chunk
4
1
 
samples_per_chunk
4
0X0111 = 273
 
sample_description_index
4
1
 
 
l         stco
Chunk Offset Box
 
大小
其他说明
size
4
0x00000014 = 20
 
stco
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
chunk_offset
4
0x65 = 101
 
 
 
trak ( 视频 )
Track Box
 
l         tkhd
Track Header Box
定义了该 track 的属性。
 
 
大小
其他说明
size
4
0x0000005C = 92
 
tkhd
4
 
 
version
1
0
 
flag
3
1
 
creation_time
4
 
 
modification_time
4
 
 
track_id
4
0x000000C9 = 201
 
reserved
4
0
 
duration
4
0x00013F54 = 81748 = 81.7s
视频播放时间
reserved
8
 
 
layer
2
 
 
alternate_group
2
 
 
volume
2
0x0000
如果 track 是音频则为 0x0100 ,视频则为 0x0000
reserved
2
0
 
matrix
4 * 9
 
视频转换矩阵
width
4
0x01400000<<16 = 0x0140=320
 
height
4
0x00F00000<<16 = 0x00F0=240
 
 
 
l         vmhd
Video Media Header Box
 
大小
其他说明
size
4
0x00000014 = 20
 
wmhd
4
 
 
version
1
 
 
flag
3
 
 
graphicsmode
2
0
 
opcolor
2 * 3
{0,0,0}
 
 
l          stts
Sync Sample Box
 
大小
其他说明
size
4
0x00000018 = 24
 
stts
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
sample_count
4
0x000004C9 = 1225
 
sample_delta
4
0x00001776 = 6006
 
 
说明:该 H263 视频数据里面有 1225 sample ,每个 sample 的时间为 6006 ,而视频的时间因子为 90000 (见 5.3.3 .1 mdhd timescale ),所以每个 sample 的时长 = 6006 / 90000s = 0.0667s
1225* 6006 / 90000 = 1225*6006 /90000 = 81.7s
 
l          stsd
Sample Description Box
 
大小
其他说明
size
4
0x00000075 = 117
 
stsd
4
stsd
 
version
1
0
 
flag
3
0
 
entry_count
4
1
 
VideoSampleEntry
 
 
 
 
 
 
 
 
 
l         S263
263 视频
size
4
0x65 = 101
 
s263
4
 
 
reserved
6
 
 
data_reference_index
2
0x0001
 
pre_defined
2
0
 
reserved
2
0
 
pre_defined
4 * 3
 
 
width
2
0xb0 = 176
视频宽度
height
2
0x90 = 144
视频高度
horizresolution
4
0x00480000; // 72 dpi
 
vert resolution
4
0x00480000; // 72 dpi
 
reserved
4
 
 
frame_count
2
1
 
compressorname
32
string[32]
0
depth
2
0x0018
 
pre_defined
2
-1
 
size
4
15
 
d263
4
 
 
NXTR ...
7
 
 
 
l         stsz
Sample Size Boxes
 
 
大小
其他说明
size
4
0x1338
 
stsz
4
 
 
version
1
 
 
flag
3
 
 
sample_size
4
0
 
sample_count
4
0x04C9 = 1225
 
 
 
 
 
entry_size
4
0x0000297 = 663
 
 
4
0x068C = 1676
 
 
4
0x028D = 653
 
 
 
...
 
说明:总共 1225 sample 即有 1225 帧, sample_count 后面紧跟的是每个视频帧的数据大小,可以看出每个帧的大小都不一样,这是因为视频帧的类型不同,有些帧是 I 帧,有些是 P 帧,有些是 B 帧。
 
MPEG 图像编码包含 3 个成分: I 帧, P 帧和 B 帧。 MPEG 编码过程中,一些图像压缩成 I 帧,一些压缩成 P 帧,另一些压缩成 B 帧。 I 帧压缩可以得到 6 1 的压缩比而不产生任何可觉察的模糊现象。 I 帧压缩的同时使用 P 帧压缩,可以达到更高的压缩比而无可觉察的模糊现象。 B 帧压缩可以达到 200 1 的压缩比,其文件尺寸一般为 I 帧压缩尺寸的 15% ,不到 P 帧压缩尺寸的一半。 I 帧压缩去掉图像的空间冗余度, P 帧和 B 帧去掉时间冗余度,下文将进一步解释。
 
I 压缩采用基准帧模式,只提供帧内压缩,即把帧图像压缩到 I 帧时,仅仅考虑了帧内的图像。 I 帧压缩不能除去帧间冗余度。帧内压缩基于离散余弦变换( DCT ),类似于 JPEG H.261 图像中使用 DCT 的压缩标准。
 
P 采用预测编码,利用相邻帧的一般统计信息进行预测。也就是说,它考虑运动特性,提供帧间编码。 P 帧预测当前帧与前面最近的 I 帧或 P 帧的差别。
 
B 为双向帧间编码。它从前面和后面的 I 帧或 P 帧中提取数据。 B 帧基于当前帧与前一帧和后一帧图像之间的差别进行压缩。
 
MEPG 数据流开始时对 CCIR-601 规定的 SIF 分辨率的未压缩数字图像进行抽样。 SIF 分辨率,对于 NTSC 制,就是亮度信号为 352 240 各像素,每个色度信号都为 176 120 个象素。各信号都是每秒 30 帧。 MPEG 压缩器决定了当前帧以 I 帧, P 帧还是 B 帧。帧确定之后就采用 DCT 变换,对结果进行量化,舍入,行程编码即变长编码。编码后的典型图像帧序为: IBBPBBPBBPBBIBBPBBPBBPBBI
 
B 帧和 P 帧要求计算机有更强的功能。有些压缩器不能产生 B 帧或者连 P 帧也不能产生,则图像的压缩结果将有很明显的间断。
 
H263 采用了与 MPEG 相似的技术。
l         stco
Chunk Offset Box
 
 
大小
其他说明
size
4
0x00000014 = 20
 
stco
4
 
 
version
1
 
 
flag
3
 
 
entry_count
4
1
 
chunk_offset
4
0x0001FF8D
 
说明: chunk_offset 定义的是视频数据的起始位置。
  • 2
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
AMR在IP域中的编码(rfc3267,4867) 缩写解释 SID Silence Descriptor (Comfort Noise Frame) 1 AMR编码介绍 AMR编码是一种自适应多速率编码,根据传输信道的实际情况,调整编码模式、速率和纠错码位数来保证语音质量,在数据压缩和容错上面取得平衡。一般语音质量越高抗干扰能力越弱。在GSM网络,基站、基站控制器可根据网络质量和信号质量情况动态调整语音编码模式以提高不同网络状况下的语音质量。现在手机终端基本上都支持AMR编码,Nokia从2004年开始提供支持AMR的终端,目前所有的新型号终端都支持AMR。 AMR在IP域中的编码(rfc3267,4867) AMR算法 参考文档 (1) 3GPP TS26.190, AMR Wideband speech codec; Transcoding functions(Release 5). (2) 3GPP TS 26.194, Voice Activity Detection (VAD). (3) 3GPP TS 26.174, AMR wideband speech codec; Test sequences. (4) 3GPP TS 26.194, Frame Structure. 2 AMR在IP域中的净荷格式 RFC3267/4867协议描述AMR编码在RTP中的载荷格式,是其在IP域的存在形式。 对于每个RTP会话,AMR净荷有两种模式,分别为节省带宽模式和字节对齐模式,具体采用那种模式,由信令协商决定;采用后一模式可以后可以引入鲁棒排序、帧交叉编码和CRC校验等方式提高语音传输的质量。 以下三种场景分别为1IP域的终端进行会话、2非IP域终端通过网关和3IP域终端会话以及非IP域终端之间的通信场景,各个场景的特点见协议描述。 AMR和AMR-WB净荷格式 二者格式区别,a.帧类型;b.前者的采样频率为8KHZ,后者为16KH;c.模式不一样 净荷结构如下,包括净荷头,内容表和语音数据: +----------------+-------------------+---------------- | payload header | table of contents | speech data ... +----------------+-------------------+---------------- Payloads containing more than one speech frame-block are called compound payloads. 节省带宽模式Bandwidth-Efficient Mode a. 净荷头格式: 0 1 2 3 +-+-+-+-+ | CMR | +-+-+-+-+ CMR(codec mode request)编码模式请求,由发送者向接受者的请求发送者编码器将来的编码速率模式,保存帧类型索引,如果是AMR,取值范围为0-7,表示8种速率模式,如果为AMR-WB,取值范围为0-8,表示9种速率。取值15意味着当前是没有指定哪个模式的请求。 模式选定后,由于采样频率恒定,具体包的打包时长还是不变,不同速率只是净荷长度不一样,例如对于AMR模式0,其速率是4.75Kbit/s,净荷中包含的语音数据为95bits。 AMR的8种速率索引表,见[1] AMR在IP域中的编码(rfc3267,4867) AMR-WB的9种速率索引表,见[2] AMR在IP域中的编码(rfc3267,4867) b. 净荷内容表ToC(table of contents),第一项表示一个语音帧 0 1 2 3 4 5 +-+-+-+-+-+-+ |F| FT |Q| +-+-+-+-+-+-+ F:用于标志是否最后一个帧,0表示最后1帧.如果是多帧复用才有Toc才会有多项,否则只有1项。 FT:标志对音帧语音编码模式或舒适噪志的模式,取值范围同CMR取值,FT=14 (SPEECH_LOST, only available for AMR-WB) and FT=15 (NO_DATA),FT=15表示没有当前帧没有净荷;取值10-13该帧要丢弃。 Q:指示帧质量,为0表示对应帧被破坏,1表示未被破坏;如果该帧已被破坏,那么可以通过直接丢弃该帧来处理。 净荷内容表就是对帧内容的数据格式说明, c. 语音数据speech data 语音数据即为真正的语音帧或舒适噪声帧的数据,每帧数据的描述和ToC每一项对应起来,数据长度取决于对应模式ToC项中的FT标识的模式。 示例: 单通道单帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=15|0| FT=4 |1|d(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | d(147)|P|P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 单通道多帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=1 |1| FT=0 |1|1| FT=9 |1|1| FT=15 |1|0| FT=1 |1|d(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | d(131)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |g(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | g(39)|h(0) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | h(176)|P|P|P|P|P|P|P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 多通道多帧,见协议 字节对齐模式Octet-aligned Mode a. 净荷头格式 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 +-+-+-+-+-+-+-+-+- - - - - - - - | CMR |R|R|R|R| ILL | ILP | +-+-+-+-+-+-+-+-+- - - - - - - - CMR:同上; R:保留位,区分节省带宽模式,这些保留位作用之一就是字节对齐; ILL:可选,指示交错长度(取值为L,交错长度即为L+1); ILP:可选,交错块的索引,取值范围为0到ILL,超过这个范围,该帧块应被丢弃。 b. ToC +---------------------+ | list of ToC entries | +---------------------+ | list of frame CRCs | (optional) - - - - - - - - - - - Note, for ToC entries with FT=14 or 15, there will be no corresponding speech frame or frame CRC present in the payload. 组成同节省带宽模式 ToC项:在该模式下,6位ToC也需要2位补齐。 CRC:CRC校验位可选,如果带外信令协商需要校验,则每项对应每个语音数据进行8位长度的校验。 语音数据 同节省带宽模式,只是要求每帧必须补0对齐;对于多帧的净荷,可以和节省模式一样,一帧顺序排,也可以所有帧以字节为单位交错排序,尽量把各个帧错误敏感位排前面。 示例: 单通道多帧 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | CMR=6 |R|R|R|R|1|FT#1=5 |Q|P|P|0|FT#2=5 |Q|P|P| f1(0..7) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | f1(8..15) | f1(16..23) | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : ... : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... |f1(152..158) |P| f2(0..7) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | f2(8..15) | f2(16..23) | .... | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ : ... : +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ... |f2(152..158) |P| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 多通道 3 AMR语音帧结构 AMR和AMR-WB的语音数据结构分别详见TS 26.101,26.201描述,这里介绍AMR-NB的语音数据编码结构。 语音数据位根据重要性分成类,A、B、C类,其对错误的敏感性和重要性依次为A>B>C,如下,4.75Kb模式的总的位数为95位,A类42位,B类53位。 AMR在IP域中的编码(rfc3267,4867) AMR净荷数据把重要的数据位放在前面,不重要的放在后面,为了把语音数据中重要的数据位放置A类,需要对编码器编出的比特位进行重排序,26.101把编码后数据位的位置和重排序的位置对应起来形成一张表供查询, - for j = 0 to K-1 //第0位到第K-1位全部重排 - d(j) := s(tablem(j)+1); //查对应模式的表找到重排后相应位置 例如下表6.7kb模式的排序表,共134位,第82位数据位排序后对应18位 AMR在IP域中的编码(rfc3267,4867) 上节节省带宽模式和字节对齐模式,d(i)均是排序后的数据。 下图示例相比上一节还加了8位CRC校验码。 4 AMR NB/WB信令协商参数 AMR常用如下 octet-align,是节省带宽模式还是字节对节模式,一般取值为1表示字节对齐,为0或不带默认表示为节省带宽模式; mode-set,一旦请求带了模式集,之后AMR媒体流只选择属于这个模式集的模式来发送; mode-change-period,模式改变周期; maxptime,最大支持的打包时长(ms); crc,净荷是否进行CRC校验,一般为1表示需要,媒体流会携带校验位; robust-sorting,是否进行鲁棒排序; interleaving,定义交错帧块数; ptime,指包时长; channels,音频通道数,例如采用左右通道数值则为2; AMR-WB常用参数同上 4 多帧复用 为了降低带宽,减少网络传输的RTP包数,把多帧的数据打包在1个RTP包里面进行传输。净荷里面用ToC表来管理多帧数据,说明模式等内容,这样也可根据网络状况灵活改变多帧的速率,例如,多帧中每个帧的速率不一定要一样。 采用多帧复用要注意关注RTP包的大小、时戳是否正确。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值