Steam 트레일러는 HLS: MP4는 브라우저에서 조립됩니다
Steam 트레일러는 바로 받을 수 있는 파일이 아니라 조각들의 플레이리스트입니다. 다운로더는 플레이리스트의 화질을 읽고, 브라우저가 이를 하나의 MP4로 조립합니다.
Steam은 예전에 트레일러를 평범한 MP4와 WebM 파일로 공개했고, 그 필드는 지금도 스토어 API에 남아 있습니다. 하지만 이제는 항상 비어 있습니다. 대신 Steam이 공개하는 것은 HLS 마스터 플레이리스트입니다. 트레일러의 화질을 설명하고 몇 초짜리 조각들을 가리키는 작은 텍스트 파일입니다.
플레이리스트가 먼저, 조각은 그다음
여기서 리졸버의 일은 일찍 끝납니다. 스토어 페이지의 메타데이터를 읽고, 트레일러의 마스터 플레이리스트 URL을 가져와 파싱한 뒤, 해상도·비트레이트·프레임 레이트와 함께 화질별로 한 행씩 반환합니다. 동영상 조각을 가져오지도, 아무것도 조립하지도 않습니다. 그건 이유 없이 동영상 전체를 서버로 통과시키는 일이기 때문입니다.
| 리졸버가 읽는 것 | 그다음 브라우저가 하는 일 |
|---|---|
| 마스터 플레이리스트: 화질, 해상도, 비트레이트, 오디오 그룹 | 여러분이 고른 화질을 선택합니다 |
| 플레이리스트 안의 세그먼트 템플릿 | 그 화질의 조각을 Steam CDN에서 가져와 이어 붙입니다 |
| 마스터가 지정한 오디오 그룹 | 영상과 AAC 오디오 트랙을 하나의 MP4로 병합합니다 |
조립은 이미 열려 있는 탭에서, Steam 자체 CDN(video.akamai.steamstatic.com)으로부터 이루어집니다. 2분짜리 트레일러는 대략 아흔 개의 조각이므로, 정상적인 연결에서는 진행 표시줄이 몇 초 안에 채워집니다.
화질 목록 읽기
- 각 행은 트레일러가 실제로 담고 있는 화질 하나이며, 해상도가 높은 순입니다.
- 두 화질이 해상도는 같아도 데이터가 다를 수 있으므로, 행에 해상도와 비트레이트를 함께 표시합니다.
- Steam 트레일러는 흔히 1920×1080까지 이르지만, 작은 인디 트레일러는 훨씬 낮을 수 있습니다.
- 트레일러와 게임플레이 클립이 함께 나열되며, 각각 포스터 이미지가 있어 다운로드 전에 구분할 수 있습니다.
조각은 완성된 MP4에 바이트 단위로 복사됩니다. 화면과 소리는 Steam 자체 클라이언트가 그 해상도에서 재생하는 것과 정확히 같습니다. 이어 붙이기는 재인코딩이 아니라 컨테이너 변경이므로, 그 과정에서 부드러워지는 것은 없습니다.
무엇이 잘못될 수 있는가
두 가지이며, 둘 다 동영상이 아니라 네트워크에 관한 것입니다. Steam의 스토어 메타데이터가 응답하지 않으면 리졸버는 실패를 보고하기 전에 한 번 재시도합니다. 플레이리스트 자체를 파싱할 수 없을 때도 같은 재시도가 적용되며, 그래도 실패하면 끝나지 않을 다운로드를 내놓는 대신 페이지가 그렇게 알립니다.
동영상이 없는 게임 페이지는 no_video를 반환합니다. 유일한 미디어가 스크린샷 갤러리인 페이지도 포함되며, 이는 미출시 게임에서 흔합니다.
요약
- Steam은 더 이상 평범한 트레일러 파일을 제공하지 않으며, HLS가 유일한 경로입니다.
- 리졸버는 플레이리스트를 읽고, 브라우저가 조각을 가져와 병합합니다.
- 완성된 MP4는 재인코딩이 아니라 스트림의 복사본입니다.
- 이 사이트를 거치는 것은 없고, 저장되는 것도 없습니다.
질문
다운로드한 트레일러가 Steam이 재생하는 것보다 화질이 낮나요?
아니요. 조각은 MP4에 바이트 단위로 복사되므로 화면과 소리가 고른 화질과 일치합니다. Steam 자체 클라이언트가 그 해상도에서 재생하는 것과 같은 스트림입니다.
Steam 다운로드는 왜 Pinterest와 달리 진행 표시줄이 나오나요?
Steam의 CDN은 브라우저가 조각을 읽도록 허용하므로 페이지가 실제로 파일을 다운로드하며 진행률을 보고할 수 있습니다. Pinterest의 CDN은 그렇지 않아 그 다운로드는 단순한 이동이어야 합니다.
게임 페이지에 동영상이 안 보이는 이유는 무엇인가요?
그 페이지에 트레일러나 게임플레이 클립이 첨부되지 않았기 때문입니다. 스크린샷 갤러리는 동영상이 아니며, 미출시 게임은 출시가 가까워질 때까지 둘 다 없는 경우가 많습니다.