VIDEOCUBE
[ Cube Project ] 개발 일지 ( 샘플링하기 ) 본문
사용자가 요구한 시간의 값으로
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 와 같은 구조로 재결합할 수 있도록 준비하는 과정입니다.
'프로젝트' 카테고리의 다른 글
[ Cube Project ] 개발 일지 ( TS 만들기 ) (0) | 2018.11.24 |
---|---|
[ Cube Project ] 개발 일지 ( TS 분석 ) (0) | 2018.11.23 |
[ Cube Project ] 개발 일지 ( 샘플링하기 ) (0) | 2018.11.16 |
[ Cube Project ] Python MP4 Streaming Server (0) | 2017.12.05 |
[Cube Project] Nginx + Python CGI 연동 준비 (0) | 2017.12.04 |