Foundry
동영상 스트리밍 설계
고급
핵심

시작과 끊김의 상충

시작과 정상 재생은 다른 상태다

요구사항의 두 줄이 서로를 밀어냅니다. 시작 2초과 버퍼링 재생 시간의 1퍼센트 미만입니다.

하나를 만족하면 다른 하나가 나빠진다

버퍼를 적게 채우면 시작이 빠르고 많이 채우면 끊기지 않는다 시작 전에 채우는 양 적게 채운다 빨리 시작. 조금만 느려져도 끊긴다 많이 채운다 늦게 시작. 안 끊긴다 두 요구가 서로를 밀어낸다. 하나를 만족하면 다른 하나가 나빠진다 둘 다 지키는 방법 시작할 때만 적게 채우고 재생 중에 계속 늘린다 첫 조각은 낮은 화질로 받아 채우는 시간을 줄인다 시작과 정상 재생은 다른 상태다. 같은 값으로 다루지 않는다

재생을 시작하기 전에 조각을 몇 개 받아 둡니다. 그 양을 버퍼라고 합니다.

버퍼결과
적게 채운다빨리 시작한다. 조금만 느려져도 끊긴다
많이 채운다늦게 시작한다. 안 끊긴다

같은 값 하나로 두 요구를 만족시킬 수 없습니다.

시작과 정상 재생을 다른 상태로 둔다

해법은 한 값을 쓰지 않는 것입니다.

시작할 때는 적게 채우고 바로 재생을 시작한다
재생하면서 버퍼를 계속 늘려 간다
정상 재생 상태에서는 넉넉한 버퍼를 유지한다

시작 직후 몇 초는 위험한 구간입니다. 그 구간을 안전하게 넘기려고 첫 조각을 낮은 화질로 받습니다. 낮은 화질은 파일이 작아서 채우는 시간이 짧습니다.

그리고 재생 중에는 화면에 보여주는 속도보다 빠르게 받습니다. 그 차이가 버퍼를 늘립니다. 버퍼가 목표에 닿으면 받는 속도를 줄이거나 화질을 올립니다.

화질을 올리는 것과 버퍼를 쌓는 것 중 무엇을 먼저 하나

여유가 생겼을 때 선택입니다.

선택결과
화질을 먼저 올린다화면이 좋아진다. 버퍼가 얇은 채로 남는다
버퍼를 먼저 쌓는다안정된다. 화면은 그대로다

시작 직후에는 버퍼가 먼저입니다. 아직 네트워크가 어떤지 모르고, 이 구간에서 끊기면 사용자가 바로 나갑니다. 버퍼가 목표에 닿은 뒤에 화질을 올립니다.

탐색과 이어보기

사용자가 중간으로 건너뛰면 버퍼가 쓸모없어집니다. 받아 둔 것은 건너뛴 지점의 앞부분입니다.

그래서 탐색은 시작과 같은 상황입니다. 버퍼가 비었고 빨리 보여줘야 합니다. 같은 방법을 씁니다. 그 지점의 조각을 낮은 화질로 먼저 받습니다.

이어보기는 다릅니다. 마지막으로 본 지점을 알고 있으므로, 영상을 열기 전에 그 지점부터 미리 받아 둘 수 있습니다. 목록만 먼저 받아 보면 어느 조각인지 계산할 수 있습니다.

무엇을 재 봐야 하나

버퍼 목표값을 추측으로 정하면 안 됩니다.

재야 하는 것어디에 쓰나
시작까지 걸린 시간의 분포2초 목표를 지키는지 본다
재생 시간 대비 끊긴 시간재생 시간의 1퍼센트 미만 목표를 지키는지 본다
끊긴 위치시작 직후인지 중간인지에 따라 대응이 다르다

세 번째가 중요합니다. 시작 직후 끊김과 중간 끊김은 원인이 다릅니다. 앞은 버퍼를 너무 적게 채운 것이고, 뒤는 화질을 너무 올린 것입니다.

면접에서 이렇게 나옵니다

Q.시작 2초와 버퍼링 1퍼센트 미만을 함께 지키려면 어떻게 하시겠습니까

시작과 정상 재생을 다른 상태로 두고 버퍼 목표를 다르게 잡습니다.

시작할 때는 적게 채우고 바로 재생한다
재생하면서 버퍼를 계속 늘려 간다

같은 값 하나로는 두 요구를 만족시킬 수 없습니다. 적게 채우면 끊기고 많이 채우면 늦게 시작합니다.

시작 직후 위험 구간을 넘기려고 첫 조각을 낮은 화질로 받습니다. 파일이 작아서 채우는 시간이 짧습니다.

흔한 실수: 버퍼 값을 하나로 두고 절충점을 찾는 것. 절충하면 시작도 좀 늦고 좀 끊기는 결과가 됩니다. 상태를 나누면 둘 다 지킬 수 있습니다.

Q.여유가 생겼을 때 화질을 올리시겠습니까 버퍼를 쌓으시겠습니까

시작 직후에는 버퍼가 먼저입니다.

선택결과
화질을 먼저 올린다화면이 좋아진다. 버퍼가 얇게 남는다
버퍼를 먼저 쌓는다안정된다. 화면은 그대로다

시작 직후에는 아직 네트워크가 어떤지 모르고, 이 구간에서 끊기면 사용자가 바로 나갑니다. 버퍼가 목표에 닿은 뒤에 화질을 올립니다.

흔한 실수: 여유를 보이는 대로 화질에 쓰는 것. 화질을 올리면 다음 조각이 커져서 여유가 사라집니다. 그러면 버퍼가 계속 얇게 유지되고 작은 흔들림에도 끊깁니다.

Q.사용자가 중간으로 건너뛰면 무엇이 달라집니까

버퍼가 쓸모없어집니다. 받아 둔 것은 건너뛴 지점의 앞부분입니다.

그래서 탐색은 시작과 같은 상황입니다. 버퍼가 비었고 빨리 보여줘야 합니다. 같은 방법을 써서 그 지점의 조각을 낮은 화질로 먼저 받습니다.

이어보기는 다릅니다. 마지막 지점을 알고 있으므로 영상을 열기 전에 그 지점부터 미리 받아 둘 수 있습니다.

흔한 실수: 탐색을 정상 재생의 연속으로 다루는 것. 정상 재생용 버퍼 목표를 그대로 적용하면 건너뛸 때마다 몇 초를 기다립니다. 탐색은 시작으로 취급해야 합니다.

Q.끊김을 개선하려면 무엇을 재야 합니까

끊긴 위치를 함께 재야 합니다. 시작 직후와 중간은 원인이 다릅니다.

재야 하는 것어디에 쓰나
시작까지 걸린 시간 분포2초 목표 확인
재생 시간 대비 끊긴 시간재생 시간의 1퍼센트 미만 목표 확인
끊긴 위치대응이 갈린다

시작 직후 끊김은 버퍼를 너무 적게 채운 것이고, 중간 끊김은 화질을 너무 올린 것입니다.

흔한 실수: 끊긴 총량만 재는 것. 총량이 같아도 원인이 다르면 고칠 곳이 다릅니다. 위치를 안 재면 버퍼를 늘려야 할 때 화질 규칙을 건드리게 됩니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

동영상 스트리밍 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.