tips

DASHストリーミングとは?非開発者向けMPDファイル解析

MPEG-DASHとMPDマニフェストの仕組み、DASH動画の映像・音声トラックを保存する方法、MP4より扱いにくい理由を解説します。
FlowPick チーム
12 分で読了
# dash # mpd # ストリーミング # アダプティブ # 解析

動画をダウンロードしようとしたら、MP4ではなく12KBの .mpd ファイルだった。テキストエディタで開くと——XMLだらけで、数百の <SegmentURL> タグが並び、指しているファイルはあなたのディスク上にない。

これがMPEG-DASHです。以下では、これが何か、プラットフォームがなぜ使うのか、そして実際に動画を取り出す方法を説明します。

DASHが解決した問題

2008年に遡ります。YouTubeは固定ビットレートのFLVファイルを配信していました。回線が遅いと、誰かが720p動画をアップロードしても、あなたはバッファリングのくるくる回るアイコンを見つめるだけ。唯一の対処法は手動で360pに切り替えること。

これはプラットフォームにとって恥ずかしい状況でした。業界が見つけた解決策:固定ファイルを配信するのではなく、利用可能なすべての画質を記述したマニフェストを配信し、プレーヤーがリアルタイムの帯域幅測定に基づいてどの画質をリクエストするか自分で決める。

AppleのHLSとISO標準のDASH(2012年)はどちらもこの問題を解決しました。DASH——Dynamic Adaptive Streaming over HTTP——は国際標準となり、YouTube、Vimeo、Dailymotion、そしてほとんどのエンタープライズ動画プラットフォームが採用しています。

主要プラットフォームのDASH採用状況

どのプラットフォームがDASHを使っているかを知っておくと、ダウンロード時に何が起きるか予測しやすくなります:

プラットフォームストリーミングプロトコル備考
YouTubeDASH主にDASH、一部コンテンツはHLSも
BilibiliDASH(一般コンテンツ)+ HLS(ライブ)音声・映像分離、結合が必要
VimeoDASHエンタープライズ版コンテンツもDASH
TwitchHLSライブはHLS、VODはDASHの場合あり
Coursera / edXDASH講座動画で広く使用
Tencent Video / Youku / iQIYIDASH + DRM高価値コンテンツはWidevine重ね掛け

YouTubeは興味深い事例——2011年からDASHの展開を始め、最も早く大規模採用したプラットフォームの一つで、現在1日数十億回のストリーミングリクエストをこの仕組みで処理しています。BilibiliもDASHのヘビーユーザーで、一般動画はDASH、ライブ配信はHLS。Bilibili動画をローカルにダウンロードする方法 でBilibiliのダウンロード手順を完全に解説しており、DASHの実践を理解する良い事例です。

MPDファイル:動画ではなくレシピ

すべてのDASHストリームは MPDファイル——Media Presentation Description(メディア提示記述)から始まります。これはXMLドキュメントで、ストリーム全体を記述します:長さ、利用可能な画質、コーデック情報、そして各映像・音声セグメントを見つけるためのパス。

実際の簡略化されたMPD:

<?xml version="1.0" encoding="UTF-8"?>
<MPD type="static" mediaPresentationDuration="PT1H23M47S">
  <Period>
    <AdaptationSet contentType="video" mimeType="video/mp4">
      <Representation id="v1080" bandwidth="4500000" width="1920" height="1080">
        <SegmentTemplate
          initialization="video/1080p/init.mp4"
          media="video/1080p/seg-$Number$.m4s"
          startNumber="1" />
      </Representation>
      <Representation id="v720" bandwidth="2000000" width="1280" height="720">
        <SegmentTemplate
          initialization="video/720p/init.mp4"
          media="video/720p/seg-$Number$.m4s"
          startNumber="1" />
      </Representation>
    </AdaptationSet>
    <AdaptationSet contentType="audio" mimeType="audio/mp4">
      <Representation id="a128" bandwidth="128000">
        <SegmentTemplate
          initialization="audio/init.mp4"
          media="audio/seg-$Number$.m4s"
          startNumber="1" />
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

構造の説明:

  • <AdaptationSet>:同等トラックのグループ——すべての映像オプション、またはすべての音声オプション
  • <Representation>:そのグループ内の具体的な画質/コーデックの組み合わせ
  • <SegmentTemplate>:セグメントファイルのURLテンプレート

