요구사항의 두 줄이 서로를 밀어냅니다. 시작 2초과 버퍼링 재생 시간의 1퍼센트 미만입니다.
하나를 만족하면 다른 하나가 나빠진다
재생을 시작하기 전에 조각을 몇 개 받아 둡니다. 그 양을 버퍼라고 합니다.
| 버퍼 | 결과 |
|---|---|
| 적게 채운다 | 빨리 시작한다. 조금만 느려져도 끊긴다 |
| 많이 채운다 | 늦게 시작한다. 안 끊긴다 |
같은 값 하나로 두 요구를 만족시킬 수 없습니다.
시작과 정상 재생을 다른 상태로 둔다
해법은 한 값을 쓰지 않는 것입니다.
시작할 때는 적게 채우고 바로 재생을 시작한다
재생하면서 버퍼를 계속 늘려 간다
정상 재생 상태에서는 넉넉한 버퍼를 유지한다
시작 직후 몇 초는 위험한 구간입니다. 그 구간을 안전하게 넘기려고 첫 조각을 낮은 화질로 받습니다. 낮은 화질은 파일이 작아서 채우는 시간이 짧습니다.
그리고 재생 중에는 화면에 보여주는 속도보다 빠르게 받습니다. 그 차이가 버퍼를 늘립니다. 버퍼가 목표에 닿으면 받는 속도를 줄이거나 화질을 올립니다.
화질을 올리는 것과 버퍼를 쌓는 것 중 무엇을 먼저 하나
여유가 생겼을 때 선택입니다.
| 선택 | 결과 |
|---|---|
| 화질을 먼저 올린다 | 화면이 좋아진다. 버퍼가 얇은 채로 남는다 |
| 버퍼를 먼저 쌓는다 | 안정된다. 화면은 그대로다 |
시작 직후에는 버퍼가 먼저입니다. 아직 네트워크가 어떤지 모르고, 이 구간에서 끊기면 사용자가 바로 나갑니다. 버퍼가 목표에 닿은 뒤에 화질을 올립니다.
탐색과 이어보기
사용자가 중간으로 건너뛰면 버퍼가 쓸모없어집니다. 받아 둔 것은 건너뛴 지점의 앞부분입니다.
그래서 탐색은 시작과 같은 상황입니다. 버퍼가 비었고 빨리 보여줘야 합니다. 같은 방법을 씁니다. 그 지점의 조각을 낮은 화질로 먼저 받습니다.
이어보기는 다릅니다. 마지막으로 본 지점을 알고 있으므로, 영상을 열기 전에 그 지점부터 미리 받아 둘 수 있습니다. 목록만 먼저 받아 보면 어느 조각인지 계산할 수 있습니다.
무엇을 재 봐야 하나
버퍼 목표값을 추측으로 정하면 안 됩니다.
| 재야 하는 것 | 어디에 쓰나 |
|---|---|
| 시작까지 걸린 시간의 분포 | 2초 목표를 지키는지 본다 |
| 재생 시간 대비 끊긴 시간 | 재생 시간의 1퍼센트 미만 목표를 지키는지 본다 |
| 끊긴 위치 | 시작 직후인지 중간인지에 따라 대응이 다르다 |
세 번째가 중요합니다. 시작 직후 끊김과 중간 끊김은 원인이 다릅니다. 앞은 버퍼를 너무 적게 채운 것이고, 뒤는 화질을 너무 올린 것입니다.