«   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. 18. 19:48

사용자가 요구한 시간의 값으로 

MP4 의 정보에서 stts 값으로 해당 시간값을 분석하였다.


해당 시간 값을 분석하여 샘플의 위치를 구하고 샘플의 사이즈를 구하고자 한다.

mp4 는 chunk 단위로 샘플의 개수를 나타나는데, stts 의 샘플의 위치로 stsc의 sample_per_chunk 의 개수를 통해서 

chunk_index 를 구해올 수 있다. 

여기서 구해진 chunk_index 는 stco 의 배열의 위치를 가르키게 되는데 chunk_index 는 1번이지만 stco 의 위치는 배열의 첫번째 0 부터 시작한다 해서 chunk_index 의 값의 -1 을 하게 되면 stco 의 위치를 가르키게 됩니다.


샘플의 위치를 이용하여 stsz 에서 사이즈를 가져옵니다.

chunk_index 의 값은 각 샘플의 첫번째 chunk_offset 위치를 가르키게 되는데 이는 샘플의 순서에 맞게 offset 위치를 조정해 주어야 합니다.

예를 들면 첫번째 샘플의 offset 을 1 이라고 하였을 때 첫번째 샘플의 chunk offet 과 두번째 샘플의 chunk offset 모두 1로 나옵니다.

이 경우 첫번째 샘플의 사이즈 가 200 인 경우 다음 두번째 샘플의 chunk offset 은 201이 됩니다.


chunk offset 의 변화가 있을 경우 chunk offset 은 해당 위치로 이동하고 다시 샘플의 사이즈 만큼 이동하게 합니다.


이전의 stts 의 값으로 pts 값을 구해왔으며, 해당 pts 값을 통해서 정렬을 한 후 위와 같이 해당 sample의 사이즈와 chunk_offet 위치를 

샘플의 배열에 입력한 후에 오디오와 비디오 의 sample 을 합치고 해당 pts 값으로 정렬을 하여 두개의 샘플데이터를 하나의 샘플 배얼에 

추출하였습니다.


이를 다시 원본파일에서 해당 offet 위치로 seek 하여 샘플사이즈 만큼 읽게 하여 샘플링을 하였습니다.


다음은 TS 를 분석하여 해당 ts 와 같은 구조로 재결합할 수 있도록 준비하는 과정입니다.









반응형
Comments