テンプレート video/1080p/seg-$Number$.m4sseg-1.m4sseg-2.m4s……と展開され、数千ファイルに及ぶこともあります。

音声・映像分離:DASHの核心的設計

DASHがダウンロードする側にとって最も頭の痛い点は、音声と映像が2つの独立したストリームであることです。これは意地悪ではなく、設計上の意図です:

ある動画に5言語の音声トラックを付けたいとします。音声と映像が一体なら、完全な動画ファイルを5セット保存する必要があり、サーバーのストレージコストが5倍になります。DASHのやり方:映像トラック1セット、音声トラック5セット。プレーヤーが言語設定に応じて組み合わせます。ストレージコストが大幅に削減されます。

ダウンロードする側にとって、これは以下を意味します:

  1. 映像トラックと音声トラックを同時にダウンロードする必要がある
  2. ダウンロード完了後に1つのファイルに結合する
  3. 映像だけダウンロードしても音が出ない。音声だけダウンロードしても映像は映らない

FlowPickはMPD内のすべてのAdaptationSetエントリを自動検出し、ダウンロードと結合まで行います。結合処理は単純に聞こえますが、ブラウザ上でFFmpeg WASMを動かすには様々な落とし穴があります。詳細は FlowPickがブラウザ上で動画セグメントをMP4に結合する仕組み をご覧ください。

DASH vs. HLS:何が違うのか

HLS/M3U8ストリームのダウンロード方法を読んだ方なら、HLSが.m3u8ファイルと.tsセグメントを使うことはご存知でしょう。DASHは.mpdファイルと.m4sセグメントを使います。目的は同じ——アダプティブストリーミング——ですが、細部は大きく異なります。

