출처: http://daoudev.tistory.com/28   다우기술SW 공식 블로그 



iOS 또는 안드로이드 기반의 모바일 기기에서 지원하는 동영상 파일 포맷재생 방법과 동영상을 재생하기 위해 필요한 기술에 대해서 살펴보도록 하겠습니다.

 

 

1. 지원 파일

 

 

안드로이드 공식 지원 파일 포맷

코덱

확장자

비고

H.263

3gp, mp4

 

H.264 AVC

3gp, mp4, ts

인코딩은 허니컴부터 지원

ts 형식 또한 허니컴부터 지원

MPEG-4 SP

3gp

 

VP8

webm, mkv

2.3.3 부터 지원

스트리밍 형태는 ICS 부터 가능

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

아이폰 공식 지원 파일 포맷

코덱

확장자

비고

H.264

m4v, mp4, mov, 3gp

640 * 480, 30fps, 1.5Mbps

320 * 240, 30fps, 768Kbps

MPEG-4

m4v, mp4, mov, 3gp

640 * 480, 30fps, 2.5Mbps

 

 

 

 

 

 

 

 

 

 

2. 모바일 동영상 재생 방법

 

동영상은 다운로드 또는 스트리밍 방식으로 재생할 수 있습니다.

안드로이드 기반의 모바일 기기에서는 RTSP(Realtime Streaming Protocol)/HLS(HTTP Live Streaming) 지원합니다. 단, HLS 안드로이드 3.0 이상의 OS부터 지원하고 있습니다. iOS기반의 아이폰은 HLS1 지원하며,이외의 방식은 reject 사유에 포함됩니다.

 

참고로 아이폰에서의 동영상 재생 심사 기준에 대해서 알려드리겠습니다.HLS를 사용하지 않고, 10Mb이상의 파일을 스트리밍 형식으로 재생하는 경우 reject 사유에 포함됩니다.

 

- 인코딩시 비트레이트 조건

화질

비디오

오디오

Low

96Kbps

64Kbps

Medium

256Kbps

64Kbps

High

800Kbps

64Kbps

 

 

모바일에서 일반 동영상 파일을 재생 하기 위해서는 모바일 플랫폼별 지원 포맷으로 변환하는 과정이 필요합니다. (FFmpeg Open Source 에서 지원)

 

 

3. FFMpeg 소개

 

FFMpeg는 인코딩2/먹싱3/트랜스코딩/디먹싱4/디코딩5/스트림/재생 등 멀티미디어 관련한 거의 모든기능을 갖추고 있는 오픈 소스 멀티 미디어 프레임워크입니다. 크로스 플랫폼(Cross Platform)을 지원하고 GNU Lesser General Public License (LGPL) 라이선스에 의해 배포됩니다.

FFMpeg는 간단한 동영상 출력 프로그램인 ffplay도 제공합니다.

 

FFMpeg Library

  • libavcodec: 오디오/비디오의 인코더/디코더

  • libavformat: 오디오/비디어 컨테이너 포맷의 muxer/demuxer
  • libavutil: FFmpeg 개발  필요한 다양한 유틸리티
  • libpostproc: video post-processing
  • libswscale: 비디오의 image scaling, color-space, pixel-format 변환
  • libavfilter: 인코더와 디코더 사이에서 오디오/비디오를 변경하고 검사
  • libswresample: 오디오 리샘플링(audio resampling)

 

일반적인 컨버팅 절차

 

FFMpeg 동영상 컨버팅 과정

 

 

출처: http://helloworld.naver.com/helloworld/8794

 

1) libavformat  통해 비디어코덱과 오디오 코덱의 정보를 추출

2) libavcodec  통해 비디오/오디오 데이터를 디코딩

3) PC, 모바일에서 동일하게 적용되는 방법이며 위에서 추출한 데이터를 기반으로 파일로 저장/재생/편집

 

 

동영상 플레이어 구현 방법

 

출처: http://helloworld.naver.com/helloworld/8794

 

1) 컨버팅 과정에서 받은 정보를 큐에 저장

2) 큐에 저장된 정보를 SDL6 통해서 지속적으로 렌더링하여 재생

 - 영상비디오 Refresher 프레임 갱신을 요청/처리하여 비디오 Renderer 통해서 화면에 출력

 - 오디오오디오 Renderer 통해 오디오 정보를 재생

 

 

4. 구현 방법 시나리오

 

A. 서버에서 변환하는 경우

 

A-1) 컨텐츠 제공자가 파일을 등록할  변환

 

- 파일이 업로드 되면 서버에서 자동으로 파일을 변환하여 저장하는 방식

