1.?????概述
現在很多智能手機都支持多媒體功能,特別是音頻和視頻播放功能,而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
{
UINT32size;?????? //對象大小
chartype;????? //對象類型
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 000000-
類型信息 (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 | |
vertresolution | 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定義的是視頻數據的起始位置。