Dropbox 의 동영상 처리: 재생 속도 향상을 위한 노력
문제
- 동영상 코덱이 제각각.
- 다행인건 모바일의 인코딩 표준은 “H.264/MPEG-4 AVC”
- 사용자의 네트워크 속도는 제한적임. (특히 모바일)
- 사용자들의 기기에 있는 CPU, 메모리 등이 다 다름.
- 특히 아이폰3GS는 오직 “H.264/MPEG-4 AVC” 만 지원한다.
해결
- 디코드 후 다시 인코딩 한다.
- resolution 과 bit rate 를 낮추고 표준 코덱으로 변경해서.
- HTTP Live Streaming 으로 스트리밍 https://developer.apple.com/streaming/
음. 주목할 만한건..
- cc2.8xlarge 인스턴스에서 병렬로 코딩 변환을 처리함. 우리 경험상 up to a dozen transcoding job 을 수행해야 하더라.
- memcahe 를 job 을 분산시키는데 쓰고 있다.
- job 의 프로세스를 추적하고.
- 머신의 load 를 보고한다.
- load 정보를 로드발랜싱에 이용한다.
- (멤캐시로 로드 발랜싱을 이용한다는건 머리에 딱히 구조가 안 떠오른다..)
- 앞단의 LB는 cc1.xlarge 인스턴스에 nginx, haproxy 로 구성했다.
- 디코드,인코드에는 많은 포맷을 지원하는 ffmpeg 를 썼다.
ffmpeg looks something like the following:
ffmpeg -i pipe:0 -dn -vcodec libx264 -vsync 1 -pix_fmt yuv420p -ac 2
-profile:v baseline -level 30 -x264opts bitrate=:vbv-maxrate=
-rc-lookahead 0 -r -g -refs 1 -acodec libfaac -async 1
-ar 44100 -ab 64k -f mpegts -s -muxdelay 0 pipe:1
https://tech.dropbox.com/2014/02/video-processing-at-dropbox/