SteamのトレーラーはHLS: MP4はブラウザ内で結合される
Steamのトレーラーはそのまま掴めるファイルではなく、フラグメントのプレイリストです。ダウンローダーはプレイリストの画質を読み、ブラウザがそれらを1つのMP4に組み立てます。
かつてSteamはトレーラーを単純なMP4とWebMファイルとして公開しており、それらのフィールドは今もストアAPIに存在します。現在は常に空です。代わりにSteamが公開するのはHLSのマスタープレイリストです。トレーラーのレンディションを記述し、数秒ずつのフラグメントを指し示す小さなテキストファイルです。
まずプレイリスト、次にフラグメント
ここではリゾルバの仕事は早く終わります。ストアページのメタデータを読み、トレーラーのマスタープレイリストURLを取得し、解析して、レンディションごとに解像度、ビットレート、フレームレートを持つ1行を返します。動画のフラグメントを取得することも、何かを組み立てることもありません。それは理由もなく動画全体をサーバー経由で移動させることになります。
| リゾルバが読むもの | 次にブラウザがすること |
|---|---|
| マスタープレイリスト: レンディション、解像度、ビットレート、音声グループ | 選んだレンディションを選ぶ |
| プレイリスト内のセグメントテンプレート | そのレンディションのフラグメントをSteamのCDNから取得して結合する |
| マスターが名指す音声グループ | 映像とAAC音声トラックを1つのMP4に結合する |
結合はすでに開かれているタブ内で、Steam自身のCDN(video.akamai.steamstatic.com)から行われます。2分のトレーラーはおよそ90個のフラグメントなので、通常の接続では進行状況バーが数秒で埋まります。
画質一覧の読み方
- 各行はトレーラーが実際に持つ1つのレンディションで、解像度の高い順です。
- 行には解像度とビットレートが表示されます。2つのレンディションが解像度を同じくして、それを支えるデータ量を異にすることがあるためです。
- Steamのトレーラーはしばしば1920×1080に達しますが、小さなインディータイトルのトレーラーはずっと低いところで止まることがあります。
- トレーラーとゲームプレイクリップは一緒に一覧になります。それぞれにポスター画像が付くので、ダウンロード前に見分けられます。
フラグメントは完成したMP4にバイト単位でコピーされます。映像と音声は、Steam自身のクライアントがその解像度で再生するものとまったく同じです。結合はコンテナの変更であり、再エンコードではないため、途中で何かが柔らかくなることはありません。
うまくいかないことがあるもの
2つあり、どちらも動画ではなくネットワークの問題です。Steamのストアメタデータが応答しない場合、リゾルバは失敗を報告する前に一度再試行します。プレイリスト自体を解析できない場合も同じ再試行が適用され、それでも失敗すると、完了しないダウンロードを提供する代わりにページがそう告げます。
動画のないゲームページはno_videoを返します。唯一のメディアがスクリーンショットギャラリーであるページも含まれ、これは未発売のタイトルによくあります。
要点
- Steamはもう単純なトレーラーファイルを配信しておらず、HLSが唯一の道です。
- リゾルバがプレイリストを読み、ブラウザがフラグメントを取得して結合します。
- 完成したMP4はストリームのコピーであり、再エンコードではありません。
- 何もこのサイトを通らず、何も保存されません。
よくある質問
ダウンロードしたトレーラーはSteamが再生するものより低画質ですか?
いいえ。フラグメントはMP4にバイト単位でコピーされるため、映像と音声は選んだレンディションと一致します。Steam自身のクライアントがその解像度で再生するのと同じストリームです。
Pinterestのダウンロードにはない進行状況バーがSteamのダウンロードにはあるのはなぜですか?
SteamのCDNはブラウザがフラグメントを読むことを許可するため、ページが実際にファイルをダウンロードしており、進行状況を報告できます。PinterestのCDNは許可しないため、あちらのダウンロードは単純なナビゲーションでなければなりません。
ゲームページに動画が表示されないのはなぜですか?
そのページにトレーラーやゲームプレイクリップが添付されていないためです。スクリーンショットギャラリーは動画ではなく、未発売のゲームは発売が近づくまでどちらも持たないことがよくあります。