Upgrade to Pro — share decks privately, control downloads, hide ads and more …

"動画"配信のお話

Yuta Imanishi
March 07, 2024
9

 "動画"配信のお話

https://connpass.com/event/304679/ での登壇資料。
mse/emeの話に加えて、shaka-playerの設定方法についても軽く触れている。

Yuta Imanishi

March 07, 2024
Tweet

Transcript

  1. 2 自己紹介 名前: 今西勇太 (@nisshii0313) 所属: DMM.com 動画配信開発部 配信基盤G 最近は主にPS4/5、テレビ向けの

    動画再生プレイヤーを触ってます (for DMM TV) 外部向けな勉強会の運営もやってます Think! Frontend by DMM 好き: まんがタイムきらら、内田真礼さん 近況報告: 思い立って自作PCしました。
  2. - ユーザーフレンドリーに再生したい - ユーザーの回線環境はまちまち (携帯な会社はどこも大変そうね...) - それでも安定して再生するために「ABR」って技術を使ってる (画質「AUTO」ってあるアレです) → 画角の異なる動画を複数(たくさん)用意して、適宜切り替えたい

    → videoタグにsourceで渡せるのって動画形式が異なるもの数本程度 (同じ動画形式で画角が異なるものを動的に切り替えるのは大変) → Media Source Extensions って技術が必要になる なんで嬉しくないの?
  3. - ユーザーフレンドリーに再生したい → ABRの技術を使って、ユーザーに安定して視聴してもらうには、   Media Source Extensions (以降 MSE) の技術を使って再生する必要がある

    (クロスブラウザ対応も考えると、なるべくWeb標準に乗っかっておきたい) ↑ 結局はJavaScriptからvideoタグの細かい機能を拡張するためのAPI ゴリゴリ書いても良いし、便利なライブラリも多々あります。 なんで嬉しくないの? 例: shaka-player(google製) 設定を入れると、ユーザーの帯域をとって 適切なbitrateで再生してくれる
  4. なんで嬉しくないの? - 悪い人に盗み見られるかも... - みんな大好き、著作権のお話です (cf. DRM) - 細かい話をするとキリがないので、とりあえず アニメやライブコンテンツ等を

    「買った人だけ見れるようにする」の実現を考えます - そのためには、適宜暗号化しておいて、再生する前に 権利のあるユーザーだけ復号できる仕組みが必要 → Encrypted Media Extensions って技術が必要になる mp4だとコピーして 再生できちゃうよね...
  5. なんで嬉しくないの? - 悪い人に盗み見られるかも... → 解決するためには、暗号化された動画を Encrypted Media Extensions (以降EME) の技術で復号して再生する

    必要がある ↑これもMSEに基づいたJavaScriptなAPI MSEを扱いやすくしてくれるライブラリは大抵EME対応してくれている ので、難しく考えすぎなくてもOK shaka-playerでも もちろん対応してくれている!
  6. (補足) shaka-playerでのEMEの設定 設定できる項目の例 - drm.servers: 各drmの技術に対応したlicense serverのURLを渡してあげる - drm.preferredKeySystems: 複数のdrmの技術を使用する場合に、どれから優先して使うかを

    設定できる (PC/SP以外のデバイスによっては指定が必要) 他にも、セキュリティレベルの高いdrmを要求するコンテンツに対しては、 別途設定が必要だったり... googleやapple、ms等がデファクトスタンダードを各々作ってる デバイスごとに、対応非対応がある コンテンツの再生に必要なライセンス (鍵、有効期限等)を発行するサーバー
  7. 結論 動画配信のフロントエンドって何やってるの? - 色んな回線のユーザーが安定して動画を視聴できたり - 買った人だけがアニメを見れる 世界線を作るために、MSE/EME の技術 (に対応したライブラリを) 使って

    快適に動画が見れる環境作りをしています。 (cf. https://github.com/shaka-project/shaka-player ありがとうGoogle 🙏) もちろん、再生ページ自体もサクサクじゃないとなので、 いわゆるwebフロントの最適化みたいなところもやってます 💪