SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今日からできる! 動画配信基盤システム構築

Webブラウザ上で動画が再生される流れを追ってみよう~MSE/EMEを用いた動画の再生~

今日からできる! 動画配信基盤システム構築 第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 インターネットを利用した動画配信は、ブロードバンドの普及とともに急速に発展し、今や多くの人々がたくさんの動画コンテンツを視聴しています。各関連技術は発展と収束を繰り返し、昔は難解だった動画配信技術もデファクトスタンダードが確立されつつあります。本連載ではインターネットを利用したストリーミング動画配信技術についてわかりやすく紹介し、誰でも、簡単に、動画配信ができることを伝えていきます。第6回となる本記事では、hls.js のコードを例に、ブラウザが動画を再生する裏側の仕組みと、その中核技術である「MSE/EME」について解説します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 合同会社DMM.comでフロントエンドエンジニアとして動画配信サービスの開発をしている今西(@nisshii0313)です。

 アルバイト等を経て2021年に新卒で入社して以降、DMM TVをはじめとする動画配信サービスのフロントエンド(主に再生プレイヤー部分)の開発に携わってきました。他にも、社外向けのフロントエンドの勉強会である「Think ! FrontEnd」の主催も行っています。

 今回は「MSE/EME」を利用した、Webブラウザ上での動画再生について解説していきます。

MSEについて

 前回の記事では、hls.jsを使ってHLS(HTTP Live Streaming)を再生し、最適なビットレートがユーザーに提供されている(Adaptive Bit Rate、ABR)ことを確認しました。その際にhls.js経由で使用していた動画再生にまつわるWeb APIがMSE(Media Source Extentions)になります。

 video要素にsrc属性としてファイルを渡すことで動画は再生できますが、断片的なチャンクファイルが次々に流れてくる以上、ファイルごとにsrc属性を逐一切り替えて再生させるのは現実的ではありません。なぜなら、再生が途切れたり、再生位置の管理が複雑になったりと、シームレスなストリーミング体験を実現するのが困難になるためです。

 実は、video要素はsrc属性にURLを受け付ける以外に、Media Provider Objectと呼ばれるメディアリソースを表すオブジェクトを扱うこともできます。その中には、MSEのMediaSourceオブジェクトも含まれます。

 MediaSourceオブジェクトはSourceBufferというチャンクを格納(appendBuffer)する機構を持っています。つまり、チャンクファイルを元にMediaSourceオブジェクトを生成してvideo要素に流し込むことで、src属性の書き換えを行うことなく動画の再生が可能になります。また、チャンク単位で再生する際に、ユーザーに流れるファイルサイズをモニタリングすることで帯域幅を推測し、前章で紹介したABRを実現しています。

 このようにMSEは強力ですが、チャンクのダウンロード管理、帯域幅の推定、適切なタイミングでのバッファへのデータ追加などを手動で行うのは非常に複雑です。とはいえ、我々が直接MSEのAPIにアクセスすることは少なく、前回の記事で使ったhls.jsやShaka Playerといったストリーミングクライアントライブラリを通して使うことが多いです。

 前回の記事で使用したように、プレイリストファイルを渡すだけで以降の処理を行ってくれます。

次のページ
hls.jsの流れを追ってみる

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
今日からできる! 動画配信基盤システム構築連載記事一覧

もっと読む

この記事の著者

今西 勇太(合同会社DMM.com)(イマニシ ユウタ)

 2021年にDMM.comへ新卒入社。配信基盤グループで動画再生プレイヤーのフロントエンド開発・運用を担当しています。現在はThink! Frontendの主催や、PS4/5, テレビ向けのDMM TV開発に携わっています。日常系アニメが好きです。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21814 2025/07/30 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング