본문으로 건너뛰기

Steam 트레일러는 HLS: MP4는 브라우저에서 조립됩니다

Steam 트레일러는 바로 받을 수 있는 파일이 아니라 조각들의 플레이리스트입니다. 다운로더는 플레이리스트의 화질을 읽고, 브라우저가 이를 하나의 MP4로 조립합니다.

Steam은 예전에 트레일러를 평범한 MP4와 WebM 파일로 공개했고, 그 필드는 지금도 스토어 API에 남아 있습니다. 하지만 이제는 항상 비어 있습니다. 대신 Steam이 공개하는 것은 HLS 마스터 플레이리스트입니다. 트레일러의 화질을 설명하고 몇 초짜리 조각들을 가리키는 작은 텍스트 파일입니다.

플레이리스트가 먼저, 조각은 그다음

여기서 리졸버의 일은 일찍 끝납니다. 스토어 페이지의 메타데이터를 읽고, 트레일러의 마스터 플레이리스트 URL을 가져와 파싱한 뒤, 해상도·비트레이트·프레임 레이트와 함께 화질별로 한 행씩 반환합니다. 동영상 조각을 가져오지도, 아무것도 조립하지도 않습니다. 그건 이유 없이 동영상 전체를 서버로 통과시키는 일이기 때문입니다.

리졸버가 읽는 것그다음 브라우저가 하는 일
마스터 플레이리스트: 화질, 해상도, 비트레이트, 오디오 그룹여러분이 고른 화질을 선택합니다
플레이리스트 안의 세그먼트 템플릿그 화질의 조각을 Steam CDN에서 가져와 이어 붙입니다
마스터가 지정한 오디오 그룹영상과 AAC 오디오 트랙을 하나의 MP4로 병합합니다

조립은 이미 열려 있는 탭에서, Steam 자체 CDN(video.akamai.steamstatic.com)으로부터 이루어집니다. 2분짜리 트레일러는 대략 아흔 개의 조각이므로, 정상적인 연결에서는 진행 표시줄이 몇 초 안에 채워집니다.

화질 목록 읽기

조각은 완성된 MP4에 바이트 단위로 복사됩니다. 화면과 소리는 Steam 자체 클라이언트가 그 해상도에서 재생하는 것과 정확히 같습니다. 이어 붙이기는 재인코딩이 아니라 컨테이너 변경이므로, 그 과정에서 부드러워지는 것은 없습니다.

무엇이 잘못될 수 있는가

두 가지이며, 둘 다 동영상이 아니라 네트워크에 관한 것입니다. Steam의 스토어 메타데이터가 응답하지 않으면 리졸버는 실패를 보고하기 전에 한 번 재시도합니다. 플레이리스트 자체를 파싱할 수 없을 때도 같은 재시도가 적용되며, 그래도 실패하면 끝나지 않을 다운로드를 내놓는 대신 페이지가 그렇게 알립니다.

동영상이 없는 게임 페이지는 no_video를 반환합니다. 유일한 미디어가 스크린샷 갤러리인 페이지도 포함되며, 이는 미출시 게임에서 흔합니다.

요약

질문

다운로드한 트레일러가 Steam이 재생하는 것보다 화질이 낮나요?

아니요. 조각은 MP4에 바이트 단위로 복사되므로 화면과 소리가 고른 화질과 일치합니다. Steam 자체 클라이언트가 그 해상도에서 재생하는 것과 같은 스트림입니다.

Steam 다운로드는 왜 Pinterest와 달리 진행 표시줄이 나오나요?

Steam의 CDN은 브라우저가 조각을 읽도록 허용하므로 페이지가 실제로 파일을 다운로드하며 진행률을 보고할 수 있습니다. Pinterest의 CDN은 그렇지 않아 그 다운로드는 단순한 이동이어야 합니다.

게임 페이지에 동영상이 안 보이는 이유는 무엇인가요?

그 페이지에 트레일러나 게임플레이 클립이 첨부되지 않았기 때문입니다. 스크린샷 갤러리는 동영상이 아니며, 미출시 게임은 출시가 가까워질 때까지 둘 다 없는 경우가 많습니다.

이 글의 도구

모든 글