VIDEOCUBE
[MP4] 파일 미디어 샘플과 시간 정보를 구하는 방법 본문
MP4 파일 미디어 샘플과 시간 정보를 구하는 방법
미디어 샘플의 정보는 샘플 테이블 박스에서 얻을 수 있다.
샘플 테이블 박스는 Sample Table Atom : stbl 이다.
stbl 을 찾아보자..
moov 내 Type 정보
moov > track > mdia > stbl 정보를 찾아보자
ftyp : 20
moov : 17708
moov > mvhd : 108
----------------- [ mvhd ] -----------------
Version 0
Flags 000000
CreateTime 2036-01-02 00:00:00
Durtaion 65536
---------------------------------------------
moov > trak : 5870
----------------- [ trak ] -----------------
Type [tkhd]:[92]
Type [mdia]:[5770]
----------------- [ mdia ] -----------------
Type [mdhd]:[32]
Type [hdlr]:[45]
Type [minf]:[5685]
----------------- [ minf ] -----------------
Type [vmhd]:[20]
Type [dinf]:[36]
Type [stbl]:[5621]
---------------------------------------------
---------------------------------------------
---------------------------------------------
moov > trak : 3968
----------------- [ trak ] -----------------
Type [tkhd]:[92]
Type [mdia]:[3868]
----------------- [ mdia ] -----------------
Type [mdhd]:[32]
Type [hdlr]:[45]
Type [minf]:[3783]
----------------- [ minf ] -----------------
Type [smhd]:[16]
Type [dinf]:[36]
Type [stbl]:[3723]
---------------------------------------------
---------------------------------------------
---------------------------------------------
moov > trak : 6350
----------------- [ trak ] -----------------
Type [tkhd]:[92]
Type [tref]:[20]
Type [mdia]:[5966]
----------------- [ mdia ] -----------------
Type [mdhd]:[32]
Type [hdlr]:[54]
Type [minf]:[5872]
----------------- [ minf ] -----------------
Type [hmhd]:[28]
Type [dinf]:[36]
Type [stbl]:[5800]
---------------------------------------------
---------------------------------------------
Type [udta]:[264]
---------------------------------------------
moov > trak : 1167
----------------- [ trak ] -----------------
Type [tkhd]:[92]
Type [tref]:[20]
Type [mdia]:[942]
----------------- [ mdia ] -----------------
Type [mdhd]:[32]
Type [hdlr]:[54]
Type [minf]:[848]
----------------- [ minf ] -----------------
Type [hmhd]:[28]
Type [dinf]:[36]
Type [stbl]:[776]
---------------------------------------------
---------------------------------------------
Type [udta]:[105]
---------------------------------------------
moov > udta : 237
mdat : 2771337
free : 8
free : 76
stbl 안에는
ㄴ co64 : 64bits Chunk Offset Box
ㄴ ctts : Composition Offset Box
ㄴ stco : Chunk Offset Box
ㄴ stsd : Sample Description
ㄴ stsc : Sample To Chunk Box
ㄴ stss : Sync Sample [ 샘플의 시간 값 ] > 재생 시간 | timescale
ㄴ stsz : Sample Size Box
ㄴ stts : Time To Sample Box
위 정보가 있는 지 확인해 보자
어느것이 음성이고 어느것이 영상인지는 우선 나중에 찾고
아래와 같이 트랙 내의 샘플은 다음과 같이 개수를 가지고 있었다
DTS (Decoding time Stamp) 와 PTS (Presentation Tome Stamp)를 구할 수 있다.
ㄴ DTS 는 디코딩 되어야 하는 시점
ㄴ PTS 는 디코딩 후 재생되어야 하는 시점
[ stts 정보 ]
Entry Count [335]
샘플 개수 [개] 재생시간
sample-count : [1] | sample-delta : [1272]
sample-count : [2] | sample-delta : [1303] ==> 샘플 2개를 합쳐서 1초
sample-count : [1] | sample-delta : [1272]
sample-count : [2] | sample-delta : [1303]
sample-count : [1] | sample-delta : [1272]
sample-count : [2] | sample-delta : [1303]
sample-count : [1] | sample-delta : [1272]
sample-count : [2] | sample-delta : [1303]
sample-count : [1] | sample-delta : [1273]
.... 계속
Sample Count [5]
Sample Count [374]
Sample Count [37]
B 프레임이 존재하는 경우 샘플의 시간 순서가 순차적이 않다. 이럴 경우 다음 ctts 박스를 포함 하여 PTS를 구해야 와야 한다.
위 현재 파싱하고 있는 영상은 ctts 찾을 수 없었다.
Media Chunk와 Sample
[ stsc 정보 ]
Entry Count [41]
첫번째 청크 | 청크당 샘플 개수 | 샘플을 기술한 식별자
first-chunk : [1]|sample-per-chunk : [13]|sample-description-index : [1] ==> 청크 1번에 13개의 샘플이 존재
first-chunk : [2]|sample-per-chunk : [11]|sample-description-index : [1]
first-chunk : [3]|sample-per-chunk : [12]|sample-description-index : [1]
first-chunk : [4]|sample-per-chunk : [11]|sample-description-index : [1]
first-chunk : [5]|sample-per-chunk : [12]|sample-description-index : [1]
first-chunk : [6]|sample-per-chunk : [11]|sample-description-index : [1]
first-chunk : [7]|sample-per-chunk : [12]|sample-description-index : [1]
.... 계속
이 영상은 1,2,3 ...... 로 되어 있지만
1,3,5 ... 이렇게 첫번째 chunk 가 나올 수도 있는데
그럴 경우는 2개의 청크에 샘플 13개 이렇게 정보가 나올 수 있다
기술 식별자 [ sample-description-index ] 1은 ==> stsd 박스와 연결이 되어 있다
Sample의 사이즈를 다음 박스 정보를 참조하여 얻어낸다.
[ stsz 정보 ]
Sample count [480]
Entry-size [1552]
Entry-size [400]
Entry-size [945]
Entry-size [1494]
Entry-size [2527]
Entry-size [3693]
Entry-size [4216]
Entry-size [5136]
Entry-size [6479]
Entry-size [7198]
Entry-size [8029]
Entry-size [8872]
Entry-size [9822]
------------------------ 첫번째 Chunk 13 개
이는 Sample의 Size 이다
청크의 위치
stco, co64 박스 정보 참조 [ 파일 크기가 4GB 초과 시 co64 사용 ]
청크의 OFFSET 테이블
[ stco 정보 ]
Entry Count [42]
청크 [ offset ]
chunk-offset [17736] ==> 17736 ~ [ 60 ] [ 32 ] .... ( 13 개 )
chunk-offset [84662]
chunk-offset [196261]
chunk-offset [270218]
chunk-offset [332059]
chunk-offset [383416]
chunk-offset [449724]
chunk-offset [559602]
chunk-offset [690399]
chunk-offset [803942]
이는 파일의 OFFSET이다
첫 번째 Sample 두 번째 Sample 실제 OFFSET 위치에서만큼 실제로 읽어보도록 한다.
00 00 01 B3 00 10 07 00 00 01 B6 10 00 18 14 60 5F DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C8 78 41 64 18 DB 60 C3 1D 09 58 82 C8 31 B6 C1 86 3A 12 D3 F9 18 82 C8 31 B6 C1 86 3A 12 B1 05 90 63 6D 83 0C 74 25 6F E4 62 0B 20 C6 DB 06 18 E8 4A C4 16 41 8D B6 0C 31 D0 95 BF 91 88 2C 83 1B 6C 18 63 A1 2B 10 59 06 36 D8 30 C7 42 56 FE 46 20 B2 0C 6D B0 61 8E 84 AC 41 64 18 DB 60 C3 1D 09 5B F9 18 82 C8 31 B6 C1 86 3A 12 B1 05 90 63 6D 83 0C 74 25 6F E4 62 0B 20 C6 DB 06 18 E8 4A C4 16 41 8D B6 0C 31 D0 95 BF 91 88 2C 83 1B 6C 18 63 A1 2B 10 59 06 36 D8 30 C7 42 56 FE 46 20 B2 0C 6D B0 61 8E 84 AC 41 64 18 DB 60 C3 1D 09 5B F9 18 82 C8 31 B6 C1 86 3A 12 B1 05 90 63 6D 83 0C 74 25 6F E4 62 0B 20 C6 DB 06 18 E8 4A C4 16 41 8D B6 0C 31 D0 95 BF 91 88 2C 83 1B 6C 18 63 A1 2B 10 59 06 36 D8 30 C7 42 56 FE 46 20 B2 0C 6D B0 61 8E 84 AC 41 64 18 DB 60 C3 1D 09 5B F9 18 82 C8 31 B6 C1 86 3A 12 B1 05 90 63 6D 83 0C 74 25 6F E4 62 0B 20 C6 DB 06 18 E8 4A C4 16 41 8D B6 0C 31 D0 95 BF 91 88 2C 83 1B 6C 18 63 A1 2B 10 59 06 36 D8 30 C7 42 56 FE 46 20 B2 0C 6D B0 61 8E 84 AC 41 64 18 DB 60 C3 1D 09 5B F9 18 82 C8 31 B6 C1 86 3A 12 B1 05 90 63 6D 83 0C 74 25 6F E4 62 0B 20 C6 DB 06 18 E8 4A C4 16 41 8D B6 0C 31 D0 95 BF 91 88 2C 83 1B 6C 18 63 A1 2B 10 59 06 36 D8 30 C7 42 56 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB FA 5B F5 F7 42 FF A5 B7 05 B1 1F F1 B7 9F C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 74 2D F9 E5 27 78 5F FC CA 85 9F F6 EB 4A 0E D1 8D AD A9 59 CC 2E F8 E1 B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C9 15 CA 50 19 92 F9 1C 68 F4 C7 37 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF C6 DB 7F 1B 6D FC 6D B7 F1 B6 DF D2 DC 88 0C 83 1A 6C 18 61 A1 23 10 19 06 34 D8 30 C3 42 4F A5 B6 20 32 0C 69 B0 61 86 84 8C 40 64 18 D3 60 C3 0D 09 3E 96 D8 80 C8 31 A6 C1 86 1A 12 31 01 90 63 4D 83 0C 34 24 FA 5B 62 03 20 C6 9B 06 18 68 48 C4 06 41 8D 36 0C 30 D0 93 E9 6D 88 0C 83 1A 6C 18 61 A1 23 10 19 06 34 D8 30 C3 42 4F A5 B6 20 32 0C 69 B0 61 86 84 8C 40 64 18 D3 60 C3 0D 09 3E 96 D8 80 C8 31 A6 C1 86 1A 12 31 01 90 63 4D 83 0C 34 24 FA 5B 62 03 20 C6 9B 06 18 68 48 C4 06 41 8D 36 0C 30 D0 93 E9 6D 88 0C 83 1A 6C 18 61 A1 23 10 19 06 34 D8 30 C3 42 4F A5 B6 20 32 0C 69 B0 61 86 84 8C 40 64 18 D3 60 C3 0D 09 3E 96 D8 80 C8 31 A6 C1 86 1A 12 31 01 90 63 4D 83 0C 34 24 FA 5B 62 03 20 C6 9B 06 18 68 48 C4 06 41 8D 36 0C 30 D0 93 E9 6D 88 0C 83 1A 6C 18 61 A1 23 10 19 06 34 D8 30 C3 42 4F A5 B6 20 32 0C 69 B0 61 86 84 8C 40 64 18 D3 60 C3 0D 09 3E 96 D8 80 C8 31 A6 C1 86 1A 12 31 01 90 63 4D 83 0C 34 24 FA 5B 62 03 20 C6 9B 06 18 68 48 C4 06 41 8D 36 0C 30 D0 93 E9 6D 88 0C 83 1A 6C 18 61 A1 23 10 19 06 34 D8 30 C3 42 4F A5 B6 20 32 0C 69 B0 61 86 84 8C 40 64 18 D3 60 C3 0D 09 3E 96 D8 80 C8 31 A6 C1 86 1A 12 31 01 90 63 4D 83 0C 34 24 FA 5B 62 03 20 C6 9B 06 18 68 48 C4 06 41 8D 36 0C 30 D0 93 E3 22 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FE 36 DB F8 DB 6F E3 6D BF 8D B6 FD
00 00 01 B6 50 A1 DC 08 FF FF FF FF FF FF FF FF FF FF FF FF FF FD 4F C7 D5 00 4B 1A A0 09 FF FF A2 CB BE 19 9F 06 54 24 FC F0 6C 13 2C A5 86 15 06 EC E9 18 C4 47 1F 88 04 63 81 F8 32 74 82 55 2D 4E CB 4A B1 05 FB 33 C1 4F 86 E6 03 3D 26 93 85 A5 C4 20 62 F4 C2 5E 29 54 CB 49 FC 6F DF 9A 2F 70 A4 7C 96 6C E9 FE 30 03 C0 F1 72 A5 67 FF FF D5 00 E8 20 09 3F C8 7C 21 09 3E 53 1E 06 D4 08 3E 80 16 0F 40 78 0F D3 C1 87 60 75 B0 61 24 20 8E BC 95 96 15 17 25 FB 1E F4 B6 73 3D 79 87 14 12 D5 87 D4 54 80 3C 07 E7 E0 C2 50 41 07 81 FE B4 43 10 D5 17 37 F4 C3 D6 44 16 B7 25 B2 CB 05 4C BA 98 69 7E 8B 8F 21 51 66 87 3D CE 0B CF 81 BC 0F 01 05 38 30 28 C1 0C 48 06 6C 4A 1D 51 FE FD 20 F5 3B 4A 9B C6 F7 B9 73 FB 31 0A C5 0F 02 F4 07 16 5A D3 E7 01 E0 20 87 06 05 20 20 89 20 A1 1E 27 A9 9B 61 53 0C F9 BD 6E CB CC 99 BD 3E 68 10 3F BD F4 5D 69 27 45 10 86 88 82 B5 C0 5C 20 09 57 63 82 00 42 83 A7 7F FF B4 03 81 0A AF C3 E1 B4 04 31 22 E9 F0 4A 89 60 D1 A4 A5 4A D3 34 AF 0D 37 E9 BC 1A 8A 7E AA 69 00 56 D1 21 AA 80 2A 57 0D B1 D0 29 1A 49 27 95 2A F3 1E 0E 3D E9 90 2A 22 10 04 82 CB 2F 08 9E 08 CD 60 89 06 88 79 89 84 1E D8 11 04 72 43 9F FF F7 40 2D CC 0F FF FF FF FF FF FF FF FF FF FF FF FF FF FD
그럼 첫번째 청크의 샘플 데이터가 맞는지 확인 해 보자
ㄴ https://mp4explorer.codeplex.com/
로 확인해 본다.
이 프로그램을 이용하여 샘플을 확인해 보자
위와 같이 샘플을 뽑아낼 수 있으면, ts파일, flv 파일 로 전환 할 수 있다.
FLV 로 변환 하는 것은 다음 블로그에 작성 할 예정이다.
'분석' 카테고리의 다른 글
[MPEG TS] 구조 분석 (0) | 2018.01.02 |
---|---|
HLS ( Http Live Streaming ) 분석하기 (4) | 2017.12.12 |
[MP4] 분석 하기 | MPEG-4 파트 14 | MP4Box 설치 (5) | 2017.11.26 |
네트워크명령어 [ ping ] 분석 (0) | 2017.11.23 |
네트워크 명령어 [ ping ] (0) | 2017.11.20 |