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

配信した動画が視聴者に 届くまでの技術を知ろう!

Avatar for PLAY, inc. PLAY, inc.
June 22, 2026
26

配信した動画が視聴者に 届くまでの技術を知ろう!

Avatar for PLAY, inc.

PLAY, inc.

June 22, 2026

More Decks by PLAY, inc.

Transcript

  1. 3 ⾃宅のスマートTV‧パソコン • ⼤抵は⾼速なネットワークが使える ◦ 光回線のダウンロード速度 理論値 1 Gbps など

    • ⾼解像度‧⾼画質の映像が求められる ◦ 画⾯がデカいのでノイズも⽬⽴ちやすい 動画の視聴環境
  2. 6 動画の視聴環境:通信環境の不確実性 今のネットワークの速度は、使ってみるまでわからない 理論値 1 Gbps でも 100 Mbps しか出ないケースはザラにある

    • デバイス 〜 ルーター‧基地局の間にある遮蔽物 • 夜間でネット全体が混雑している • 同じ基地局にアクセスが集中している • 通信経路上に故障した機器があって迂回しているetc... 再⽣してみたら回線が遅かった、という事もあるので 再⽣中に切り替えられるようにしたい
  3. 7 YouTube にアップロードされる30分の動画で計算すると... - 映像 60 fps, ⾳声 ステレオ 48

    kHz, アスペクト⽐ 16:9 [参考] YouTube にアップロードする動画におすすめのエンコード設定 https://support.google.com/youtube/answer/1722171?hl=ja 「.mp4 ファイルそのまま」のサイズ
  4. 8 YouTube にアップロードされる30分の動画で計算すると... - 映像 60 fps, ⾳声 ステレオ 48

    kHz, アスペクト⽐ 16:9 • 1080p(フルHD) :約 2.8 GB • 2160p(4K) :約 12 ~ 15 GB 全部ダウンロードするのは時間がかかる (1GbpsとしてもフルHD 23秒ぐらい) 「.mp4 ファイルそのまま」のサイズ
  5. 9 .mp4 ファイルをそのまま使う際の問題点 • 再⽣中に画質調整ができない • デカい動画ファイルのダウンロード待ち(※) • 動画の⼀部分だけ再⽣したいのに全部ダウンロードするのは無駄 (途中まで⾒て離脱する、前回の続きから⾒る

    etc...) これ以外にも... • 著作権保護が不⼗分(不正コピー‧再配布対策) • コーデックの互換性(特定のOSで再⽣できない可能性あり) (※)これだけならプログレッシブダウンロード対応の.mp4ファイルで解決できなくもない
  6. 12 HLSの構成(MPEG-TSの場合) セグメント( .ts) - 2 ~ 10 秒ぐらいに 分割された動画

    プレイリスト( .m3u8) - セグメントの一覧などが テキストで書かれている #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:5 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:4.004, https://www.example.com/segment_000.ts #EXTINF:4.004, https://www.example.com/segment_001.ts #EXTINF:4.004, https://www.example.com/segment_002.ts #EXTINF:4.004, https://www.example.com/segment_003.ts
  7. 14 HLSの構成:再生プレイヤーの動作 1. プレイリストを取得 2. セグメントを順次取得 3. セグメントがN秒分以上取得できたら、順番に再⽣する 再⽣しながらセグメントを順次取得 ...

    #EXTINF:4.004, https://www.example.com/000.ts #EXTINF:4.004, https://www.example.com/001.ts ... 000.ts 001.ts 002.ts 003.ts 動画全体を取得しなくても再生できるので 待ち時間が数秒になる
  8. 15 HLSの構成:再生プレイヤーの動作 • 再⽣開始までの待ち時間短縮 • 再⽣するセグメントだけ取得すればいい → 通信量の節約 ◦ ⾒てる途中で離脱

    ◦ 前回までに⾒たところから再⽣する ◦ 再⽣時のタイムスタンプ指定 etc... ... #EXTINF:4.004, https://www.example.com/000.ts #EXTINF:4.004, https://www.example.com/001.ts ...
  9. 21 HLS(HTTP Live Streaming) • Apple が策定した HTTPベースの配信プロトコル ◦ .html

    や .jpg で Web ページを配信するのと同じ仕組みで配信できる • .mp4 などで作ったファイルを配信したい場合、 セグメントとプレイリストに変換して配信する • 再⽣の流れ ◦ プレイリスト をHTTPでGET ◦ プレイリストの内容にある セグメント をHTTPでGET ◦ 再⽣バッファが貯まったら再⽣開始
  10. 22 AWSでの構築例(VOD) OVP (Online Video Platform) Amazon CloudFront Amazon S3

    視聴者 配信したい動画 CDN オリジン S3 + CloudFront マネージドサービスで構成 ⼤規模配信の負荷を捌く MP4 MediaConvert ファイルをトランスコード、パッケージング 出来たファイルを S3 に配置 トランスコード‧パッケージング HLS / MPEG-DASH AWS Elemental MediaConvert .mp4 などを変換(1度きり) HTTP
  11. 27 AWSでの構築例(LIVE配信) 映像を順次処理 HTTP OVP (Online Video Platform) AWS Elemental

    MediaLive Amazon CloudFront 視聴者 配信ソフト CDN Amazon S3 オリジン S3 + CloudFront マネージドサービスで構成 ⼤規模配信の負荷を捌く MediaLive ライブエンコード、パッケージング 出来たファイルを S3 に配置 RTMP トランスコード‧パッケージング HLS / MPEG-DASH セグメントが増える プレイリストが書き換わる
  12. 35 LIVE配信の遅延を減らすには OVP (Online Video Platform) AWS Elemental MediaLive Amazon

    CloudFront 視聴者 配信ソフト CDN Amazon S3 オリジン S3 + CloudFront マネージドサービスで構成 ⼤規模配信の負荷を捌く MediaLive ライブエンコード、パッケージング 出来たファイルを S3 に配置 RTMP トランスコード‧パッケージング HLS / MPEG-DASH HLSのセグメントを短くする 色んな機器の負荷が増えるのでトレードオフ セグメントが 10秒なら 10秒の映像を貯める必要がある
  13. 38 AWSでの構築例(VOD) OVP (Online Video Platform) Amazon CloudFront Amazon S3

    視聴者 配信したい動画 CDN オリジン S3 + CloudFront マネージドサービスで構成 ⼤規模配信の負荷を捌く MP4 MediaConvert ファイルをトランスコード、パッケージング 出来たファイルを S3 に配置 トランスコード‧パッケージング HLS / MPEG-DASH AWS Elemental MediaConvert FFmpeg hls.js HTTPサーバ (nginxなど) .mp4 などを変換(1度きり) HTTP
  14. 39 FFmpeg 動画や⾳声のエンコードなどが出来るコマンドラインツール (例)$ ffmpeg -i input.mp4 output.avi • エンコード・デコード(一部は対応ライブラリが必要)

    • ファイルフォーマットの変換 • 動画の加工 ◦ 色調調整、解像度の変更、画像の切り出し etc… .mp4 ファイルをトランスコード、パッケージングして HLSの形式にすることも可能
  15. 40 hls.js:HLSのストリーミング再生をするライブラリ <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>hls.js sample</title>

    <script src="https:</cdn.jsdelivr.net/npm/hls.js@1"></script> </head> <body> <video id="video" width="640" controls></video> <script> const video = document.getElementById('video'); if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource('https:</example.com/index.m3u8'); hls.attachMedia(video); } </script> </body> </html> hls.js の読み込み 動画URLを渡す