본문 바로가기

TechLog

여러 스마트폰 플랫폼에서 재생할 오디오/비디오 포맷 선택하기

여러 스마트폰을 대상으로 앱을 개발해야 하는데 그 앱이 미디어를 다루는 앱이거나 미디어 리소스를 앱에 포함시켜야 할 경우, 각 플랫폼 별로 지원하는 미디어 포맷이 다르기 때문에 어떤 포맷을 기준으로 삼아야 할지 결정을 내려야 할 경우가 있다.

오디오의 경우에는 선택이 그리 어렵지 않다. 기존 오디오의 리소스 자체가 워낙 mp3로 많이 만들어져 있는데다가, 각 스마트폰도 mp3 포맷은 다들 기본적으로 지원하고 있기 때문이다. mp3 포맷이 이미 존재하고 관련 라이브러리도 많은데 굳이 aac, wma, ogg 같은 포맷을 사용하는 위험 부담을 감수할 필요는 없으니까 말이다. (물론 라이선스 문제, mp3 포맷 자체의 효율성과 같은 문제가 있긴 하지만, 워낙에 mp3 포맷을 많이 쓰다보니)

비디오의 경우에도 상황은 비슷하다. 비디오 리소스 자체는 mp3와 달리 다양한 포맷의 리소스가 상존하지만, 대부분의 스마트폰이 h.264(=MPEG4 AVC) 코덱을 공통적으로 지원하고 있기 때문에 스마트폰을 대상으로 하는 영상 서비스들은 대부분 h.264 코덱을 사용하는 mp4 파일을 기본 영상 포맷으로 사용하고 있다. 최근 나오는 스마트폰은 대부분 h.264 코덱의 Main/High Profile도 지원하고 있어, 적은 용량으로도 고화질의 영상을 재생할 수 있는 기능을 갖추고 있다.

h.264에는 Profile이라는 개념이 있다. 이는 디바이스의 재생 능력과 성능을 고려한 일종의 규약이라고 할 수 있는데, Profile에 따라서 리소스의 용량과 화질, 디바이스의 재생 성능을 트레이드-오프하는 것이 가능하다. 이를테면 iOS, Android, WP7에서 공통적으로 지원하는 h.264의 Baseline Profile은 상대적으로 낮은 성능의 디바이스에서도 운용이 가능한 대신, 리소스의 용량이 증가하게 되는 식이다. 자세한 내용은 아래의 위키피디어 문서 등을 참고하자.

하지만 안드로이드는 공식적으로 h.264의 Baseline Profile을 지원하는 것으로 되어 있다. 안드로이드는 h.264 - Baseline Profile로 인코딩된 영상만을 재생할 수 있다는 의미는 아니고, “모든 안드로이드는 최소한 h.264 - Baseline Profile로 인코딩된 영상을 재생할 수 있다”라는 의미이다. 실제로 안드로이드 기기에서 mp4 파일을 재생해보면 알겠지만, 기기에 따라서 재생이 되기도 하고 안 되기도 한다. 기기 제조사에서 안드로이드를 제조하면서 OS에 코덱을 추가하거나 뺄 수 있는 구조인 것이다.

iOS의 경우도 비슷한 측면이 있는데, 현재 애플에서 판매하고 있는 iOS 기기(아이폰 4/4S, 아이패드1/2, 아이팟 터치 4G 등)는 모두 High Profile을 지원한다. 하지만 이전 기기들(예를 들면 아이폰 3GS)은 Baseline Profile까지만 지원하는 기기도 있다.

그러므로 만약 스마트폰 기기에 들어가는 비디오 리소스를 직접 제작하는 상황이면서 하위 호환성을 확보하고 싶다면, 가급적 h.264 Baseline Profile을 기본 인코딩으로 생각하고 작업하는 것이 좋겠다. 하위 호환성보다 리소스의 용량을 줄이는게 더 중요하다면 Main/High Profile을 고려하는 것이 좋을테고. (하지만 아까 언급했듯, 안드로이드의 경우 기기마다 지원하는 Profile 수준이 상이하다는 점을 고려하자!)

 

그럼 테스트 목적으로 이러한 비디오 리소스를 얻으려면 어떻게 해야 할까?

대규모로 영상을 처리해야 한다면 모르겠지만, 간단한 테스트 혹은 기존 리소스의 변환 정도가 목적이라면 Daum의 팟인코더(http://tvpot.daum.net/application/PotEncoder.do)를 사용해 봄직하다. (개인적인 의견이지만 ... 팟인코더 정말 훌륭한 프로그램이다. 프로그램의 개발자와 Daum에게 감사드립니다 굽신)

인코딩 –> 코덱설정(코덱은 MPEG-4 AVC/h.264) –>고급 옵션 설정을 보면 이와 같이 Profile을 설정할 수 있는 옵션이 나타나는 것을 볼 수 있다. 여기서 Profile 수준을 결정해서 인코딩한 후, 각 기기에서 정상적으로 재생되는지 테스트를 해 보면 된다.

혹은 YouTube 영상을 다운로드 받아서 테스트를 해도 된다. 다만, YouTube 영상의 경우 720p 이상의 영상은 Main Profile로 인코딩되므로 일부 안드로이드 기기에서는 재생이 안 될 수 있다.

 

 

- 참고: