«   2024/05   »
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

[ Cube Project ] 개발 일지 ( 샘플링하기 ) 본문

프로젝트

[ Cube Project ] 개발 일지 ( 샘플링하기 )

라떼청년 2018. 11. 16. 02:33

이전 작업으로 MP4 를 이용한 분석을 통해서 샘플데이터를 추출해 볼 수 있습니다. 

또한 HLS 를 이용하여 segment list 를 추출해 줄 수도 있습니다.


이제는 TS 를 만들어야 합니다.

사용자로 하여금 요구된 시간만큼 TS 로 muxing 을 해야 합니다.


다음 조건을 충족해야 합니다.


해당 조건은 요구된 시간입니다.

ㄴ 시간 정보를 통해서 샘플의 데이터를 가져와야 합니다. 

ㄴ 사용자가 요구하는 시간의 시작지점과 요구되는 duration 값을 받습니다.

    예를 0초 부터 10초  10초 부터 20 초간격의 데이터를 요구하는 경우 다음과 같이 받도록 합니다.

    0초 부터 10초 ( 0, 10 )

    10초 부터 20 초 ( 1, 10 )


     첫번째는 sequence, 두번째는 duration 으로 칭합니다. 


저에게는 MP4 의 총 duration 정보를 알수 있습니다.

ㄴ moov > mvhd > duration | moov > mvhd > timescale 

timescale : 1000

ㄴ duration : 596567


저에게는 MP4 정보 중에서 Chunk 의 Offet 정보를 알수 있습니다.

ㄴ Chunk 는 Sample 의 집합체 입니다. 즉 한개의 Chunk 에는 여러개의 Sample이 존재 할 수 있습니다. 


저에게는 MP4 정보 중에서 Trak 정보를 얻을 수 있습니다.

ㄴ Trak > mdia > hdlr > handler-type : vide, soun 으로 구분으로 Sound 데이터와 video 데이터로 구분하였습니다.


시간 정보를 통해서 Chunk 의 Offet 위치를 찾아야 합니다.

ㄴ 시간 알아내기 위해서 stts 테이블을 확인해 보았습니다. 


(샘플)

Video : [{'count': 14315, 'delta': 512}]

Audio : [{'count': 25687, 'delta': 1024}, {'count': 1, 'delta': 423}]


Video 는 512 duration 을 가진 샘플의 개수가 14315 개를 가지고 있습니다.

ㄴ 512 * 14315 = 7329280

Audio 는 1024 duration 을 가진 샘플의 개수가 25687 개를 가지고 있습니다.

ㄴ 1024 * 25687 = 26303488 + 423 = 26303911

입니다. 위 mvhd 기준의 timescale 기준으로는 정상적인 총 durtaion 이 아닙니다.


영상의 총 길이 timescale 1000 에서 duration 596567 ( moov > mvhd 참조 )

596567 / 1000 = 596.567


해당 timescale 과 해당 duration 정보는 각 trak 에 있는 mdia > mdhd 의 테이블을 확인해 봤습니다.

Video : {'language': '1010111000111', 'timescale': 12288, 'modification_time': '1970-01-01 00:00:00', 'flag': 0, 'version': 0, 'create_time': '1970-01-01 00:00:00', 'duration': 7329280}

video 의 샘플 timescale 은 1초에 12288 입니다.

7329280 / 12288 = 596.4583333333333


Audio : {'language': '1010111000111', 'timescale': 44100, 'modification_time': '1970-01-01 00:00:00', 'flag': 0, 'version': 0, 'create_time': '1970-01-01 00:00:00', 'duration': 26303911}

audio 의 샘플 timescale 은 1초에 44100 입니다.

26303911 / 44100 = 596.460566893424


즉 Video 의 1초를 가지려면 512를 가진 샘플을 12288 이 되도록 계산을 해야 합니다.

12288 / 512 = 24  즉 1초의 Video 샘플은 24개가 됩니다.


같은 방식으로 Audio 의 1초를 가지로면 1024를 가진 샘플을 44100이 되도록 계산을 해야 합니다.

44100 / 1024 = 43.06640625


물론 위 샘플은 동일한 duration 을 가지고 있는 샘플이 존재하기 때문에 쉽게 계산이 되지만, 도중에 duration 이 다를 수 있는 점 유의 해야 합니다.



이로써 사용자가 요구하는 시작 시점의 샘플의 위치를 stts 를 이용해 몇번째 샘플부터 몇개의 샘플을 추출해야 하는지에 대한 정보를 가져보았습니다.






반응형
Comments