MP4 FFmpeg movenc mvhd box 写入 解析

 

static int mov_write_mvhd_tag(AVIOContext *pb, MOVMuxContext *mov)
{
    int max_track_id = 1, i;
    int64_t max_track_len = 0;
    int version;

    for (i = 0; i < mov->nb_streams; i++) {
        if (mov->tracks[i].entry > 0 && mov->tracks[i].timescale) {
            int64_t max_track_len_temp = av_rescale_rnd(
                                                calc_pts_duration(mov, &mov->tracks[i]),
                                                MOV_TIMESCALE,
                                                mov->tracks[i].timescale,
                                                AV_ROUND_UP);
            if (max_track_len < max_track_len_temp)
                max_track_len = max_track_len_temp;
            if (max_track_id < mov->tracks[i].track_id)
                max_track_id = mov->tracks[i].track_id;
        }
    }
    /* If using delay_moov, make sure the output is the same as if no
     * samples had been written yet. */
    if (mov->flags & FF_MOV_FLAG_EMPTY_MOOV) {
        max_track_len = 0;
        max_track_id  = 1;
    }

    version = max_track_len < UINT32_MAX ? 0 : 1; //version 0 最大支持UINT32_MAX的视频长度,若是时长更长需要用64bit表示,设置为version 1
    avio_wb32(pb, version == 1 ? 120 : 108); /* size */

    ffio_wfourcc(pb, "mvhd");
    avio_w8(pb, version);
    avio_wb24(pb, 0); /* flags */
    if (version == 1) {
        avio_wb64(pb, mov->time);
        avio_wb64(pb, mov->time);
    } else {
        avio_wb32(pb, mov->time); /* creation time */
        avio_wb32(pb, mov->time); /* modification time */
    }
    avio_wb32(pb, MOV_TIMESCALE);
    (version == 1) ? avio_wb64(pb, max_track_len) : avio_wb32(pb, max_track_len); /* duration of longest track */

    avio_wb32(pb, 0x00010000); /* reserved (preferred rate) 1.0 = normal */
    avio_wb16(pb, 0x0100); /* reserved (preferred volume) 1.0 = normal */
    avio_wb16(pb, 0); /* reserved */
    avio_wb32(pb, 0); /* reserved */
    avio_wb32(pb, 0); /* reserved */

    /* Matrix structure */
    write_matrix(pb, 1, 0, 0, 1, 0, 0); //

    avio_wb32(pb, 0); /* reserved (preview time) */
    avio_wb32(pb, 0); /* reserved (preview duration) */
    avio_wb32(pb, 0); /* reserved (poster time) */
    avio_wb32(pb, 0); /* reserved (selection time) */
    avio_wb32(pb, 0); /* reserved (selection duration) */
    avio_wb32(pb, 0); /* reserved (current time) */
    avio_wb32(pb, max_track_id + 1); /* Next track id */
    return 0x6c;
}

主要写入如下值

    • 版本
    • 创建时间
    • 播放速度
    • 默认音量
    • write_matrix 写入视频变换矩阵,具体作用待分析。

分析4000+文件整理的box类型数量统计

find -name “*.mp4” |xargs -i mp4dump –format json {} |grep -i \”name\”| tee logs

sort logs | uniq -dc

0009224 “name”:”hdlr”,
0008511 “name”:”trak”,
0008511 “name”:”tkhd”,
0008511 “name”:”mdia”,
0008511 “name”:”mdhd”,
0008507 “name”:”url”,
0008507 “name”:”stsd”,
0008507 “name”:”stbl”,
0008507 “name”:”minf”,
0008507 “name”:”dref”,
0008507 “name”:”dinf”,
0008500 “name”:”stts”,
0008498 “name”:”stsc”,
0008490 “name”:”stsz”,
0008227 “name”:”stco”,
0006071 “name”:”ES_ID_Inc”,
0004713 “name”:”mdat”,
0004381 “name”:”stss”,
0004250 “name”:”vmhd”,
0004237 “name”:”ftyp”,
0004231 “name”:”mvhd”,
0004231 “name”:”moov”,
0004144 “name”:”elst”,
0004144 “name”:”edts”,
0004112 “name”:”smhd”,
0003798 “name”:”avcC”,
0003792 “name”:”avc1″,
0003235 “name”:”iods”,
0003235 “name”:”InitialObjectDescriptor”,
0002424 “name”:”ctts”,
0001969 “name”:”udta”,
0001646 “name”:”btrt”,
0001600 “name”:”ec-3″,
0001600 “name”:”dec3″,
0001463 “name”:”ddts”,
0001285 “name”:”.swr”,
0001024 “name”:”free”,
0000916 “name”:”esds”,
0000916 “name”:”ESDescriptor”,
0000916 “name”:”Descriptor:06″,
0000916 “name”:”DecoderConfig”,
0000880 “handler_name”:”soundhandler”
0000872 “handler_name”:”videohandler”
0000805 “name”:”mp4a”,
0000773 “handler_name”:”VideoHandler”
0000709 “handler_name”:”AudioTrack”
0000679 “name”:”trun”,
0000679 “name”:”traf”,
0000679 “name”:”tfhd”,
0000618 “name”:”meta”,
0000616 “name”:”ilst”,
0000613 “name”:”pasp”,
0000557 “name”:”….”,
0000556 “name”:”moof”,
0000556 “name”:”mfhd”,
0000465 “name”:”dtsc”,
0000464 “name”:”dtsh”,
0000409 “name”:”dtse”,
0000396 “name”:”hvcC”,
0000395 “name”:”data”,
0000376 “name”:”tfdt”,
0000347 “name”:”.too”,
0000247 “name”:”co64″,
0000223 “name”:”keys”,
0000221 “name”:”colr”,
0000216 “name”:”tref”,
0000174 “name”:”hev1″,
0000170 “name”:”hvc1″,
0000155 “name”:”sgpd”,
0000152 “name”:”sbgp”,
0000125 “name”:”dtsl”,
0000112 “name”:”.xyz”,
0000096 “name”:”rtp”,
0000096 “name”:”hnti”,
0000094 “name”:”sdtp”,
0000094 “handler_name”:””
0000080 “name”:”lyra”,
0000080 “name”:”dts+”,
0000080 “name”:”dac3″,
0000080 “name”:”ac-3″,
0000079 “name”:”nmhd”,
0000073 “name”:”name”,
0000073 “name”:”BE7ACFCB97A9-42E8-9C71-9994-91E3AFAC”,
0000072 “name”:”.TIM”,
0000070 “name”:”.TSZ”,
0000070 “name”:”.TSC”,
0000064 “name”:”tims”,
0000064 “name”:”sdp”,
0000064 “name”:”mp4s”,
0000064 “name”:”hmhd”,
0000064 “name”:”hint”,
0000064 “name”:”hinf”,
0000064 “handler_name”:”AppleHintMediaHandler”
0000064 “handler_name”:””
0000061 “name”:”dac4″,
0000061 “name”:”ac-4″,
0000060 “name”:”dvcC”,
0000056 “handler_name”:”AudioHandler”
0000051 “name”:”dvhe”,
0000050 “handler_name”:”GPACISOAudioHandler”
0000047 “name”:”mp4v”,
0000045 “name”:”fiel”,
0000045 “handler_name”:”GPACISOVideoHandler”
0000043 “name”:”dvvC”,
0000041 “name”:”gstd”,
0000041 “name”:”gsst”,
0000041 “name”:”gssd”,
0000041 “name”:”gspu”,
0000041 “name”:”gspm”,
0000041 “name”:”gshh”,
0000036 “name”:”trex”,
0000035 “name”:”mvex”,
0000034 “name”:”mehd”,
0000034 “handler_name”:”AppleVideoMediaHandler”
0000034 “handler_name”:”AppleSoundMediaHandler”
0000033 “name”:”sidx”,
0000032 “name”:”mpod”,
0000032 “name”:”dpnd”,
0000032 “handler_name”:”SoundHandler”
0000022 “handler_name”:”IsoMediaFileProducedbyGoogle,5-11-2011″
0000021 “handler_name”:”VideoHandle”
0000021 “handler_name”:”SoundHandle”
0000020 “handler_name”:”MainconceptMP4SoundMediaHandler”
0000019 “handler_name”:”default”
0000015 “name”:”mlpa”,
0000015 “name”:”loci”,
0000015 “handler_name”:”MainconceptMP4VideoMediaHandler”
0000014 “handler_name”:”ETIISOVideoMediaHandler”
0000014 “handler_name”:”ETIISOAudioMediaHandler”
0000013 “name”:”.cmt”,
0000012 “name”:”tx3g”,
0000011 “name”:”elng”,
0000011 “handler_name”:”aac@GPAC0.5.1-DEV-rev5114″
0000010 “handler_name”:”MainconceptVideoMediaHandler”
0000008 “name”:”av01″,
0000008 “name”:”6B6840F25F24-4FC5-BA39-A51B-CF0323F3″,
0000008 “name”:”55534D5421D2-4FCE-BB88-695C-FAC9C740″,
0000007 “name”:”hvcE”,
0000006 “name”:”samr”,
0000006 “name”:”avc3″,
0000006 “handler_name”:”SoundMediaHandler”
0000006 “handler_name”:”hevc:FMT=HEVC:fps=24@GPAC0.5.1-DEV-rev5114″
0000006 “handler_name”:”(C)2007GoogleInc.v08.13.2007.”
0000005 “name”:”.nam”,
0000005 “handler_name”:”hevc:FMT=HEVC@GPAC0.5.1-DEV-rev5114″
0000004 “name”:”sync”,
0000004 “handler_name”:”VideoMediaHandler”
0000004 “handler_name”:”AliasDataHandler”
0000003 “name”:”.day”,
0000003 “name”:”.ART”,
0000003 “name”:”444C42592D4D-4554-4144-4154-412D3030″,
0000003 “handler_name”:”aac@GPAC0.5.1-DEV-rev4674″
0000003 “handler_name”:”265@GPAC0.5.1-DEV-rev4674″
0000002 “name”:”xml”,
0000002 “name”:”twos”,
0000002 “name”:”tmcd”,
0000002 “name”:”titl”,
0000002 “name”:”…s”,
0000002 “name”:”rtmd”,
0000002 “name”:”.”p.”,
0000002 “name”:”mean”,
0000002 “name”:”gmhd”,
0000002 “name”:”.gen”,
0000002 “name”:”…F”,
0000002 “name”:”dscp”,
0000002 “name”:”desc”,
0000002 “name”:”cprt”,
0000002 “name”:”covr”,
0000002 “name”:”cdsc”,
0000002 “name”:”50524F4621D2-4FCE-BB88-695C-FAC9C740″,
0000002 “name”:”.-^.”,
0000002 “name”:”—-“,
0000002 “handler_name”:”Video”
0000002 “handler_name”:”soun”
0000002 “handler_name”:”ImportedwithGPAC0.4.6-DEV(internalrev.5)”
0000002 “handler_name”:””default””
0000002 “handler_name”:”Audio”

