본문 바로가기
잡(job)기술/ffmpeg 라이브러리

DASH 미디어 생성할 때, segment와 fragment

by 무니이구나 2022. 7. 28.

구글에서 DASH라고 검색을 하면 원하는 자료가 잘 나오지 않는다. MPEG-DASH 혹은 DASH streaming 등으로 검색을 하면 제대로 검색을 할 수 있는 것 같다. DASH가 어떤 표준이고, 어디에 사용되는지 등의 내용을 구글링에 맡긴다.

DASH 나 HLS 방식의 미디어는 다른 미디어와는 다르게 파일이 쪼개어 구성이 된다. 그래서 segment니, fragment라는 말을 자주 보게 되는 것 같다.

 

segment는 DASH의 특성이며, 웹을 통해 다운로드하게 되는 최소의 단일 파일을 의미한다. mp4 포멧으로 생성한다면 m4s라는 확장자로 저장되는 파일을 말한다. 마지막에 s가 의미하는 것이 아마도 segment 의 약자일 것 같다. 이 파일이 생성되는 기준은 일반적으로 duration 이라 불리는 시간 단위이다. 영상의 GOP(Group Of Picture)가 있기 때문에 정확히 초가 맞지는 않으리라 예상하며, 최소 단위라고 하니, 이 시간에 근접한 단위로 파일이 생성된다고 짐작할 수 있다.

 

그렇다면, fragment란 무엇인가. fragment는 mp4 포멧의 특성이다. fragmented mp4라는 포멧이 존재하는데, 일반 mp4 파일은 하나로 존재하는 반면, 스트리밍 용도로 조각내서 처리하는 용도로 만들어진 포멧이 아닐까 한다. 지식이 빈약한 관계로 추론으로 글을 작성할 수 밖에 없는 상황에 탄식이 든다. 아무튼 mp4는 box 형태로 미디어 종류가 구분되어 합쳐져 있는데, 일반적인 mp4는 다음과 같은 형태를 가진다.

| ftyp - moov - mdat |

혹은,

| ftyp - mdat - moov |

반면, fragmented mp4는 다음과 같은 형태로 구성된다.

| ftyp - moov | moof - mdat | moof - mdat | ...

 

즉, mdat가 작은 조각으로 나뉘어져 앞에 moof 라는 헤더를 달고 있는 형태라고 볼 수 있다. 그래서 아마도 fragment라는 용어를 쓴 것이 아닐까.

 

box에 대한 설명은 다음 링크에서 아주 잘 설명이 되어 있다.

https://unipro.tistory.com/104

 

MPEG-4 파일의 구조 개괄

박스(box) 파일의 기본 단위로 크기와 타입, 데이타를 가진다. 크기는 크기와 타입 필드를 포함한 박스의 전체 크기이다. 데이타는 타입에 따른 데이타나 자식 박스(child box)가 올 수 있다. 예전에

unipro.tistory.com

 

전체적으로 보면, 스트리밍을 위해서 DASH는 segment 라는 단위로 파일을 나눠서 미디어를 전송하게 되고, 이 segment가 mp4 포멧을 사용한다면, 이 내부에는 여러 개의 fragment 로 구성되어 저장되어 있는 것으로 정리할 수 있다.

그래서 ffmpeg을 이용해서 DASH형태로 변환을 하게 된다면 --seg_duration 이라는 옵션을 사용할 수 있으며, 초 단위의 값을 설정할 수 있다. 즉, segment의 duration을 설정하는 것이다.

'잡(job)기술 > ffmpeg 라이브러리' 카테고리의 다른 글

Remux 클래스로 전환  (0) 2022.04.06
명령 라인 처리 옮기기  (0) 2022.04.01
remuxing.c 를 c++로 wrapping하기  (0) 2022.03.30
remuxing.c 빌드하기  (0) 2022.03.28
av_frame_free에 대한 고찰  (0) 2018.03.13