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

화질을 누가 고르나

받는 쪽이 받은 속도를 보고 고른다

화질 5단계를 미리 만들어 둡니다. 그러면 시청자에게 어느 것을 줄지 정해야 하는데, 그 결정을 서버가 하면 안 됩니다.

판단은 받는 쪽이 한다

받는 쪽이 실제 받은 속도를 보고 다음 조각의 화질을 고른다 조각마다 화질을 다시 고른다 높음 낮음 받은 속도에 맞춘다 첫 조각은 낮은 화질로 받는다. 시작이 빨라진다 중간에 느려지면 낮추고, 여유가 생기면 올린다 서버는 무엇을 줄지 고르지 않는다. 있는 것을 알려주기만 한다

서버는 시청자의 네트워크 상태를 모릅니다. 알 수 있는 것은 조금 전에 보낸 것이 얼마나 빨리 갔는지인데, 그것도 서버 쪽에서 보는 값입니다.

받는 쪽은 자기가 실제로 얼마나 빨리 받았는지버퍼가 얼마나 남았는지를 압니다. 그래서 다음 조각의 화질을 받는 쪽이 고릅니다.

역할하는 일
서버어떤 화질이 있는지 목록으로 알려준다
받는 쪽다음 조각을 어느 화질로 받을지 고른다

서버가 무상태가 됩니다. 조각 요청은 그냥 파일 요청이고, 누가 어떤 화질을 보고 있는지 기억할 필요가 없습니다. 이것이 엣지에서 그대로 캐시될 수 있는 이유이기도 합니다.

무엇을 보고 고르나

두 신호를 함께 봅니다.

신호
최근에 받은 속도지금 네트워크가 얼마나 되는가
남은 버퍼실패할 여유가 얼마나 있는가

속도만 보면 잘못 판단합니다. 속도가 좋아 보여도 버퍼가 거의 비었으면 높은 화질을 시도할 여유가 없습니다. 반대로 버퍼가 넉넉하면 조금 무리해도 됩니다.

그리고 올릴 때와 내릴 때가 대칭이 아닙니다.

내릴 때는 빠르게 내린다. 끊기는 것을 막아야 한다
올릴 때는 천천히 올린다. 올렸다가 다시 내리면 더 나쁘다

화질이 계속 오르내리면 더 나쁘다

전환 판단을 민감하게 만들면 화질이 자주 바뀝니다. 시청자에게는 한 단계 낮은 화질로 안정된 것보다 나쁩니다. 화면이 계속 흐려지고 선명해지는 것은 눈에 띕니다.

그래서 전환에 여유를 둡니다. 올릴 기준과 내릴 기준을 다르게 두어, 경계 근처에서 왕복하지 않게 합니다. 한 번 바꾼 뒤에는 잠시 유지합니다.

화질 목록에 무엇을 넣나

5단계를 어떻게 벌려 놓을지도 결정입니다.

잘못된 배치문제
단계가 너무 촘촘하다전환해도 체감이 없고 만드는 값만 든다
단계가 너무 벌어져 있다한 단계 내리면 눈에 띄게 나빠진다

그리고 가장 낮은 화질은 아주 느린 네트워크에서도 끊기지 않을 만큼 낮아야 합니다. 그것이 마지막 방어선입니다. 가장 낮은 것으로도 못 받으면 재생이 멈춥니다.

면접에서 이렇게 나옵니다

Q.어느 화질을 줄지 서버가 정하면 무엇이 문제입니까

서버는 시청자의 네트워크 상태를 모릅니다.

받는 쪽은 자기가 실제로 얼마나 빨리 받았는지와 버퍼가 얼마나 남았는지를 압니다. 서버가 아는 것은 자기 쪽에서 본 전송 속도뿐입니다.

역할하는 일
서버어떤 화질이 있는지 알려준다
받는 쪽다음 조각의 화질을 고른다

그리고 이렇게 하면 서버가 무상태가 됩니다. 조각 요청이 그냥 파일 요청이므로 엣지에서 그대로 캐시됩니다.

흔한 실수: 서버가 사용자별 상태를 들고 판단을 도와주려는 것. 상태를 들이면 캐시가 어려워지고, 그 상태를 어느 서버가 들지도 문제가 됩니다. 판단을 밖으로 미는 것이 구조를 단순하게 합니다.

Q.화질 전환을 무엇을 보고 결정하시겠습니까

최근 받은 속도와 남은 버퍼를 함께 봅니다.

신호
최근에 받은 속도지금 네트워크가 얼마나 되는가
남은 버퍼실패할 여유가 얼마나 있는가

속도가 좋아 보여도 버퍼가 거의 비었으면 높은 화질을 시도할 여유가 없습니다.

그리고 올릴 때와 내릴 때가 대칭이 아닙니다. 내릴 때는 빠르게, 올릴 때는 천천히 합니다.

흔한 실수: 속도만 보고 결정하는 것. 속도는 조각 하나를 받는 동안의 평균이라 다음 조각에도 그럴 것이라는 보장이 없습니다. 버퍼는 그 예측이 틀렸을 때 버틸 여유를 알려줍니다.

Q.화질이 자주 오르내리는 것은 왜 문제입니까

한 단계 낮은 화질로 안정된 것보다 나쁩니다.

화면이 계속 흐려지고 선명해지는 것은 눈에 띕니다. 평균 화질이 높아도 체감이 나빠집니다.

그래서 전환에 여유를 둡니다.

올릴 기준과 내릴 기준을 다르게 두어 경계에서 왕복하지 않게 한다
한 번 바꾼 뒤에는 잠시 유지한다

흔한 실수: 전환 판단을 민감하게 만드는 것이 좋다고 보는 것. 민감하면 네트워크의 작은 흔들림마다 화질이 바뀝니다. 평균 화질이 아니라 안정성이 체감을 정합니다.

Q.가장 낮은 화질을 어느 수준으로 두시겠습니까

아주 느린 네트워크에서도 끊기지 않을 만큼 낮게 둡니다. 마지막 방어선입니다.

가장 낮은 것으로도 못 받으면 재생이 멈춥니다. 그래서 이 단계는 화질보다 끊기지 않는 것을 목적으로 정합니다.

잘못된 배치문제
단계가 촘촘하다전환해도 체감이 없고 만드는 값만 든다
단계가 벌어져 있다한 단계 내리면 눈에 띄게 나빠진다

흔한 실수: 가장 낮은 화질을 보기 민망한 수준이라며 올려 두는 것. 그러면 느린 네트워크에서 아예 못 보게 됩니다. 낮은 화질로 보는 것과 못 보는 것 중 무엇이 나쁜지는 분명합니다.

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

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

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