mp4 文件 stsz 解析

参考文档 ISO_IEC_14496-12_2015

8.7.3
8.7.3.1
Sample Size Boxes
Definition
Box Type: ‘stsz’, ‘stz2’
Container: Sample Table Box (‘stbl’)
Mandatory: Yes
Quantity: Exactly one variant must be present
This box contains the sample count and a table giving the size in bytes of each sample. This allows the
media data itself to be unframed. The total number of samples in the media is always indicated in the
sample count.
There are two variants of the sample size box. The first variant has a fixed size 32‐bit field for
representing the sample sizes; it permits defining a constant size for all samples in a track. The second
variant permits smaller size fields, to save space when the sizes are varying but small. One of these
boxes must be present; the first version is preferred for maximum compatibility.
NOTE A sample size of zero is not prohibited in general, but it must be valid and defined for the coding system, as
defined by the sample entry, that the sample belongs to.

 

aligned(8) class SampleSizeBox extends FullBox('stsz', version = 0, 0) {
    unsigned int(32) sample_size;
    unsigned int(32) sample_count;
    if (sample_size==0) {
        for (i=1; i <= sample_count; i++) {
            unsigned int(32) entry_size;
        }
    }
}

分析文件为:

0000ff_60s_1280x720

00000020: 00 00 00 08 66 72 65 65 00 00 ef d8 6d 64 61 74 ….free….mdat
00000030: 00 00 02 af 06 05 ff ff ab dc 45 e9 bd e6 d9 48 ……….E….H
00000040: b7 96 2c d8 20 d9 23 ee ef 78 32 36 34 20 2d 20 ..,. .#..x264 –
00000050: 63 6f 72 65 20 31 35 37 20 72 32 39 36 39 20 64 core 157 r2969 d
00000060: 34 30 39 39 64 64 20 2d 20 48 2e 32 36 34 2f 4d 4099dd – H.264/M
00000070: 50 45 47 2d 34 20 41 56 43 20 63 6f 64 65 63 20 PEG-4 AVC codec
00000080: 2d 20 43 6f 70 79 6c 65 66 74 20 32 30 30 33 2d – Copyleft 2003-
00000090: 32 30 31 39 20 2d 20 68 74 74 70 3a 2f 2f 77 77 2019 – http://ww
000000a0: 77 2e 76 69 64 65 6f 6c 61 6e 2e 6f 72 67 2f 78 w.videolan.org/x
000000b0: 32 36 34 2e 68 74 6d 6c 20 2d 20 6f 70 74 69 6f 264.html – optio
000000c0: 6e 73 3a 20 63 61 62 61 63 3d 31 20 72 65 66 3d ns: cabac=1 ref=
000000d0: 33 20 64 65 62 6c 6f 63 6b 3d 31 3a 30 3a 30 20 3 deblock=1:0:0
000000e0: 61 6e 61 6c 79 73 65 3d 30 78 33 3a 30 78 31 31 analyse=0x3:0x11
000000f0: 33 20 6d 65 3d 68 65 78 20 73 75 62 6d 65 3d 37 3 me=hex subme=7
00000100: 20 70 73 79 3d 31 20 70 73 79 5f 72 64 3d 31 2e psy=1 psy_rd=1.
00000110: 30 30 3a 30 2e 30 30 20 6d 69 78 65 64 5f 72 65 00:0.00 mixed_re
00000120: 66 3d 31 20 6d 65 5f 72 61 6e 67 65 3d 31 36 20 f=1 me_range=16
00000130: 63 68 72 6f 6d 61 5f 6d 65 3d 31 20 74 72 65 6c chroma_me=1 trel
00000140: 6c 69 73 3d 31 20 38 78 38 64 63 74 3d 31 20 63 lis=1 8x8dct=1 c
00000150: 71 6d 3d 30 20 64 65 61 64 7a 6f 6e 65 3d 32 31 qm=0 deadzone=21
00000160: 2c 31 31 20 66 61 73 74 5f 70 73 6b 69 70 3d 31 ,11 fast_pskip=1
00000170: 20 63 68 72 6f 6d 61 5f 71 70 5f 6f 66 66 73 65 chroma_qp_offse
00000180: 74 3d 2d 32 20 74 68 72 65 61 64 73 3d 31 38 20 t=-2 threads=18
00000190: 6c 6f 6f 6b 61 68 65 61 64 5f 74 68 72 65 61 64 lookahead_thread
000001a0: 73 3d 33 20 73 6c 69 63 65 64 5f 74 68 72 65 61 s=3 sliced_threa
000001b0: 64 73 3d 30 20 6e 72 3d 30 20 64 65 63 69 6d 61 ds=0 nr=0 decima
000001c0: 74 65 3d 31 20 69 6e 74 65 72 6c 61 63 65 64 3d te=1 interlaced=
000001d0: 30 20 62 6c 75 72 61 79 5f 63 6f 6d 70 61 74 3d 0 bluray_compat=
000001e0: 30 20 63 6f 6e 73 74 72 61 69 6e 65 64 5f 69 6e 0 constrained_in
000001f0: 74 72 61 3d 30 20 62 66 72 61 6d 65 73 3d 33 20 tra=0 bframes=3
00000200: 62 5f 70 79 72 61 6d 69 64 3d 32 20 62 5f 61 64 b_pyramid=2 b_ad
00000210: 61 70 74 3d 31 20 62 5f 62 69 61 73 3d 30 20 64 apt=1 b_bias=0 d
00000220: 69 72 65 63 74 3d 31 20 77 65 69 67 68 74 62 3d irect=1 weightb=
00000230: 31 20 6f 70 65 6e 5f 67 6f 70 3d 30 20 77 65 69 1 open_gop=0 wei
00000240: 67 68 74 70 3d 32 20 6b 65 79 69 6e 74 3d 32 35 ghtp=2 keyint=25
00000250: 30 20 6b 65 79 69 6e 74 5f 6d 69 6e 3d 32 35 20 0 keyint_min=25
00000260: 73 63 65 6e 65 63 75 74 3d 34 30 20 69 6e 74 72 scenecut=40 intr
00000270: 61 5f 72 65 66 72 65 73 68 3d 30 20 72 63 5f 6c a_refresh=0 rc_l
00000280: 6f 6f 6b 61 68 65 61 64 3d 34 30 20 72 63 3d 63 ookahead=40 rc=c
00000290: 72 66 20 6d 62 74 72 65 65 3d 31 20 63 72 66 3d rf mbtree=1 crf=
000002a0: 32 33 2e 30 20 71 63 6f 6d 70 3d 30 2e 36 30 20 23.0 qcomp=0.60
000002b0: 71 70 6d 69 6e 3d 30 20 71 70 6d 61 78 3d 36 39 qpmin=0 qpmax=69
000002c0: 20 71 70 73 74 65 70 3d 34 20 69 70 5f 72 61 74 qpstep=4 ip_rat
000002d0: 69 6f 3d 31 2e 34 30 20 61 71 3d 31 3a 31 2e 30 io=1.40 aq=1:1.0
000002e0: 30 00 80 00 00 00 d9 65 88 84 00 3b ff fe e3 ab 0……e…;….
000002f0: f8 14 d8 50 54 74 4c c5 28 fe 85 b4 63 4f cf 14 …PTtL.(…cO..
00000300: 97 6c f2 13 37 1c af fe 07 7d 35 60 00 00 03 00 .l..7….}5`….
00000310: 00 03 00 00 03 00 00 03 01 50 6d 45 10 ad 3e 99 ………PmE..>.
00000320: 37 a6 80 00 00 03 00 00 2e a0 00 2a a0 00 44 c0 7……….*..D.
00000330: 00 9a 80 01 a8 00 06 48 00 1c 40 00 7f 00 02 64 …….H..@….d
00000340: 00 10 d0 00 7d 80 03 14 00 1d 60 00 00 03 00 00 ….}…..`…..
00000350: 03 00 00 03 00 00 03 00 00 03 00 00 03 00 00 03 …………….
00000360: 00 00 03 00 00 03 00 00 03 00 00 03 00 00 03 00 …………….
00000370: 00 03 00 00 03 00 00 03 00 00 03 00 00 03 00 00 …………….
00000380: 03 00 00 03 00 00 03 00 00 03 00 00 03 00 00 03 …………….
00000390: 00 00 03 00 00 03 00 00 03 00 00 03 00 00 03 00 …………….
000003a0: 00 03 00 00 03 00 00 03 00 00 03 00 00 03 00 00 …………….
000003b0: 03 00 00 03 00 00 03 00 00 03 00 00 03 00 6c c1 …………..l.
000003c0: 00 00 00 24 41 9a 24 6c 43 bf fe a9 96 00 00 03 …$A.$lC…….
000003d0: 00 00 03 00 00 03 00 00 03 00 00 03 00 00 03 00 …………….
000003e0: 00 03 00 00 03 00 18 30 00 00 00 21 41 9e 42 78 …….0…!A.Bx

