개발하는 두더지

MP4 파일이 스트리밍이 안될때..? MOOV를 이동시켜 해결하기 본문

Java,Android

MP4 파일이 스트리밍이 안될때..? MOOV를 이동시켜 해결하기

덜지 2017. 2. 16. 16:08

모든 MP4 영상은 moov 이라는 헤더를 가지고 있습니다.

moov 는 비디오 데이터의 인덱스 역할을 합니다.

플레이어가 이 인덱스에 접근할때까지 영상은 재생되지 않습니다.

보통 moov는 파일을 설명하는 모든 정보가 생성된 뒤에 파일의 끝에 저장됩니다.

progressive download, streaming, local playback 등 에 따라 moov가 파일의 끝에 필요할지, 파일의 앞에 필요할지 결정됩니다


만약 progressive download, streaming(RTMP or HTTP)의 경우 moov는 파일의 앞에 위치해야합니다.

스트리밍 종류 (http://duzi077.tistory.com/140)


필수적인 영상 정보가 처음 다운로드 되고, 바로 영상을 재생할 수있게 활성화됨을 보장합니다.

만약 moov 가 영상의 끝에 위치한다면 처음에 강제로 파일 전체를 다운로드하게 됩니다. 

만약 파일이 로컬에서 실행된다면, moov는 영향을 주지않습니다. 때문에 전체 파일을 바로 재생할수있습니다.


요약하면 미디어 파일을 다운로드 하는 동안 비디오 뷰가 빠른 재생을 할수있도록 MP4 파일의 메타데이터를 조정하는 과정이 필요합니다.


moov의 위치는 다양한 소프트웨어 프로그램으로 확인할수있습니다

또한 moov 의 위치를 파일의 앞으로 재배치 시켜주는 툴도 있습니다. 그 중의 하나가 popencoder 입니다

moov 위치를 다루는 가장 최선의 방법은 영상을 인코딩때 설정하는 것입니다. 이것이 moov가 끝에 놓여지는 것을 최소화합니다


앞서 언급했듯이, moov가 파일의 맨앞에 위치하는것은 영상을 빠르게 재생시키고, 클라이언트 플레이어가 데이터 페이로드에 접근하고 영상을 디코딩 할수 있게 합니다 즉, 영상이 시작하기전에 moov 데이터를 반드시 받아야만 합니다.

그리고 moov 위치로 인해 발생하는 리버퍼링을 피하기 위해서 항상 인코딩할때 moov 를 앞에 위치시키는 것을 추천합니다.





ftyp

파일의 호환성을 확인하는 파일 타입 박스


moov 

미디어의 모든 메타 데이터를 저장하는 무비박스


mvhd

무비 헤더 박스


trak

무비안의 단일 트랙을 정의하는 박스로 트랙의 특성, 미디어 특성, 디코딩시 필요한 코덱 정보등 여러정보가 있다.


mdat

실제 미디어를 저장하는 미디어 데이터박스




다음팟 인코더를 설치하여 파일의 moov 위치 변경




<변경 전>


<변경 후>



변경후에 moov 가 위쪽으로 이동됨을 확인 할 수 있고 스트리밍이 정상적으로 재생이된다.



헤더 확인 툴 : http://www.jongbel.com/manual-analysis/atombox-studio/


AtomBoxStudioPRO_Trial.msi 를 다운받아서 확인가능



-----------------------------------

17.12.06 기준


위 링크 또는


https://mp4explorer.codeplex.com/ 


헤더 확인용으로 더 괜찮은 툴인듯..




Comments