DASHHLS
策定元ISO/IEC 23009, 2012年Apple, 2009年
マニフェスト形式XML(.mpdプレーンテキスト(.m3u8
セグメント形式fMP4(.m4s)またはMP4MPEG-TS(.ts
音声の扱い独立トラック映像と一体
暗号化CENC(Widevine/PlayReady)AES-128(鍵の取得が可能)
主な採用プラットフォームYouTube、Vimeo、エンタープライズ向けTwitch、Apple系プラットフォーム

実用上の最大の違い:DASHは音声と映像を分離する。映像ファイルに音声はなく、音声ファイルに映像はありません。両方をダウンロードして結合する必要があります。

暗号化にも重要な違いがあります。HLSで一般的なAES-128暗号化は、ログイン状態であれば通常のHTTPリクエストで鍵を取得できます。DASHのCENC暗号化はWidevine/PlayReady認証システムを経由し、鍵はデバイスに紐付けられており、ブラウザ拡張機能からはアクセスできません。

DASH動画のダウンロードが通常困難な理由

ここまでの話をまとめると、なぜ何をやってもうまくいかないのかが見えてきます:

1. 動画ファイルが存在しない。 MPDは設計図に過ぎません。実際のコンテンツはCDN上の数百の.m4sセグメントに分散しています。

2. 音声と映像が独立したトラック。 仮に全映像セグメントをダウンロードできても、そのファイルには音声がありません。音声セグメントはまったく別のダウンロードパスです。

3. セグメントURLに署名トークンが含まれる。 典型的なセグメントURLは次のような形式です:https://cdn.example.com/video/seg-42.m4s?token=eyJhbGc...&expires=1735689600。このトークンには有効期限があり、セッションに紐付けられています。

4. initセグメントが重要。 映像・音声トラックともに、コーデックパラメータを含む「初期化セグメント」(init.mp4)から始まります。これがないと、後続のセグメントをプレーヤーが解析できません。

5. コンテンツ保護(CENC)。 高価値コンテンツにはDASHの上にWidevineやPlayReadyのDRMが重ねられます。全セグメントが暗号化され、鍵は別の認証サーバーから配信されます。

FlowPickがDASHストリームをダウンロードする仕組み

FlowPickはブラウザのタブ内でMPDリクエストをインターセプトします。プラットフォームにログインしていれば、セッションCookieがリクエストに付与され、FlowPickはプレーヤーと同じマニフェストを取得できます。

ダウンロードパイプライン:

  1. MPD XMLを解析 — すべてのAdaptationSetRepresentationエントリを抽出
  2. 画質オプションを表示 — 利用可能な映像解像度と音声トラックを一覧表示
  3. 並列ダウンロード — 映像・音声セグメントを同時にダウンロード、スレッド数は設定で変更可能(デフォルト2)
  4. initセグメントを先に取得 — 小さいファイルだが結合に必須
  5. メモリ上で組み立て — init + 全セグメントを順に連結
  6. 映像と音声を結合 — WebAssemblyにコンパイルされたFFmpegを使用、すべてブラウザタブ内で実行
  7. ディスクに書き出し — Chrome/EdgeではFile System Access API、Firefoxでは直接Blobダウンロード

パイプライン全体がクライアントサイドで動作します。アップロードは一切発生せず、セグメントがサードパーティサーバーを経由することもありません。

MPDのURLが単体で手に入る場合は、DASHオンラインダウンローダーに直接貼り付けることもできます。インストール不要です。

オンラインツール vs. 拡張機能:どちらを使うべきか

DASHダウンロードでは、状況に応じて使い分けが必要です:

シチュエーション推奨
MPDのURLが単体で取得可能、公開ストリームオンラインツール、インストール不要
ログインが必要なコンテンツブラウザ拡張機能、セッションCookieを保持
プラットフォームがPOSTでマニフェストを取得ブラウザ拡張機能、ネットワーク層でインターセプト
プラットフォームがMPD URLを難読化ブラウザ拡張機能、自動検出
セグメントURLに有効期限付きトークンブラウザ拡張機能、リアルタイムアクセス

オンラインツールはブラウザのクロスオリジン(CORS)ポリシーに制限されます。動画ホスティングサーバーがCORSヘッダーを設定していない場合、オンラインツールからの直接ダウンロードは失敗します。こうしたケースでは拡張機能の方が信頼性が高いです。

実サイトでのDASHの見分け方

あるサイトがDASHを使っているか知りたい場合は、動画が読み込まれる前にDevToolsを開きます:

  1. F12Network タブ
  2. .mpd または manifest でフィルタ
  3. 動画を再生
  4. Content-Type: application/dash+xml のリクエストを探す

見つかれば、それがエントリポイントです。そのリクエストのURLがオンラインツールに貼り付けるものであり、FlowPickが自動インターセプトするものです。

プラットフォームによってはURLを難読化したり、GETではなくPOSTでマニフェストを取得する場合もあります。オンラインツールでは対応できませんが、ブラウザ拡張機能なら方式を問わずネットワークインターセプト層でキャプチャできます。

ライブ配信:まったく別物

静的DASHストリーム(映画、録画講座)はtype="static"で、mediaPresentationDurationが既知です。ライブ配信はtype="dynamic"を使います:

<MPD type="dynamic"
     availabilityStartTime="2026-07-01T09:00:00Z"
     minimumUpdatePeriod="PT5S"
     timeShiftBufferDepth="PT1H">

MPDは常に更新され(この例では5秒ごと)、ローリングウィンドウ内のセグメントのみ利用可能です。セグメントがtimeShiftBufferDepthの範囲外になると、CDNから消えます。

ライブ配信の場合、FlowPickは録画開始時点からキャプチャします。現在のバッファより前には遡れません。過去のライブ配信コンテンツについては、リプレイ/VODのURLを探してください。それは静的DASHまたはHLSストリームであり、問題なくダウンロードできます。

よくある問題

MPDファイルをダウンロードしたが開けない

MPDは動画ファイルではなくマニフェストです。解析して全セグメントを順にダウンロードし、結合するツールが必要です。MPDを直接動画プレーヤーで開いても通常は再生できません(VLCは例外で、DASH URLの直接再生に対応しています)。

ダウンロード後に音声と映像が別々になっている

2つのトラックのうち片方だけをダウンロードしています。FlowPickが両方のAdaptationSetエントリをダウンロードしたか確認してください。ポップアップ内に別途選択すべき音声エントリがないか探します。両方のトラックがダウンロードされたのに結合されていない場合は、FFmpeg WASMのメモリ制限(ファイルが大きすぎる)に引っかかった可能性があります。より低い画質を試してください。

セグメントのダウンロードは成功したが結合に失敗した

非常に大きなファイル(4GB超)でよく発生します。FFmpeg WASMは32ビットアドレス空間でのメモリ制限があります。この場合、FlowPickは代替の結合戦略への切り替えを試みます。最新バージョンのChromeを使用してください。FSAストリーミング書き込みが大容量ファイルを最も安定して処理します。


おすすめの関連記事

次に読む記事