第一个sample 大小是 0390 之前分支offset 是 00000030 ,即 000030 – 0003c0的数据都是第一个sample。

00012170: 05 dc 00 00 00 01 00 00 17 84 73 74 73 7a 00 00 ……….stsz..
00012180: 00 00 00 00 00 00 00 00 05 dc 00 00 03 90 00 00 …………….
00012190: 00 28 00 00 00 25 00 00 00 25 00 00 00 25 00 00 .(…%…%…%..
000121a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000121b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000121c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000121d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000121e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000121f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012200: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012210: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012220: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012230: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012240: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012250: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012260: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012270: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012280: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012290: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000122f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012300: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012310: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012320: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012330: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012340: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012350: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012360: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012370: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012380: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012390: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000123f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012400: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012410: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012420: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012430: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012440: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012450: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012460: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012470: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012480: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012490: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000124f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012500: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012510: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012520: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012530: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012540: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012550: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012560: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012570: 00 2d 00 00 00 de 00 00 00 28 00 00 00 25 00 00 .-…….(…%..
00012580: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012590: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000125f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012600: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012610: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012620: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012630: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012640: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012650: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012660: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012670: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012680: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012690: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000126f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012700: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012710: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012720: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012730: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012740: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012750: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012760: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012770: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012780: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012790: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000127f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012800: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012810: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012820: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012830: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012840: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012850: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012860: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012870: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012880: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012890: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000128f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012900: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012910: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012920: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012930: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012940: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012950: 00 25 00 00 00 25 00 00 00 2d 00 00 00 de 00 00 .%…%…-……
00012960: 00 28 00 00 00 25 00 00 00 25 00 00 00 25 00 00 .(…%…%…%..
00012970: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012980: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012990: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000129f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a00: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a10: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a20: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a30: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a40: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a50: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a60: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a70: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a80: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012a90: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012aa0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ab0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ac0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ad0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ae0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012af0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b00: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b10: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b20: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b30: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b40: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b50: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b60: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b70: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b80: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012b90: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ba0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012bb0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012bc0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012bd0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012be0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012bf0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c00: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c10: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c20: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c30: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c40: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c50: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c60: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c70: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c80: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012c90: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ca0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012cb0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012cc0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012cd0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012ce0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012cf0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012d00: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012d10: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012d20: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012d30: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00012d40: 00 2d 00 00 00 de 00 00 00 28 00 00 00 25 00 00 .-…….(…%..
00012d50: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012d60: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012d70: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012d80: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012d90: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012da0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012db0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012dc0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012dd0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012de0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012df0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e00: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e10: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e20: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e30: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e40: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e50: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e60: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e70: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e80: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012e90: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ea0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012eb0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ec0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ed0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ee0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ef0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f00: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f10: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f20: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f30: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f40: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f50: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f60: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f70: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f80: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012f90: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012fa0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012fb0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012fc0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012fd0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012fe0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00012ff0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013000: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013010: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013020: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013030: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013040: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013050: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013060: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013070: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013080: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013090: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000130f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013100: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013110: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013120: 00 25 00 00 00 25 00 00 00 2d 00 00 00 de 00 00 .%…%…-……
00013130: 00 28 00 00 00 25 00 00 00 25 00 00 00 25 00 00 .(…%…%…%..
00013140: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013150: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013160: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013170: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013180: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013190: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000131f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013200: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013210: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013220: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013230: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013240: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013250: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013260: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013270: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013280: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013290: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000132f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013300: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013310: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013320: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013330: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013340: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013350: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013360: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013370: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013380: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013390: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000133f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013400: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013410: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013420: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013430: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013440: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013450: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013460: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013470: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013480: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013490: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134a0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134b0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134c0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134d0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134e0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
000134f0: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013500: 00 2e 00 00 00 27 00 00 00 25 00 00 00 25 00 00 …..’…%…%..
00013510: 00 2d 00 00 00 de 00 00 00 28 00 00 00 25 00 00 .-…….(…%..
00013520: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013530: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013540: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013550: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013560: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013570: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013580: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013590: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000135f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013600: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013610: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013620: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013630: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013640: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013650: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013660: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013670: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013680: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013690: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000136f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013700: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013710: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013720: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013730: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013740: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013750: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013760: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013770: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013780: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013790: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000137f0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013800: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013810: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013820: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013830: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013840: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013850: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013860: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013870: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013880: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
00013890: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138a0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138b0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138c0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138d0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138e0: 00 25 00 00 00 25 00 00 00 2e 00 00 00 27 00 00 .%…%…….’..
000138f0: 00 25 00 00 00 25 00 00 00 2d 00 00 00 14 73 74 .%…%…-….st
00013900: 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 00 co………..0..
00013910: 00 62 75 64 74 61 00 00 00 5a 6d 65 74 61 00 00 .budta…Zmeta..
00013920: 00 00 00 00 00 21 68 64 6c 72 00 00 00 00 00 00 …..!hdlr……
00013930: 00 00 6d 64 69 72 61 70 70 6c 00 00 00 00 00 00 ..mdirappl……

 

 

mp4 文件 stco 解析

参考文档 14496-12

ISO_IEC_14496-12_2015

8.7.5
8.7.5.1
Chunk Offset Box
Definition
Box Type: ‘stco’, ‘co64’
Container: Sample Table Box (‘stbl’)
Mandatory: Yes
Quantity: Exactly one variant must be present
The chunk offset table gives the index of each chunk into the containing file. There are two variants,
permitting the use of 32‐bit or 64‐bit offsets. The latter is useful when managing very large
presentations. At most one of these variants will occur in any single instance of a sample table.
Offsets are file offsets, not the offset into any box within the file (e.g. Media Data Box). This permits
referring to media data in files without any box structure. It does also mean that care must be taken
when constructing a self‐contained ISO file with its metadata

8.7.5.2
Syntax
aligned(8) class ChunkOffsetBox
extends FullBox(‘stco’, version = 0, 0) {
    unsigned int(32) entry_count;
    for (i=1; i <= entry_count; i++) {
        unsigned int(32) chunk_offset;
    }
}
aligned(8) class ChunkLargeOffsetBox
extends FullBox(‘co64’, version = 0, 0) {
    unsigned int(32) entry_count;
    for (i=1; i <= entry_count; i++) {
        unsigned int(64) chunk_offset;
    }

0000ff_60s_1280x720

000138f0: 00 25 00 00 00 25 00 00 00 2d 00 00 00 14 73 74 .%…%…-….st
00013900: 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 00 co………..0..
00013910: 00 62 75 64 74 61 00 00 00 5a 6d 65 74 61 00 00 .budta…Zmeta..

00 00 00 30 // unsigned int(64) chunk_offset;

00000010: 69 73 6f 6d 69 73 6f 32 61 76 63 31 6d 70 34 31 isomiso2avc1mp41
00000020: 00 00 00 08 66 72 65 65 00 00 ef d8 6d 64 61 74 ….free….mdat
00000030: 00 00 02 af 06 05 ff ff ab dc 45 e9 bd e6 d9 48 ……….E….H
00000040: b7 96 2c d8 20 d9 23 ee ef 78 32 36 34 20 2d 20 ..,. .#..x264 –
00000050: 63 6f 72 65 20 31 35 37 20 72 32 39 36 39 20 64 core 157 r2969 d
00000060: 34 30 39 39 64 64 20 2d 20 48 2e 32 36 34 2f 4d 4099dd – H.264/M
00000070: 50 45 47 2d 34 20 41 56 43 20 63 6f 64 65 63 20 PEG-4 AVC codec
00000080: 2d 20 43 6f 70 79 6c 65 66 74 20 32 30 30 33 2d – Copyleft 2003-
00000090: 32 30 31 39 20 2d 20 68 74 74 70 3a 2f 2f 77 77 2019 – http://ww
000000a0: 77 2e 76 69 64 65 6f 6c 61 6e 2e 6f 72 67 2f 78 w.videolan.org/x

从30 地址开始是chunk的开始,及ES数据开始。

mp4 文件 stsc 解析

参考文档 14496-12

8.7.4.1
Sample To Chunk Box
Definition
Box Type: ‘stsc’
Container: Sample Table Box (‘stbl’)
Mandatory: Yes
Quantity: Exactly one
Samples within the media data are grouped into chunks. Chunks can be of different sizes, and the
samples within a chunk can have different sizes. This table can be used to find the chunk that contains a
sample, its position, and the associated sample description.
The table is compactly coded. Each entry gives the index of the first chunk of a run of chunks with the
same characteristics. By subtracting one entry here from the previous one, you can compute how many
chunks are in this run. You can convert this to a sample count by multiplying by the appropriate
samples‐per‐chunk.

aligned(8) class SampleToChunkBox
extends FullBox(‘stsc’, version = 0, 0) {
    unsigned int(32) entry_count;
    for (i=1; i <= entry_count; i++) {
        unsigned int(32) first_chunk;
        unsigned int(32) samples_per_chunk;
        unsigned int(32) sample_description_index;
    }
}

8.7.4.3
Semantics
version is an integer that specifies the version of this box
entry_count is an integer that gives the number of entries in the following table
first_chunk is an integer that gives the index of the first chunk in this run of chunks that share
the same samples‐per‐chunk and sample‐description‐index; the index of the first chunk in a
track has the value 1 (the first_chunk field in the first record of this box has the value 1,
identifying that the first sample maps to the first chunk).
samples_per_chunk is an integer that gives the number of samples in each of these chunks
sample_description_index is an integer that gives the index of the sample entry that
describes the samples in this ch

00012150: 02 00 00 00 00 01 00 00 04 00 00 00 00 1c 73 74 …………..st
00012160: 73 63 00 00 00 00 00 00 00 01 00 00 00 01 00 00 sc…………..
00012170: 05 dc 00 00 00 01 00 00 17 84 73 74 73 7a 00 00 ……….stsz..
00012180: 00 00 00 00 00 00 00 00 05 dc 00 00 03 90 00 00 …………….

00 00 00 01 //unsigned int(32) entry_count;

00 00 00 01 //unsigned int(32) first_chunk;

00 00 05 dc //unsigned int(32) samples_per_chunk;

00 00 00 01 //unsigned int(32) sample_description_index;

 

mp4 文件 stts 解析

8.6.1.2.1 Definition
Box Type: ‘stts’
Container: Sample Table Box (‘stbl’)
Mandatory: Yes
Quantity: Exactly one
This box contains a compact version of a table that allows indexing from decoding time to sample
number. Other tables give sample sizes and pointers, from the sample number. Each entry in the table
gives the number of consecutive samples with the same time delta, and the delta of those samples. By
adding the deltas a complete time‐to‐sample map may be built.
The Decoding Time to Sample Box contains decode time delta’s: DT(n+1) = DT(n) + STTS(n) where
STTS(n) is the (uncompressed) table entry for sample n.
The sample entries are ordered by decoding time stamps; therefore the deltas are all non‐negative.
The DT axis has a zero origin; DT(i) = SUM(for j=0 to i‐1 of delta(j)), and the sum of all deltas gives the
length of the media in the track (not mapped to the overall timescale, and not considering any edit list).
The Edit List Box provides the initial CT value if it is non‐empty (non‐zero).

http://wikil.lwwhome.cn:28080/wp-content/uploads/2020/04/0000ff_30s_11280x720.mp4

0000f250: 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 00 ……stts……
0000f260: 00 01 00 00 05 dc 00 00 02 00 00 00 00 28 73 74 ………….(st
0000f270: 73 73 00 00 00 00 00 00 00 06 00 00 00 01 00 00 ss…………..

aligned(8) class TimeToSampleBox
extends FullBox('stts', version = 0, 0) {
    unsigned int(32) entry_count;
    int i;
    for (i=0; i < entry_count; i++) {
        unsigned int(32) sample_count;
        unsigned int(32) sample_delta;
    }
}

00 00 00 01 //unsigned int(32) entry_count;

00 00 05 dc //unsigned int(32) sample_count;

00 00 02 00 //unsigned int(32) sample_delta;

mp4 文件 stss解析

sync sample atom确定media中的关键帧。对于压缩的媒体,关键帧是一系列压缩序列的开始帧,它的解压缩是不依赖于以前的帧。后续帧的解压缩依赖于这个关键帧。

sync sample atom可以非常紧凑的标记媒体内的随机存取点。它包含一个sample序号表,表内的每一项严格按照sample的序号排列,说明了媒体中的哪一个sample是关键帧。如果此表不存在,说明每一个sample都是一个关键帧,是一个随机存取点。

分析文件地址:

http://wikil.lwwhome.cn:28080/wp-content/uploads/2020/04/0000ff_30s_11280x720.mp4

8.6.2.1
Sync Sample Box
Definition
Box Type: ‘stss’
Container: Sample Table Box (‘stbl’)
Mandatory: No
Quantity: Zero or one
This box provides a compact marking of the sync samples within the stream. The table is arranged in
strictly increasing order of sample number.
If the sync sample box is not present, every sample is a sync sample.

参考文档 ISO/IEC 14496-12

4.2 Object Structure

aligned(8) class Box (unsigned int(32) boxtype,
        optional unsigned int(8)[16] extended_type) {
    unsigned int(32) size;
    unsigned int(32) type = boxtype;
    if (size==1) {
        unsigned int(64) largesize;
    } else if (size==0) {
        // box extends to end of file
    }
    if (boxtype=='uuid') {
        unsigned int(8)[16] usertype = extended_type;
    }
}
aligned(8) class FullBox(unsigned int(32) boxtype, unsigned int(8) v, bit(24) f)
    extends Box(boxtype) {
        unsigned int(8)
            version = v;
        bit(24)
            flags = f;
    }
aligned(8) class SyncSampleBox
extends FullBox(‘stss’, version = 0, 0) {
    unsigned int(32) entry_count;
    int i;
    for (i=0; i < entry_count; i++) {
        unsigned int(32) sample_number;
    }
}

0000f240: f8 00 00 00 00 10 70 61 73 70 00 00 00 01 00 00 ……pasp……
0000f250: 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 00 ……stts……
0000f260: 00 01 00 00 05 dc 00 00 02 00 00 00 00 28 73 74 ………….(st
0000f270: 73 73 00 00 00 00 00 00 00 06 00 00 00 01 00 00 ss…………..
0000f280: 00 fb 00 00 01 f5 00 00 02 ef 00 00 03 e9 00 00 …………….
0000f290: 04 e3 00 00 2e c8 63 74 74 73 00 00 00 00 00 00 ……ctts……

00 00 00 28 // box size

73 74 73 73 // box type stss

00 // box version 8bit

00 00 00 // box flags 24 bit

00 00 00 01 // SyncSampleBox unsigned int(32) entry_count;  = 1

00 00 00 01

00 00 00 fb

00 00 01 f5

00 00 02 ef

00 00 03 e9

00 00 04 e3

// unsigned int(32) sample_number;  总即6个关键帧,可以看出来视频60s视频每隔10s一个关键帧

 

mp4 文件 stsd 解析

Sample Description Box

Box Types: ‘stsd’
Container: Sample Table Box (‘stbl’) Mandatory: Yes
Quantity: Exactly one

The sample description table gives detailed information about the coding type used, and any initialization information needed for that coding.

The information stored in the sample description box after the entry‐count is both track‐type specific as documented here, and can also have variants within a track type (e.g. different codings may use different specific information after some common fields, even within a video track).

Which type of sample entry form is used is determined by the media handler, using a suitable form, such as one defined in clause 12, or defined in a derived specification, or registration.

Multiple descriptions may be used within a track.

Note Though the count is 32 bits, the number of items is usually much fewer, and is restricted by the fact that the reference index in the sample table is only 16 bits

If the ‘format’ field of a SampleEntry is unrecognized, neither the sample description itself, nor the associated media samples, shall be decoded.

Note The definition of sample entries specifies boxes in a particular order, and this is usually also followed in derived specifications. For maximum compatibility, writers should construct files respecting the order both within specifications and as implied by the inheritance, whereas readers should be prepared to accept any box order.

All string fields shall be null‐terminated, even if unused. “Optional” means there is at least one null byte.

Entries that identify the format by MIME type, such as a TextSubtitleSampleEntry, TextMetaDataSampleEntry, or SimpleTextSampleEntry, all of which contain a MIME type, may be used to identify the format of streams for which a MIME type applies. A MIME type applies if the contents of the string in the optional configuration box (without its null termination), followed by the contents of a set of samples, starting with a sync sample and ending at the sample immediately preceding a sync sample, are concatenated in their entirety, and the result meets the decoding requirements for documents of that MIME type. Non‐sync samples should be used only if that format specifies the behaviour of ‘progressive decoding’, and then the sample times indicate when the results of such progressive decoding should be presented (according to the media type).

Note The samples in a track that is all sync samples are therefore each a valid document for that MIME type.

In some classes derived from SampleEntry, namespace and schema_location are used both to identify the XML document content and to declare “brand” or profile compatibility. Multiple namespace identifiers indicate that the track conforms to the specification represented by each of the identifiers, some of which may identify supersets of the features present. A decoder should be able to decode all the namespaces in order to be able to decode and present correctly the media associated with this sample entry.

Note Additionally, namespace identifiers may represent performance constraints, such as limits on document size, font size, drawing rate, etc., as well as syntax constraints such as features that are not permitted or ignored.

 

aligned(8) class Box (unsigned int(32) boxtype,
optional unsigned int(8)[16] extended_type) {
unsigned int(32) size;
unsigned int(32) type = boxtype;
if (size==1) {
unsigned int(64) largesize;
} else if (size==0) {
// box extends to end of file
}
if (boxtype==‘uuid’) {
unsigned int(8)[16] usertype = extended_type;
}
}

 

aligned(8) class FullBox(unsigned int(32) boxtype, unsigned int(8) v, bit(24) f)
extends Box(boxtype) {
unsigned int(8)
version = v;
bit(24)
flags = f;
}

 

aligned(8) abstract class SampleEntry (unsigned int(32) format) extends Box(format)
{
    const unsigned int(8)[6] reserved = 0; 
    unsigned int(16) data_reference_index;
}

class BitRateBox extends Box('btrt'){ 
    unsigned int(32) bufferSizeDB; 
    unsigned int(32) maxBitrate; 
    unsigned int(32) avgBitrate;
}


aligned(8) class SampleDescriptionBox (unsigned int(32) handler_type) extends FullBox('stsd', version, 0){
    int i ; // i 为临时变量,不占用空间
    unsigned int(32) entry_count;
    for (i = 1 ; i <= entry_count ; i++){
        SampleEntry();	// an instance of a class derived from SampleEntry
    }
}

参考协议 ISO/IEC 14496-12:2015 page – 170
12.1.3 Sample entry
12.1.3.1
Definition
Video tracks use VisualSampleEntry. // 当handler_type 是视频时,使用VisualSampleEntry

class VisualSampleEntry(codingname) extends SampleEntry (codingname){
unsigned int(16) pre_defined = 0;
const unsigned int(16) reserved = 0;
unsigned int(32)[3] pre_defined = 0;
unsigned int(16) width;
unsigned int(16) height;
template unsigned int(32) horizresolution = 0x00480000; // 72 dpi
template unsigned int(32) vertresolution = 0x00480000; // 72 dpi
const unsigned int(32) reserved = 0;
template unsigned int(16) frame_count = 1;
string[32] compressorname;
template unsigned int(16) depth = 0x0018;
int(16) pre_defined = -1;
// other boxes from derived specifications
CleanApertureBox
clap;
// optional
PixelAspectRatioBox pasp;
// optional
}

000006d0: 00 00 00 01 00 00 01 0b 73 74 62 6c 00 00 00 a7 ……..stbl….
000006e0: 73 74 73 64 00 00 00 00 00 00 00 01 00 00 00 97 stsd…………
000006f0: 61 76 63 31 00 00 00 00 00 00 00 01 00 00 00 00 avc1…………
00000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 00 0c …………….
00000710: 00 48 00 00 00 48 00 00 00 00 00 00 00 01 00 00 .H…H……….
00000720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 …………….
00000740: ff ff 00 00 00 31 61 76 63 43 01 f4 00 0a ff e1 …..1avcC……
00000750: 00 19 67 f4 00 0a 91 9b 2b f2 cb 80 b6 40 00 00 ..g…..+….@..
00000760: 03 00 40 00 00 0c 83 c4 89 65 80 01 00 05 68 eb ..@……e….h.
00000770: e3 c4 48 00 00 00 10 70 61 73 70 00 00 00 01 00 ..H….pasp…..
00000780: 00 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 …….stts…..
00000790: 00 00 01 00 00 00 01 00 00 0e 10 00 00 00 1c 73 ……………s
000007a0: 74 73 63 00 00 00 00 00 00 00 01 00 00 00 01 00 tsc………….
000007b0: 00 00 01 00 00 00 01 00 00 00 14 73 74 73 7a 00 ………..stsz.
000007c0: 00 00 00 00 00 02 f0 00 00 00 01 00 00 00 14 73 ……………s
000007d0: 74 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 tco………..0.
000007e0: 00 01 bc 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 …trak…\tkhd.
000007f0: 00 00 03 00 00 00 00 00 00 00 00 00 00 00 02 00 …………….

size 00 00 00 a7

type 73 74 73 64

version 8  00

flags 24 00 00 00

entry_count 00 00 00 01 == 1 

00 00 00 97 // VisualSampleEntry size 0x97

61 76 63 31 //VisualSampleEntry type avc1

aligned(8) abstract class SampleEntry (unsigned int(32) format) extends Box(format)
{
    const unsigned int(8)[6] reserved = 0; 
    unsigned int(16) data_reference_index;
}

00 00 00 00 00 00  // const unsigned int(8)[6] reserved = 0;

00  01 // unsigned int(16) data_reference_index;

参考协议 ISO/IEC 14496-12:2015 page – 170

class VisualSampleEntry(codingname) extends SampleEntry (codingname){
unsigned int(16) pre_defined = 0;
const unsigned int(16) reserved = 0;
unsigned int(32)[3] pre_defined = 0;
unsigned int(16) width;
unsigned int(16) height;
template unsigned int(32) horizresolution = 0x00480000; // 72 dpi
template unsigned int(32) vertresolution = 0x00480000; // 72 dpi
const unsigned int(32) reserved = 0;
template unsigned int(16) frame_count = 1;
string[32] compressorname;
template unsigned int(16) depth = 0x0018;
int(16) pre_defined = -1;
// other boxes from derived specifications 
CleanApertureBox clap; // optional
PixelAspectRatioBox pasp; // optional
}

000006d0: 00 00 00 01 00 00 01 0b 73 74 62 6c 00 00 00 a7 ……..stbl….
000006e0: 73 74 73 64 00 00 00 00 00 00 00 01 00 00 00 97 stsd…………
000006f0: 61 76 63 31 00 00 00 00 00 00 00 01 00 00 00 00 avc1…………
00000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 00 0c …………….
00000710: 00 48 00 00 00 48 00 00 00 00 00 00 00 01 00 00 .H…H……….
00000720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 …………….
00000740: ff ff 00 00 00 31 61 76 63 43 01 f4 00 0a ff e1 …..1avcC……
00000750: 00 19 67 f4 00 0a 91 9b 2b f2 cb 80 b6 40 00 00 ..g…..+….@..
00000760: 03 00 40 00 00 0c 83 c4 89 65 80 01 00 05 68 eb ..@……e….h.
00000770: e3 c4 48 00 00 00 10 70 61 73 70 00 00 00 01 00 ..H….pasp…..
00000780: 00 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 …….stts…..
00000790: 00 00 01 00 00 00 01 00 00 0e 10 00 00 00 1c 73 ……………s
000007a0: 74 73 63 00 00 00 00 00 00 00 01 00 00 00 01 00 tsc………….
000007b0: 00 00 01 00 00 00 01 00 00 00 14 73 74 73 7a 00 ………..stsz.
000007c0: 00 00 00 00 00 02 f0 00 00 00 01 00 00 00 14 73 ……………s
000007d0: 74 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 tco………..0.
000007e0: 00 01 bc 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 …trak…\tkhd.
000007f0: 00 00 03 00 00 00 00 00 00 00 00 00 00 00 02 00 …………….

00 00 // VisualSampleEntry unsigned int(16) pre_defined = 0;

00 00 // VisualSampleEntry const unsigned int(16) reserved = 0;

00 00 00 00 00 00 00 00 00 00 00 00 // VisualSampleEntry unsigned int(32)[3] pre_defined = 0;

00 0c // VisualSampleEntry unsigned int(16) width;

00 0c // VisualSampleEntry unsigned int(16) height;

00 48 00 00// VisualSampleEntry  template unsigned int(32) horizresolution = 0x00480000; // 72 dpi template unsigned int(32) 

00 48 00 00 // VisualSampleEntry pi template  unsigned int(32) vertresolution = 0x00480000; // 72 dpi const

00 00 00 00 //VisualSampleEntry const unsigned int(32) reserved = 0;

00 01 //VisualSampleEntry template unsigned int(16) frame_count = 1;

00*32 //VisualSampleEntry string[32] compressorname;

00 18 //VisualSampleEntry template unsigned int(16) depth = 0x0018;

ff ff //VisualSampleEntry  int(16) pre_defined = -1;

参考协议 ISO/IEC 14496-15  5.3.3.1 定义如下:

aligned(8) class AVCDecoderConfigurationRecord {
  unsigned int(8) configurationVersion = 1;
  unsigned int(8) AVCProfileIndication;
  unsigned int(8) profile_compatibility;
  unsigned int(8) AVCLevelIndication; 
  bit(6) reserved = '111111'b;
  unsigned int(2) lengthSizeMinusOne; 
  bit(3) reserved = '111'b;
  unsigned int(5) numOfSequenceParameterSets;
  for (i=0; i< numOfSequenceParameterSets;  i++) {
    unsigned int(16) sequenceParameterSetLength ;
    bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
  }
  unsigned int(8) numOfPictureParameterSets;
  for (i=0; i< numOfPictureParameterSets;  i++) {
    unsigned int(16) pictureParameterSetLength;
    bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
  }
  if( AVCProfileIndication  !=  66  &&  AVCProfileIndication  !=  77  &&
      AVCProfileIndication  !=  88 )
  {
    bit(6) reserved = '111111'b;
    unsigned int(2) chroma_format;
    bit(5) reserved = '11111'b;
    unsigned int(3) bit_depth_luma_minus8;
    bit(5) reserved = '11111'b;
    unsigned int(3) bit_depth_chroma_minus8;
    unsigned int(8) numOfSequenceParameterSetExt;
    for (i=0; i< numOfSequenceParameterSetExt; i++) {
      unsigned int(16) sequenceParameterSetExtLength;
      bit(8*sequenceParameterSetExtLength) sequenceParameterSetExtNALUnit;
    }
  }
}

参考协议 ISO/IEC 14496-15  5.4.2 定义如下:

5.4.2 AVC video stream definition

1.1.1.1 Sample entry name and format

1.1.1.1.1 Definition

Sample Entry and Box Types:  ‘avc1’, ‘avc2’, ‘avc3’, ‘avc4’, ‘avcC’, ‘m4ds’,’btrt’
Container: Sample Description Box (‘stsd’)
Mandatory: An ‘avc1’, ‘avc2’, ‘avc3’ or ‘avc4’ sample entry is mandatory
Quantity: One or more sample entries may be present

An AVC visual sample entry shall contain an AVC Configuration Box, as defined below. This includes an AVCDecoderConfigurationRecord, as defined in ‎5.3.3.1.

An optional BitRateBox may be present in the AVC visual sample entry to signal the bit rate information of the AVC video stream. Extension descriptors that should be inserted into the Elementary Stream Descriptor, when used in MPEG-4, may also be present.

Multiple sample entries may be used, as permitted by the ISO Base Media File Format specification, to indicate sections of video that use different configurations or parameter sets.

The sample entry name ‘avc1’ or ‘avc3’ may only be used when the stream to which this sample entry applies is a compliant and AVC stream as viewed by an AVC decoder operating under the configuration (including profile and level) given in the AVCConfigurationBox. The file format specific structures that resemble NAL units (see ‎Annex A) may be present but shall not be used to access the AVC base data; that is, the AVC data shall not be contained in Aggregators (though they may be included within the bytes referenced by the additional_bytes field) nor referenced by Extractors.

The sample entry name ‘avc2’ or ‘avc4’ may only be used when Extractors or Aggregators (‎Annex A) are required to be supported, and an appropriate Toolset is required (for example, as indicated by the file-type brands). This sample entry type indicates that, in order to form the intended AVC stream, Extractors shall be replaced with the data they are referencing, and Aggregators shall be examined for contained NAL Units. Tier grouping may be present.

1.1.1.1.2 Syntax

// Visual Sequences
class AVCConfigurationBox extends Box(‘avcC’) {
AVCDecoderConfigurationRecord() AVCConfig;
}

class MPEG4ExtensionDescriptorsBox extends Box(‘m4ds’) {
Descriptor Descr[0 .. 255];
}

class AVCSampleEntry() extends VisualSampleEntry (type) {
// type is ‘avc1’ or ‘avc3’
AVCConfigurationBox config;
MPEG4ExtensionDescriptorsBox (); // optional
}

class AVC2SampleEntry() extends VisualSampleEntry (type) {
// type is ‘avc2’ or ‘avc4’
AVCConfigurationBox avcconfig;
MPEG4ExtensionDescriptorsBox descr; // optional
}

1.1.1.1.3 Semantics

Compressorname in the base class VisualSampleEntry indicates the name of the compressor used with the value “\012AVC Coding” being recommended; the first byte is a count of the remaining bytes, here represented by \012, which (being octal 12) is 10 (decimal), the number of bytes in the rest of the string.

config is defined in ‎5.3.3. If a separate parameter set stream is used, numOfSequenceParameterSets and numOfPictureParameterSets shall both be zero.

Descr is a descriptor that should be placed in the ElementaryStreamDescriptor when this stream is used in an MPEG-4 systems context. This does not include SLConfigDescriptor or DecoderConfigDescriptor, but includes the other descriptors in order to be placed after the SLConfigDescriptor.

参考协议 ISO/IEC 14496-15  5.3.3.1 定义如下:

aligned(8) class AVCDecoderConfigurationRecord {
  unsigned int(8) configurationVersion = 1;
  unsigned int(8) AVCProfileIndication;
  unsigned int(8) profile_compatibility;
  unsigned int(8) AVCLevelIndication; 
  bit(6) reserved = '111111'b;
  unsigned int(2) lengthSizeMinusOne; 
  bit(3) reserved = '111'b;
  unsigned int(5) numOfSequenceParameterSets;
  for (i=0; i< numOfSequenceParameterSets;  i++) {
    unsigned int(16) sequenceParameterSetLength ;
    bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit;
  }
  unsigned int(8) numOfPictureParameterSets;
  for (i=0; i< numOfPictureParameterSets;  i++) {
    unsigned int(16) pictureParameterSetLength;
    bit(8*pictureParameterSetLength) pictureParameterSetNALUnit;
  }
  if( AVCProfileIndication  !=  66  &&  AVCProfileIndication  !=  77  &&
      AVCProfileIndication  !=  88 )
  {
    bit(6) reserved = '111111'b;
    unsigned int(2) chroma_format;
    bit(5) reserved = '11111'b;
    unsigned int(3) bit_depth_luma_minus8;
    bit(5) reserved = '11111'b;
    unsigned int(3) bit_depth_chroma_minus8;
    unsigned int(8) numOfSequenceParameterSetExt;
    for (i=0; i< numOfSequenceParameterSetExt; i++) {
      unsigned int(16) sequenceParameterSetExtLength;
      bit(8*sequenceParameterSetExtLength) sequenceParameterSetExtNALUnit;
    }
  }
}

00000730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 …………….
00000740: ff ff 00 00 00 31 61 76 63 43 01 f4 00 0a ff e1 …..1avcC……
00000750: 00 19 67 f4 00 0a 91 9b 2b f2 cb 80 b6 40 00 00 ..g…..+….@..
00000760: 03 00 40 00 00 0c 83 c4 89 65 80 01 00 05 68 eb ..@……e….h.
00000770: e3 c4 48 00 00 00 10 70 61 73 70 00 00 00 01 00 ..H….pasp…..
00000780: 00 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 …….stts…..
00000790: 00 00 01 00 00 00 01 00 00 0e 10 00 00 00 1c 73 ……………s
000007a0: 74 73 63 00 00 00 00 00 00 00 01 00 00 00 01 00 tsc………….
000007b0: 00 00 01 00 00 00 01 00 00 00 14 73 74 73 7a 00 ………..stsz.
000007c0: 00 00 00 00 00 02 f0 00 00 00 01 00 00 00 14 73 ……………s
000007d0: 74 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 tco………..0.
000007e0: 00 01 bc 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 …trak…\tkhd.
000007f0: 00 00 03 00 00 00 00 00 00 00 00 00 00 00 02 00 …………….

00 00 00 31 // AVCDecoderConfigurationRecord box size

61 76 63 43 // AVCDecoderConfigurationRecord type

01 //AVCDecoderConfigurationRecord  unsigned int(8) configurationVersion = 1;

f4 //AVCDecoderConfigurationRecord unsigned int(8) AVCProfileIndication;

00 // unsigned int(8) profile_compatibility;

0a //unsigned int(8) AVCLevelIndication;

ff // bit(6) reserved = ‘111111’b; unsigned int(2) lengthSizeMinusOne; 

e1 = 1110 0001 // bit(3) reserved = ‘111’b; unsigned int(5) numOfSequenceParameterSets; 即 sps 数量为1

 00 19 //unsigned int(16) sequenceParameterSetLength ;

00 19 67 f4 00 0a 91 9b 2b f2 cb 80 b6 40 00 00 03 00 40 00 00 0c 83 c4 89 65 80 //bit(8*sequenceParameterSetLength) sequenceParameterSetNALUnit; sps data

01 //unsigned int(8) numOfPictureParameterSets;

00 05 // unsigned int(16) sequenceParameterSetLength ;

参考协议 ISO/IEC 14496-12 12.1.4 Pixel Aspect Ratio and Clean Aperture page – 170

00000770: e3 c4 48 00 00 00 10 70 61 73 70 00 00 00 01 00 ..H….pasp…..
00000780: 00 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 …….stts…..

class PixelAspectRatioBox extends Box(‘pasp’){
    unsigned int(32) hSpacing; 
    unsigned int(32) vSpacing;
}

00 00 00 01 // unsigned int(32) hSpacing;

00 00 00 01 //unsigned int(32) vSpacing;

avc1解析需要协议14496-15

可参考 :

https://blog.csdn.net/badousuan/article/details/79519862

mp4 文件 stbl 解析

Sample Table Box

Box Type: ‘stbl’
Container: Media Information Box (‘minf’) Mandatory: Yes
Quantity: Exactly one

The sample table contains all the time and data indexing of the media samples in a track. Using the tables here, it is possible to locate samples in time, determine their type (e.g. I‐frame or not), and determine their size, container, and offset into that container.

If the track that contains the Sample Table Box references no data, then the Sample Table Box does not need to contain any sub‐boxes (this is not a very useful media track).

If the track that the Sample Table Box is contained in does reference data, then the following sub‐boxes are required: Sample Description, Sample Size, Sample To Chunk, and Chunk Offset. Further, the Sample Description Box shall contain at least one entry. A Sample Description Box is required because it contains the data reference index field which indicates which Data Reference Box to use to retrieve the media samples. Without the Sample Description, it is not possible to determine where the media samples are stored. The Sync Sample Box is optional. If the Sync Sample Box is not present, all samples are sync samples.

A.7 provides a narrative description of random access using the structures defined in the Sample Table Box.

aligned(8) class SampleTableBox extends Box(‘stbl’) {
}

000006d0: 00 00 00 01 00 00 01 0b 73 74 62 6c 00 00 00 a7 ……..stbl….
000006e0: 73 74 73 64 00 00 00 00 00 00 00 01 00 00 00 97 stsd…………
000006f0: 61 76 63 31 00 00 00 00 00 00 00 01 00 00 00 00 avc1…………
00000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 0c 00 0c …………….
00000710: 00 48 00 00 00 48 00 00 00 00 00 00 00 01 00 00 .H…H……….
00000720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 …………….
00000730: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 18 …………….
00000740: ff ff 00 00 00 31 61 76 63 43 01 f4 00 0a ff e1 …..1avcC……
00000750: 00 19 67 f4 00 0a 91 9b 2b f2 cb 80 b6 40 00 00 ..g…..+….@..
00000760: 03 00 40 00 00 0c 83 c4 89 65 80 01 00 05 68 eb ..@……e….h.
00000770: e3 c4 48 00 00 00 10 70 61 73 70 00 00 00 01 00 ..H….pasp…..
00000780: 00 00 01 00 00 00 18 73 74 74 73 00 00 00 00 00 …….stts…..
00000790: 00 00 01 00 00 00 01 00 00 0e 10 00 00 00 1c 73 ……………s
000007a0: 74 73 63 00 00 00 00 00 00 00 01 00 00 00 01 00 tsc………….
000007b0: 00 00 01 00 00 00 01 00 00 00 14 73 74 73 7a 00 ………..stsz.
000007c0: 00 00 00 00 00 02 f0 00 00 00 01 00 00 00 14 73 ……………s
000007d0: 74 63 6f 00 00 00 00 00 00 00 01 00 00 00 30 00 tco………..0.
000007e0: 00 01 bc 74 72 61 6b 00 00 00 5c 74 6b 68 64 00 …trak…\tkhd.
000007f0: 00 00 03 00 00 00 00 00 00 00 00 00 00 00 02 00 …………….