- FFmpeg 에서 제공하는 변환 기능을 통해 업로드  파일을 변환 저장 가능

- 유튜브네이버네이트  동영상 스트리밍 서비스에서 주로 사용되는 방식

 

A-2) 컨텐츠 제공자가 파일 스트리밍 요청할 때 변환

 

스트리밍 요청이 왔을 때 서버에서 실시간으로 변환하며 스트리밍

- 네이버 N드라이브가 모바일에서 동영상 전송시 사용되는 방식

- 대다수의 RTSP, HLS 기능을 포함한 서버 툴이 이러한 방식을 사용

 

A-3) 컨텐츠 제공자가 규약된 포맷으로 변환 후 업로드

 

- 컨텐츠 제공자가 규약된 포맷으로 변환하여 서버에 업로드

- 개인 사용자가 사용 가능한 다양한 변환 툴7이 있음.

- 개인용 서버에서 주로 사용되는 방식


 

B. 모바일에서 변환하는 경우

 

B-1) 변환 후 내장 플레이어로 플레이 가능한 파일로 저장

 

- 전달받은 영상 정보를 파일로 변환하여 저장 후 재생하는 방식

- FFmpeg 에 내장된 기능으로 특정 포맷으로 파일 변환/저장이 가능

- 일반 듀얼코어 PC 에서 800M 영상을 변환시 12분 소요

- 이보다  성능이 낮은 모바일 기기에서 구현시 배터리와 성능에 있어서 많은 문제가 있을것으로 예상됨.

 

B-2) 변환 후 내장 플레이어로 데이터 전달

 

 

- 내장 플레이어에 접근 가능한 모듈을 통해 변환 정보를 전송하는 방식

- 모바일 내장 플레이어에 대한 플러그인이 공식적으로 지원되지 않음.

- 별도의 제조사별 협의가 필요하며 다양한 기기에 대한 지원 대책이 필요함.

 

B-3) 변환 기능이 포함된 플레이어를 통해 플레이

 

 

- 전달 받은 영상 정보를 변환 모듈을 추가한 플레이어를 통해 재생하는 방식

- 가장 일반적인 방법으로 FFmpeg 를 활용한 다양한 플레이어가 있음.

- NHN 의 N드라이브 내장 플레이어 (안드로이드, iOS), AVPlayer (iOS) 가 개발 소스를 공개함.8

 

  1. HTTP Live Streaming 애플에서 2009년 iOS 3.0 발표 때 내놓은 프로토콜로 스트리밍 데이터를 MPEG-2 TS에 담아 시간단위로 쪼개서 보냅니다. Adobe사는 Flash Media Server 4.0에서, MicroSoft에서는 IIS Media Server 4.0 에서부터 정식 지원했으며 안드로이드는 3.0에서부터 지원합니다. [본문으로]
  2. 인코딩 (Encoding): 영상 데이터를 특정 동영상 코덱으로 변환하는 것 [본문으로]
  3. 먹싱 (Muxing): 변환한 데이터를 Digital Container Format 파일에 담는 것 [본문으로]
  4. 디먹싱 (Demuxing): 먹싱과 반대 개념으로 동영상 파일로 부터 비트 스트림 데이터를 추출하는 것[본문으로]
  5. 디코딩 (Decoding): 특정 코덱의 데이터로부터 영상 데이터를 추출하는 것 [본문으로]
  6. SDL(Simple Directmedia Layer) : 비디오, 오디오, 사용자 입력 등의 계층을 추상화하여, 리눅스, 마이크로소프트 윈도, 맥 OS X 등 여러 운영 체제에서 실행이 가능하도록 한 크로스플랫폼 멀티미디어 라이브러리 [본문으로]
  7. 이러한 프로그램을 인코더(Encoder)라고 부른다. 특정 포맷의 동영상을 다른 포맷의 영상파일로 바꿔주는 기능을 수행한다. 국내에서 대중적으로 사용되는 프로그램은 다음의 팟 인코더이며 FFmpeg 를 활용하여 개발되었다. 라이센스는 개인/기업/공공/교육 등에 제한이 없다. [본문으로]
  8. 안드로이드 소스: http://helloworld.naver.com/helloworld/8794, N드라이브에 내장된 플레이어의 개발 과정 및 샘플 프로젝트가 공개됨. iOS 소스: http://luuvish.org/206, 엔터테이먼트 부문 2위 ( 플레이어 1위) 인 AVPlayer 소스가 공개됨. [본문으로]


Posted by 멋진☆윤호™

댓글을 달아 주세요