«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

VIDEOCUBE

[MP4] 파일 미디어 샘플과 시간 정보를 구하는 방법 본문

분석

[MP4] 파일 미디어 샘플과 시간 정보를 구하는 방법

라떼청년 2017. 11. 29. 01:41


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 로 변환 하는 것은 다음 블로그에 작성 할 예정이다.







반응형
Comments