ChromeのDevToolsをNetflixやYouTubeで開いて.mpdや.m4sで終わるファイルへのリクエストを見たことがあるなら、あなたはMPEG-DASHが動いている様子を見ています。XMLファイルがマニフェスト、.m4sファイルは音声と映像の短いフラグメント化MP4セグメントで、あなたのブラウザはそれらを素のHTTP上でリアルタイムに縫い合わせています。
DASHはHLSのオープン標準の従兄弟です。AppleがHLSを所有しているのに対し、MPEG/ISO標準化団体がDASHを所有しています。HLSが.m3u8テキストプレイリストを使うのに対し、DASHは.mpd XMLマニフェストを使います。HLSが当初H.264を強要したのに対し、DASHは最初からコーデックを選びませんでした。2つのプロトコルは違う出発点から同じ問題を解いており、2026年の考えのあるストリーミングサービスは両方を配信します。MPEG-DASH(Dynamic Adaptive Streaming over HTTP)は、XMLマニフェスト(.mpd)で記述される短いfMP4セグメントの連鎖として動画を通常のHTTP上で配信する、ISO/IEC 23009-1標準です。
このガイドでは、.mpdに実際に何が入っているか、DASHのPeriod / AdaptationSet / Representationの階層がどう動くか、DRMがどこに収まるか、DASH対HLSの根拠、そしてこれらのストリームをディスクに保存しようとしたときに何が起こるかを見ていきます。
重要ポイント {#key-takeaways}
- MPEG-DASHはアダプティブHTTPストリーミングのISOオープン標準 — ISO/IEC 23009-1。HLSはRFC 8216。
.mpdマニフェストはXMLで、プレーンテキストではない。Period・AdaptationSet・Representationを記述する。プレーヤーが起動時とすべての画質切り替えで歩く厳密な階層を持つ。- DASHは設計上コーデック非依存。 H.264・H.265・VP9・AV1・AAC・Opusなど、マニフェストがコーデック文字列を宣言し、プレーヤーがデコードする。
- メディアセグメントはフラグメント化MP4(
.m4s)で、現代のHLSが使うのと同じCMAFフラグメント。1組のバイトで両プロトコルに対応できる。 - DRMはMPEG Common Encryption(CENC)を使うので、単一の暗号化ファイルがクライアントの復号モジュールに応じてWidevine・PlayReady・FairPlayと連携する。
- AppleプラットフォームはDASHをネイティブサポートしない。 iPhone・iPad・Safari・Apple TVはHLSを必要とする。DASHのみではスタートにすら立てない。
- Netflix・YouTube・Disney+・Hulu・MaxはDASHとHLSを並べて配信、Apple TV+・iTunes・TwitchはHLSのみ。
シンプルな説明
少しの間、頭字語を忘れてください。ストリーミングサービスはどちらにしても同じ問題を抱えます。長い動画を乱雑な接続越しに視聴者に届け、瞬時にシークさせ、再生中の帯域変化に適応させ、しかも汎用HTTPの上で安く済ませる。業界全体の解決策は、動画を短いセグメントに切り、それを列挙したマニフェストを書き、プレーヤーに必要なものを順に取得させることです。HLSはテキストプレイリストで、DASHはXMLマニフェストでこれを行います。仕事は同じ、書類が違うだけです。
プレーヤーの席から見ると、DASHのアプローチはHLSとほぼ同じに感じられます。プレーヤーは起動時に小さなマニフェストを取得し、利用可能な画質と音声トラックを知り、帯域とビューポートに基づいてそれぞれの1つを選び、短いセグメントの流れを取得してデコーダーに送ります。画質切り替えはセグメント間で起きます。ライブストリームはマニフェストが時間とともに伸びることで成立します。シークはプレーヤーが対象タイムスタンプをカバーするセグメントに直接飛ぶため、瞬時です。
両プロトコルのユーザーに見える違いは小さくも本物です。HLSのプレイリストはプレーンテキスト、DASHのマニフェストはXML。HLSのセグメントは歴史的には.ts(MPEG-2 Transport Stream)で今は通常fMP4、DASHのセグメントは常にfMP4で拡張子は.m4s。スポンサー組織も異なります。AppleがHLSを発明・運営しているのに対し、DASHはMPEGとDASH Industry Forumから出た、特定のベンダーが指揮しないオープンISO標準です。対応する入門としては、HLSの詳細が.m3u8プレイリストを端から端までカバーしています。
DASHは実際どう動くのか
DASHストリームはXMLマニフェスト+フラグメント化MP4セグメントの集まりで、すべてが通常のHTTP上で配信されます。 HLSと同じ形、すべてのレイヤーで形式が違うだけです。
.mpdマニフェスト
DASHプレーヤーが最初に取得するのはMedia Presentation Description、つまり.mpdです。HLSのプレーンテキストプレイリストとは違い、これは定義されたスキーマを持つXMLドキュメントです。軽く整形した例を示します。
<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011"
type="static"
mediaPresentationDuration="PT1H30M"
minBufferTime="PT2S"
profiles="urn:mpeg:dash:profile:isoff-live:2011">
<Period id="0" start="PT0S">
<AdaptationSet mimeType="video/mp4" segmentAlignment="true"
startWithSAP="1" maxWidth="1920" maxHeight="1080">
<Representation id="v1" codecs="avc1.640028"
width="1920" height="1080" bandwidth="5000000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="v1/init.mp4"
media="v1/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
<Representation id="v2" codecs="avc1.4d401f"
width="1280" height="720" bandwidth="2800000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="v2/init.mp4"
media="v2/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" lang="en">
<Representation id="a1" codecs="mp4a.40.2" bandwidth="128000">
<SegmentTemplate timescale="1000" duration="4000"
initialization="a1/init.mp4"
media="a1/seg-$Number$.m4s"
startNumber="1"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
すべての属性に具体的な意味があります。type="static"はこれがVODであることを示します(ライブストリームはtype="dynamic")。mediaPresentationDuration="PT1H30M"はISO 8601の時間表記です。各Representationはコーデック文字列と帯域予算を持ちます。SegmentTemplateが魔法の場所です。HLSのようにすべてのセグメントURLを列挙する代わりに、DASHはマニフェストがURLパターンを宣言し、プレーヤーが動的にURLを計算できるようにしています。
Period、AdaptationSet、Representation
マニフェスト内部の厳密な階層がDASHの概念的な核心です。
- Period — タイムラインの連続するスライス。多くの映画は1つのPeriod、放送局は広告差し込みやチャプター境界のために複数のPeriodを使う。
- AdaptationSet — 同じコンテンツの代替エンコーディングの集合で、実行時に交換可能。典型的な映画には1つの動画AdaptationSet、1つ以上の音声AdaptationSet(言語ごとに1つ)、1つ以上の字幕AdaptationSetがある。
- Representation — 1つの具体的なエンコーディング。5MbpsのH.264 1080pは1つのRepresentation、2.8MbpsのH.264 720pは別、1.5MbpsのVP9 720pはさらに別。プレーヤーはAdaptationSetごとに1つのRepresentationを選び、同じAdaptationSet内の任意のセグメント境界で別のものに切り替えられる。
この3層モデルは、HLSのフラットなバリアント+セグメントアプローチより構造的です。これがDASHが拡張性で勝つ理由です。複数の音声トラック、トリックプレイトラック、サムネイルトラック、Periodごとの広告挿入が、新しいマニフェスト構文を発明することなくきれいに収まります。
セグメントと初期化
Representationのバイトは2種類で届きます。初期化セグメントはmoovボックス(コーデックパラメーター・トラックメタデータ・デコーダー設定)を含む小さなfMP4ファイルです。プレーヤーはRepresentationごとに1度取得します。メディアセグメントは実際の音声と映像で、通常はそれぞれ2〜6秒、動画トラックは任意のセグメント先頭からデコードを開始できるようキーフレーム境界で切られています。
マニフェストがstartWithSAP="1"を設定すると、各セグメントはStream Access Point(DASHでのHLSのEXT-X-INDEPENDENT-SEGMENTS相当)から始まり、セグメントが独立にデコード可能であることを保証します。この保証がなければ、後続セグメントが先行セグメントに依存することがあり、アダプティブな切り替えが安全でなくなります。SegmentTemplateのURLはパターン駆動(v1/seg-$Number$.m4s)なので、マニフェストは90分の映画を数百バイトのXMLで記述できます。SegmentTimelineは尺が不均一な場合の代替手段です。
Common Encryption(CENC)
DASHのDRMストーリーはMPEG Common Encryption(CENC)、ISO/IEC 23001-7を通ります。CENCはコンテンツキーのもとでメディアセグメント自体をAES-128のCTRモードで暗号化し、どのDRMシステムがそのキーを発行できるかを宣言します。.mpd内では次のようなContentProtection要素を目にします。
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"
cenc:default_KID="34e5db32-8625-47cd-ba06-68fca0655a72"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
<cenc:pssh>AAAAW3Bzc2gAAAAA...</cenc:pssh>
</ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95">
<cenc:pssh>AAACfHBzc2gAAAAA...</cenc:pssh>
</ContentProtection>
最初のブロックはCENC下のデフォルトキーIDを宣言します。2つ目はWidevineのUUID、3つ目はPlayReadyのものです。ブラウザのContent Decryption Moduleはサポートする DRMにマッチするブロックを読み、組み込まれたPSSH(Protection System Specific Header)データを伴うライセンスリクエストをサービスのライセンスサーバーに送り、セグメントを復号するために必要なコンテンツキーを受け取ります。全体像はWidevineと PlayReadyがプレミアムストリームをゲートする仕組みをご覧ください。DASHでのFairPlayサポートは歴史的に少なく(FairPlayはHLS向けに設計された)、CMAF + CBCS暗号化が小規模なプラットフォーム群で技術的に DASH越しのFairPlayを可能にしました。
設計上のコーデック非依存
HLSは当初H.264を特権化していました(初期のAppleデバイスは他にデコードできなかった)し、新コーデックの追加には複数年の仕様プロセスがかかりました。DASHはコーデックを選びませんでした。マニフェストがコーデック文字列(avc1.640028・hev1.1.6.L150.B0・vp09.00.50.08・av01.0.05M.08)を宣言するだけで、プレーヤーは自分のデコーダーがそれらをサポートするかを確認します。これがYouTubeが、Appleで同等のHLSサポートが出荷される何年も前に、DASH越しにAV1を配信できた理由です。DASHプレーヤーが理解する必要があるのはマニフェスト層だけなので、VidMostは.mpdを解析し、SegmentTemplateのURLを歩き、すべてのfMP4フラグメントを取得し、中身がどのコーデックでもかまわず結果をリマックスできます。
DASH vs HLS:率直な比較
DASHとHLSは異なるトレードオフで同じ問題を解いています。どちらも普遍的に優れているわけではありません。 実際に重要な軸ごとに、それぞれの根拠を示します。
マニフェスト形式
DASHの.mpdは定義されたスキーマを持つXMLで、拡張可能(新機能は新要素として加わり、スキーマで検証され、古いプレーヤーは知らない要素を無視する)ですが冗長です。HLSの.m3u8は#EXT-X-タグを伴うプレーンテキストで、一目で読めてgrepしやすい。DASHは構造とマシン検証で勝ち、HLSは人間の可読性で勝ちます。
レイテンシ
両者とも秒〜数十秒のレイテンシから始まりました。両者とも低遅延の拡張を配信しています。LL-HLSは部分セグメント、ブロッキングプレイリストリロード、プリロードヒント(Appleは初期のHTTP/2プッシュ設計をEXT-X-PRELOAD-HINTに置き換えました)を使い、LL-DASHはチャンク転送エンコードのセグメントとCommon Media Application Format Liveプロファイルを使います。両者とも本番で2〜5秒のグラス・ツー・グラスレイテンシを狙います。1秒未満のレイテンシが必要ならWebRTCに切り替えます。
コーデックサポート
DASHは初日からコーデック非依存です。H.264・H.265・VP9・AV1・AAC・Opus・FLAC・AC-4 — マニフェストがコーデック文字列を宣言し、プレーヤーが決めます。HLSは初代iPhoneハードウェアの要件でH.264のみから始まりました。Appleは2017年からfMP4上のH.265、2018年からDolby VisionとHDR10、iPhone 15世代からAV1と、サポートを着実に広げてきました。現代のHLSはH.264ロックではありませんが、プロトコルのコーデック史にはDASHが持たなかった遅れがあります。
DRM
両者ともAESベースのセグメントレベル暗号化に依存しますが、その上のDRMシステムは異なります。DASHは一般にCENCをWidevineおよびPlayReadyとともに使います。コンテンツキーが同じで、ライセンスリクエスト形式だけが異なるため、単一の暗号化ファイルが両方で機能します。HLSは歴史的にFairPlay Streaming(Apple専用)に依存し、近年はCMAF + CBCS経由でWidevineも使われています。サービスがCMAFに乗っていれば、同じ暗号化セグメントが両方のマニフェストタイプと3つの主要DRMシステムすべてに対応できます。
Apple/iOSのサポート
HLSはiOS・iPadOS・Safari・Apple TVで必須です。DASHはどのAppleプラットフォームでもネイティブサポートされていません。 これはDASH対HLS戦略における最大の決定要因です。SafariでのDASH再生は、Media Source Extensions+shaka-playerやdash.jsのようなJavaScriptシム経由でのみ可能で、それでもAirPlay・ロック画面コントロール・ピクチャー・イン・ピクチャーといったiOSのエッジケースをすべてカバーできるわけではありません。iPhoneを狙うサービスはHLSを配信せざるを得ません。DASHのみではスタートにすら立てません。
CDN互換性とCMAFへの収束
両プロトコルとも純粋なHTTPです。静的ファイルを配信できるCDNなら、DASHもHLSも配信できます。CDNのコストと設定は本質的に同じです。過去10年で最も重要な進展は、DASHとHLSが今やセグメントバイトを共有していることです。CMAF(Common Media Application Format、ISO/IEC 23000-19)は、DASHと現代のHLSの両方を満たすフラグメント化MP4プロファイルを定義します。ストリーミングサービスはCMAFセグメントに1度エンコードし、同じ.m4sファイルを指す.mpdと.m3u8の両方を書けます。これが2026年のYouTube・Netflix・Apple・主要なホスト型動画プロバイダーで実際に起きていることです。
2026年に誰が何を配信しているか
- Netflix — ウェブ・Windows・Android・スマートテレビ・コンソールではDASHが主、SafariとiOSにはHLSのフォールバック。
- YouTube — ウェブとAndroidではVP9 / AV1を伴うDASH、iOS・Safari・AirPlay・大半のTVアプリにはHLS。
- Apple TV+・iTunes Store — HLSのみ。
- Twitch — 2014年のRTMP再生引退以降、ライブもVODもHLSのみ。
- Disney+・Hulu・Max・Amazon Prime Video — クライアント次第でDASHまたはHLS、しばしば同じCMAFセグメントが両マニフェストの下にある。
HLSはAppleデバイスを所有し、それ以外の市場をDASHと分け合っています。多くの主要サービスが両方をサポートするのは、しなければ視聴者を取り逃がすからです。
動画を保存したい場合に意味すること
DASHの仕組みを知ると、実用的なダウンロード問題が具体的になります。HLSユーザーがストリーム保存で当たるすべての問題は、DASHにもしばしばより深刻に当てはまります。
- ブラウザの名前を付けて保存は
.mpdしか取らない。 それはXMLマニフェストで、動画バイトは1つも含みません。VLCで開いてもネットワークセッションがまだ有効でセグメントURLが失効していない間だけ動きます。 - DASHセグメントは
.m4sファイル — Representationごとに初期化セグメント1個と数十〜数百個のメディアセグメント。各々が単独では役に立たないフラグメント化MP4のチャンクです。1つの再生可能ファイルを得るには、初期化セグメントとすべてのメディアセグメントを順番に取得し、リマックスする必要があります。(.m4sに実際に何が入っているか曖昧なら、コンテナとコーデックをご覧ください。) - XMLを解析し、SegmentTemplate URLを歩き、リマックスする必要がある。 つまり
$Number$・$Time$・$RepresentationID$・$Bandwidth$プレースホルダを理解するコードを書き、URLを組み立て、CDNを叩きすぎずに並列取得し、ffmpegやmp4boxにバイトを通すことになります。週末スクリプトではなく、本格的なソフトウェアです。 - バリアント選択が重要。 間違ったRepresentationを選ぶと、1080pの映画の480pコピーをダウンロードしたことになります。トークンも失効します。多くの
.mpdとセグメントURLは数分で古くなる署名付きです。
VidMostはこのすべてを扱います。.mpdを解析し、最高画質の動画と音声のRepresentationを選び、すべてのセグメントを並列でダウンロードし、CMAFフラグメントを1つのクリーンなMP4にリマックスします。DRM保護されたDASHストリーム(一般的なWidevine + PlayReady構成)については、VidMostの組み込みWidevine L3サポートがL3再生が利用可能な範囲で動作します。実際の品質上限はサービスとDRMレベルが設定し、プレミアムプラットフォームは通常L3ストリームを480p〜720pに制限します。URLを貼る、MP4が得られる。
よくある落とし穴と誤解
DASH関連の混乱は、フォーラムスレッドに絶えず登場します。整理する価値があります。
- 「MPEG-DASHはGoogleのもの。」 違います。DASHはMPEG / ISOのオープン標準(ISO/IEC 23009-1)で、Adobe・Microsoft・Netflix・Qualcommを含むDASH Industry Forumというコンソーシアムが推進しています。Googleは開発に協力し、YouTubeで使っていますが、仕様を所有するベンダーは1社もありません。
- 「DASHは新しくて優れている。」 DASH(2012年)はHLS(2009年)より新しいですが、「優れている」はプラットフォーム構成によります。視聴者がiPhoneなら、HLSが強制的に勝ちます。視聴者がAndroidとスマートテレビで最大のコーデック柔軟性が欲しいなら、DASHが勝ちます。多くのサービスは両方を配信します。
- 「
.mpdは動画。」 違います。これはマニフェストです。実際の動画はマニフェストが参照する.m4sセグメントにあります。 - 「DASHを使うサイトをHLSプレーヤーで再生できない。」 ネイティブプレーヤーでは事実です。しかし shaka-player・dash.js・hls.js・video.jsのような現代のウェブプレーヤーは、Media Source Extensions経由でvideo要素にセグメントを供給することで、ブラウザ内で両方を扱います。
- 「DASHは常にDRMを意味する。」 違います。多くのDASHストリームは暗号化なしで配信されます。ライブイベント放送、教育プラットフォーム、無料のYouTubeコンテンツの大半など。DRMは
ContentProtection要素で宣言されるオプション層です。
結びに
DASHはHLSのパラレルワールドの双子です。両者とも動画を短いセグメントに切り、マニフェストで記述し、素のHTTP上で配信します。違い(XML対プレーンテキスト、ISO標準対Apple仕様、コーデック非依存対コーデック史依存)は業界内では重要ですが、視聴者にはほとんど影響しません。重要なのは、世界中のあらゆるスタジオからコンテンツをライセンスしているストリーミングサービスがこの2つのプロトコルに落ち着き、両マニフェストの下で共有CMAFセグメントへとますます収束していることです。.mpdリクエストを認識し、Period / AdaptationSet / Representationの階層を理解できるようになると、現代ストリーミングの奇妙な振る舞いの謎が消えます。すべて同じループです。マニフェスト取得、バリアント選択、セグメント取得、デコード、繰り返し。プロトコルレイヤーを完全に飛ばして単に動画を保存したい場合、VidMostはHLS・MPEG-DASH・fMP4・CMAF・DRM保護ストリームを処理します。
関連する読み物
- オンライン動画はどう再生されるのか? — カメラから画面までのストリーミングパイプラインの全体像。
- HLSとM3U8とは? — 兄弟プロトコルを端から端までカバー。
- 動画の画質が再生中に変わるのはなぜ? — あらゆるDASHとHLSプレーヤーに組み込まれているABRロジック。
- 動画コンテナとコーデック —
.m4sセグメントの中に実際に入っているもの。 - DRM保護コンテンツとは? — Widevine・PlayReady・FairPlayが、保存できない暗号化バリアントをどうゲートするか。