投稿者: @jigen2020/5/24 8:37に作成

動画のストリーミング配信の概要

まえがき

タイトルの情報源は知人です。動画のストリーミング簡単にできないのか -> S3にAPIあった気がするという噂を聞いたので、「S3 動画 ストリーミング」とググってみたら二番目に これ(Amazon CloudFront メディアストリーミングチュートリアル) が出てきた。

実際ググる前にある程度の想像(ユーザーが動画をアップロード・サービス都合の形式に変換・ストレージに保存・ストレージから配信という手順を踏みそうだな…)をしていて図的にはだいたいその通り

Workflow Example: Content Distribution for VOD Services

どうやらこのチュートリアルで詳しいことがわかるようなので、自分が理解するためにも要約して記事にまとめようと思ったのがこの記事の動機です。

主な登場人物

Amazon S3

動画の保存場所として使う。Simple Storage Serviceの略

AWS Elemental MediaConvert

大規模配信用の動画形式への変換を従量課金でしてくれるサービス

Amazon CloudFront

いわゆるCDN 低レイテンシー・高速転送を実現するための仕組み

配信方法

動画の配信方法は二種類ある

  1. 動画全てを各デバイスに配信してから再生
  2. ストリーミング再生

1は簡単だがユーザーの通信料を無駄遣いする 動画を一部しか見ない場合でも全てDLしなければならない

ほとんどの場合2の方が適しているが少し追加で手間がかかる

動画ストリーミング用の形式

主なのは上 たぶん他にもあるがHLSかDASH使えば良さそう 環境によってはMSSと言う感じかな

仕組み

1つの動画ファイルを複数の動画とそのプレイリストに分割し、プレイヤーにはプレイリストを読み込ませて、仕様にしたがってセグメントした動画ファイルを読み込んで連続再生するというもの。 MSSに関しては、ぱっと見でわかる資料がファーストビューに見当たらなかったので上で説明したのと同じ仕組みかわからず。

HTTP Live Streaming (HLS)

細切れの動画ファイル .ts と、プレイリスト .m3u8

参考: ライブ動画配信プロトコル(HTTP Live Streaming, HLS)の概要図解メモ(AbemaTV/FRESH!)

Dynamic Adaptive Streaming over HTTP (DASH)

細切れの動画ファイル .ts もしくは .mp4 と、プレイリスト .mpd

参考: MPEG DASHを知る

ストリーミングに対応したプレイヤー

今回はWebブラウザ向けに出てるライブラリを探しました

有名なのは?

Googleの検索ヒット数的には、 HLS:DASH = 756,000,000:2,450,000 なのでHLSの方がググラビリティが高そう

上に記したライブラリに関する記事は、 hls.js:dash.js = 1,820,000:28,800,000 なのでdash.jsの方がヒット数が多かった

STAR数的には、 hls.js:dash.js = 4,759:2,537 でhls.jsの方が多い

まぁAWSのページで

HLS 形式 (最も広くサポートされているストリーミングプロトコル)

とされているので、特に特殊な要件がなければHLSを選択するのがよさそうな気がします

おわりに

Live Streaming(生放送)をしなければ、上記までの内容でインフラ組めそうです 具体的な実装には触れていないので、くれぐれも本実装前に少しずつ検証してください

参考になりましたら幸いです!では!