MP4Box は使わずに ffmpeg だけで MPEG-DASH の MPDファイルを作る方法。また ffmpeg 3.4 からは libxml2 を有効にすることで MPDファイルを読み込むことも出来る。

関連記事
ffmpeg で Apple HTTP Live Streaming(HLS)を扱う

公式のガイドライン : Guidelines | DASH Industry Forum

基本コマンド

すべてのセグメントを MPD に記載してコピーする
ffmpeg -i input -c copy -window_size 0 output.mpd
1つの映像に1つ目はオリジナルをコピーし、2つめは 640×360 にリサイズして2つのストリームでリアルタイム -re で出力する。-map 0 を2度使うことで2出力にしている
ffmpeg -re -i input -map 0 -map 0 -c:a copy -c:v:0 copy -b:v:1 600k -s:v:1 640x360 -profile:v:1 main -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" output.mpd

公式ドキュメント:FFmpeg Filters Documentation : dash(Muxers)

オプション

  • adaptation_sets[string]
    セグメント毎にどのデータを納めるか。streams に 0 から始まる整数を入れるとチャンネルマップに記載されたデータが納まる。v なら映像のすべて、a なら音声のすべてが納まる。映像と音声は別id で納める
    例:id=0,streams=0,1,2 id=1,streams=3,4
    例:id=0,streams=v id=1,streams=a
  • window_size[int]
    マニフェストに記載されるセグメント数。0 はすべて
    範囲:0 から INT_MAX まで
    既定値:0
  • extra_window_size[int]
    マニフェストに記載されなかったセグメントをどれだけ削除せずに残すか
    範囲:0 から INT_MAX まで
    既定値:5
  • min_seg_duration[int]
    セグメントの最小時間(マイクロ秒)
    範囲:0 から INT_MAX まで。5000000 で5秒
    既定値:5e+006(5000000)
  • remove_at_exit[boolean]
    エンコードが終わったらすべてのセグメントを削除する
    既定値:0
  • use_template[boolean]
    Enable (1) or disable (0) use of SegmentTemplate instead of SegmentList.
    既定値:1
  • use_timeline[boolean]
    Enable (1) or disable (0) use of SegmentTimeline in SegmentTemplate.
    既定値:1
  • single_file[boolean]
    セグメントではなく1つのファイルで出力する
    既定値:0
  • single_file_name[string]
    DASH-templated name to be used for baseURL. Implies storing all segments in one file, accessed using byte ranges
  • init_seg_name[string]
    イニシャルファイルのファイル名の指定
    既定値:init-stream$RepresentationID$.m4s
    ファイル名は init-stream0.m4s のようになる
  • media_seg_name[string]
    セグメントファイルのファイル名の指定
    既定値:chunk-stream$RepresentationID$-$Number%05d$.m4s
    ファイル名は chunk-stream0-00001.m4s のようになる
  • utc_timing_url[string]
    ISO 規格の UTC タイムスタンプを UTCTiming schemeIdUri に記入する。無記入だと指定されない
  • http_user_agent[string]
    HTTP ヘッダの User-Agent フィールドを優先させる
    既定値:なし
  • http_persistent[boolean]
    HTTP 接続を継続する
    既定値:0
  • hls_playlist[boolean]
    .mpd ファイル作成と同時に VERSION:6 の HLS用のマスターマニフェスト(master.m3u8)、各ストリームのマニフェスト(media_%d.m3u8)を同時に出力する
    既定値:0

再生確認

Dash-Industry-Forum/dash.js を使うことで手軽に再生確認が出来る。

<!DOCTYPE html>
<html>
  <head>
    <script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>
    <title>MPEG DASH TEST</title>
    <style>
    video {
       width: 640px;
       height: 360px;
    }
</style>
  </head>
  <body>
    <div>
      <video data-dashjs-player autoplay src="output.mpd" controls></video>
    </div>
  </body>
</html>

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)