日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转 3GP文件格式分析

發(fā)布時間:2024/1/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转 3GP文件格式分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://blog.csdn.net/rootcn/archive/2005/01/21/263226.aspx ?

1.????? 概述現(xiàn)在很多智能手機(jī)都支持多媒體功能,特別是音頻和視頻播放功能,而3GP文件格式是手機(jī)端普遍支持的視頻文件格式。 ? 目前很多手機(jī)都支持h263視頻編碼格式的視頻文件播放,還有些手機(jī)支持h264。音頻文件格式普遍支持amr,有些手機(jī)還支持AAC音頻格式。 ? 鑒于鳳凰衛(wèi)視節(jié)目主要以新聞類為主,音頻壓縮采用AMR標(biāo)準(zhǔn),視頻壓縮采用H263和H264標(biāo)準(zhǔn)。 ? 編號 文件名 文件長度 時長 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文件結(jié)構(gòu)分析示例 AtomicParsley是一個開源的多媒體文件結(jié)構(gòu)分析器。下面是用該程序分析的兩個3GP文件結(jié)構(gòu): 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文件結(jié)構(gòu)如下: 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文件結(jié)構(gòu)如下: ??? 其實3GP文件就是一個對象(box)容器,對象還允許包含子對象。 ? 對象格式如下: struct { UINT32????????? size;?????? // 對象大小 char????????????? ?????? type;????? // 對象類型 void*???????????? data;????? // 對象數(shù)據(jù)(屬性),大小為(size-8)}; 《ISO base media file format》說明不同box對象的結(jié)構(gòu)定義細(xì)節(jié)。 ? 3. 3GP文件對象實例分析 l???????? ftype File Type(該對象僅有一個)記錄該文件使用的規(guī)范和版本等信息。 ? ? 屬性 大小 值 說明 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 存放媒體數(shù)據(jù)(media data)。一般包括文字、音頻和視頻等。這些mdat的順序不固定。 ? 當(dāng)前mdat對象包含的是純文字。 ? ? 大小 值 其他說明 size 4 0x00000041 = 65 ? mdat 4 ? ? ? string ? ? 這個box可以忽略。 ? ? l???????? mdat 音頻數(shù)據(jù)塊 ? ? ? 大小 值 其他說明 size 4 0x0001FF28 = 130856 ? mdat 4 ? ? ? 32*N 3C打頭 每個音頻幀32字節(jié) ? amr音頻數(shù)據(jù)以32字節(jié)一幀,每幀20毫秒。所以根據(jù)amr數(shù)據(jù)包大小就能估算出語音的時間長度。 (130856 – 8) / 32 = 4089 * 20 = 81780 ms = 817.80秒 = 01:21.90 這個時間與播放器上顯示的時間基本相同。注意:這里真實的視頻數(shù)據(jù)起始位置為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,每幀對應(yīng)20ms。 ? l???????? mdat 視頻數(shù)據(jù)塊 ? ? ? 大小 值 其他說明 size 4 0x004946F1 = 4802289 ? mdat 4 ? ? ? 4 ? H263視頻數(shù)據(jù)實際視頻數(shù)據(jù)大小:4802289 – 8 = 4802281 ? 《H263協(xié)議中文版》第8頁 5.1圖象層中描述:每幀圖象的數(shù)據(jù)包含一個圖象頭,并緊跟著塊組數(shù)據(jù),最后是一個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)。關(guān)鍵幀標(biāo)志位,0:關(guān)鍵幀,1:p幀。 ? l???????? moov Movie Box 該對象保留了3GP視頻的metadata,即該3GP的全部描述信息。這個對象一般在文件開始或者末尾。下面詳細(xì)分析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 持續(xù)時間 rate 4 0x00010000 1.0(即全速播放) 播放比率 volume 2 0x0100?1.0 (音量) 音量 reserved ? ? 保留 reserved ? ? 保留 matrix ? ? 視頻轉(zhuǎn)換矩陣 pre_defined ? ? 預(yù)定義(全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 ? 視頻轉(zhuǎn)換矩陣 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’結(jié)束 ? 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音頻數(shù)據(jù)里面有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數(shù)據(jù)塊的大小為480,(480 / 32)*20 = 15*20 = 0.3s。這里包含了每個sample的大小,都為480字節(jié)。 ? 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 ? 視頻轉(zhuǎn)換矩陣 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視頻數(shù)據(jù)里面有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后面緊跟的是每個視頻幀的數(shù)據(jù)大小,可以看出每個幀的大小都不一樣,這是因為視頻幀的類型不同,有些幀是I幀,有些是P幀,有些是B幀。 ? MPEG圖像編碼包含3個成分:I幀,P幀和B幀。MPEG編碼過程中,一些圖像壓縮成I幀,一些壓縮成P幀,另一些壓縮成B幀。I幀壓縮可以得到6;1的壓縮比而不產(chǎn)生任何可覺察的模糊現(xiàn)象。I幀壓縮的同時使用P幀壓縮,可以達(dá)到更高的壓縮比而無可覺察的模糊現(xiàn)象。B幀壓縮可以達(dá)到200:1的壓縮比,其文件尺寸一般為I幀壓縮尺寸的15%,不到P幀壓縮尺寸的一半。I幀壓縮去掉圖像的空間冗余度,P幀和B幀去掉時間冗余度,下文將進(jìn)一步解釋。 ? I幀壓縮采用基準(zhǔn)幀模式,只提供幀內(nèi)壓縮,即把幀圖像壓縮到I幀時,僅僅考慮了幀內(nèi)的圖像。I幀壓縮不能除去幀間冗余度。幀內(nèi)壓縮基于離散余弦變換(DCT),類似于JPEG和H.261圖像中使用DCT的壓縮標(biāo)準(zhǔn)。 ? P幀采用預(yù)測編碼,利用相鄰幀的一般統(tǒng)計信息進(jìn)行預(yù)測。也就是說,它考慮運(yùn)動特性,提供幀間編碼。P幀預(yù)測當(dāng)前幀與前面最近的I幀或P幀的差別。 ? B幀為雙向幀間編碼。它從前面和后面的I幀或P幀中提取數(shù)據(jù)。B幀基于當(dāng)前幀與前一幀和后一幀圖像之間的差別進(jìn)行壓縮。 ? MEPG數(shù)據(jù)流開始時對CCIR-601規(guī)定的SIF分辨率的未壓縮數(shù)字圖像進(jìn)行抽樣。SIF分辨率,對于NTSC制,就是亮度信號為352*240各像素,每個色度信號都為176*120個象素。各信號都是每秒30幀。MPEG壓縮器決定了當(dāng)前幀以I幀,P幀還是B幀。幀確定之后就采用DCT變換,對結(jié)果進(jìn)行量化,舍入,行程編碼即變長編碼。編碼后的典型圖像幀序為:IBBPBBPBBPBBIBBPBBPBBPBBI… ? B幀和P幀要求計算機(jī)有更強(qiáng)的功能。有些壓縮器不能產(chǎn)生B幀或者連P幀也不能產(chǎn)生,則圖像的壓縮結(jié)果將有很明顯的間斷。 ? H263采用了與MPEG相似的技術(shù)。 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定義的是視頻數(shù)據(jù)的起始位置。

總結(jié)

以上是生活随笔為你收集整理的转 3GP文件格式分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。