2014년 2월 20일 목요일

드랍 박스에서의 비디오 변환

Video Processing at Dropbox

https://tech.dropbox.com/2014/02/video-processing-at-dropbox/

* 비디오 관련 문제점
1. 다양한 종류의 코덱이 있다.
2. 네트워크 상태가 사용자에 따라 다르다.
3. 사용자가 사용는 장비의 성능이 제각각이다.

=> 위 문제 해결을 위해 소스 비디오를 사용자의 장비에 맞는 형태로 변경(transcode)한다.

초기에는 사용자가 비디오를 올리면 올리자마자 바로 모든 장비에서 볼 수 있도록 변경을 해주었는데 이것은 적합하지 않았다. 그래서 사용자의 요청이 있을 때 변경해서 보여주는 형태로 바꾸었다.

* 구현
HTTP Live Streaming 사용: 사용자의 환경에 맞는 다른 bit rate의 비디오를 선택하여 재생할 수 있도록 해주는 장점이 있다.
한번 transcoding되고 나면 cache를 사용 한다.-> 물론 사용자의 패턴에 따른 적당한 retention 정책으로 유지한다.
transcoding중에는 사용자가 transcoding worker에서 비디오를 받아올 수 있도록 한다.
transcoding에 ffmpeg를 사용: fast start도 사용
비디오를 쪼개는 데(segment)에는 애플에서 제공하는 것과 ffmpeg에 있는 것이 있는데 모두 우리에게 맞지 않아서 직접 개발했다.
segment의 크기는 latency(round trip과 transmission time을 고려)를 줄이기 위해 작은 사이즈로부터 5초까지 증가시킨다. 실제로 segment는 처음에 2s, 2s, 3s, 3s, 4s, 4s, 5s ... 의 형태로 증가한다.
그래도 latency가 불만족스러워 이를 더 줄이기 위해 비디오의 처음 몇초는 아예 미리 transcoding하였다.

댓글 없음:

댓글 쓰기

Building asynchronous views in SwiftUI 정리

Handling loading states within SwiftUI views self loading views View model 사용하기 Combine을 사용한 AnyPublisher Making SwiftUI views refreshable r...