마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

동영상 업로드 및 인코딩

0 추천

안녕하세요.

 

동영상업로드 기능을 구현중 동영상 인코딩(컨버터)에 대해 몇가지 질문이 있어서 글 올립니다.

일단 동영상 업로드 자체는 문제가 없이 진행을 하다보니, 폰에서 선택된 동영상을 일정한 해상도 및 포맷(mp4)으로 변환해야될

필요성이 있더라구요. 사이즈도 문제고 아이폰에서 플레이 안되는 포맷이 있어서도 문제구요.

 

그런데 인코딩을 앱에서 하려고 하니 시간이 너무 오래 걸리는 문제가 있습니다. 현재 인코딩 방법은 ffmpeg 라이브러리로 빌드된

실행파일을 앱에서 실행해서 인코딩하는 방법으로 테스트 하고 있는데요. pc에서는 20초내에 끝나는 파일들이 1분30초 이상 걸려버리네요.

ffmpeg 의 각종 옵션들을 만져보고는 있는데, 인코딩에 걸리는 시간은 거의 변함이 없습니다. 

 

그래서 의문점이 과연 인코딩을 앱에서 처리하는게 맞는가 입니다. 타 sns서비스를 보면 적게는 20메가 많게는 1기가(밴드) 까지 동영상을 올릴수 있는데, 업로드하는 시간외에는 특별히 시간이 걸린다고 느껴지는 부분은 없어 보입니다. 같은 라이브러리라도 스마트폰과 pc와의 성능 차이는 부정할수 없기에 이런 의문점이 있어서 질문 올립니다.

 

감사합니다.

익명사용자 님이 2014년 4월 23일 질문

2개의 답변

+1 추천
단말기에서 처리하기에는 아직 속도가 느리지 않을까요? 타 SNS 서비스는 업로드 된 동영상을서버에서 인코딩하는 방식을 채택하고 있지 않을까 싶네요..
인연 (31,880 포인트) 님이 2014년 4월 23일 답변
답변감사합니다.
작업을 하다보니 서버에서 처리하는 방향이 맞다는 느낌이 드네요. ^^
+1 추천
ffmpeg를 사용하면 SW 코덱을 사용해서 인코딩이 되기 때문에 해상도가 커짐에 따라 계산량이 많이 늘어나서, 인코딩에 시간이 오래 걸리며, 옵션을 조절해 봐야 큰 성능향상을 얻기 힘듭니다.

폰에서 인코딩을 하지 않고  폰에서 영상 정보(RGB) + 오디오 정보를 서버로 보내 서버에서 처리를 하는 것도 가능하나.

영상 사이즈가 720p라고 할 경우 영상 한장의 데이터가 1280*720*3 이며 30fps 정도 보인다고 하면 1초에 79메가 이상을 전송해야 하기 때문에  네트워크가 버티기가 힘듭니다.

따라서 꼭 지원을 해야한다면 폰에서 인코딩이 되어야 하며

가장 간단한 방법은  MediaRecord 클래스를 이용해서 HW코덱으로 mp4 파일을  생성한 후 그 파일을 전송하는 방법입니다.

아니면  MediaCodec class를 사용해서 영상을 H264로 압축해서 보내는 것도 가능합니다.

마지막으로 단말이 정해져 있다면 PDK쪽 수정을  해서 MediaRecord 에서 파일을 떨구는 부분을 네트워크로 전송하게 구현 해주시는 방법도 있습니다.
사악미소 (65,330 포인트) 님이 2014년 4월 23일 답변
답변감사합니다.
업로드 하려는 동영상 소스가 동영상촬영은 아니고, 저장되어 있는 동영상파일인데요. MediaRecord 클래스 같은 경우 폰에 저장되어 있는 동영상 파일을 소스로 사용할수 있나요?
동영상 파일이면 그냥 서버로 업로드 하면 되지 않나요? 왜 재 인코딩을 하시려는 건지요? H264로 분리는 MediaCodec 클래스를 사용하면 되긴 합니다.
...