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

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

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for PLAY, inc. PLAY, inc.
June 22, 2026
19

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

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を渡す