動画配信システムを作ってみる
参考文献
動画配信方法
・ストリーミング配信
・ライブ配信:生放送
・オンデマンド配信:録画した動画を配信
・ダウンロード配信
・プログレッシブダウンロード配信
ストリーミングサーバー
ストリーミングサーバとは、動画ファイルをダウンロードしながら同時に再生するストリーミング配信で利用されるサーバ。動画ファイルをパケット単位で細分化し、端末のメモリに蓄積して動画を再生。視聴後はメモリからパケットは削除されるので、端末に動画は残りません。
・データを受信しながら再生できる
・最適なデータ速度で通信でき、データ通信に無駄が生じにくい
・ファイル保存は不可、PCのキャッシュに残らない
Webサーバ
プログレッシブ配信にはWebサーバが用いられ、動画ファイルをダウンロードして端末に保存しながら動画を再生します。端末に動画が残る。
・データの受信が完了してから、再生・早送り・巻き戻しが可能
・最適なデータ速度を選べない
・ファイル保存ができ、PCのキャッシュにも残る
・同時接続数が多いと、配信不可になることもある
参考文献
動画配信の仕組み
・ストリーミング配信
・プログレッシブダウンロード配信
・DRM配信
参考文献
・https://aws.amazon.com/jp/cdp/cdn/
・https://aws.amazon.com/jp/builders-flash/202202/video-on-demand-on-aws/?awsf.filter-name=*all
・https://aws.amazon.com/jp/cdp/cdn-live/
オンデマンド配信構成例
AWS Elemental MediaConvert で MP4 等の形式の動画データから HTTP Live Streaiming (HLS)形式へトランスコードしたファイルを Amazon S3 に格納し、コンテンツデリバリーネットワークである Amazon CloudFront を利用することで安定的なオンデマンド配信が実現。
ライブ配信構成例
5Mbps の映像を 2 時間ライブ配信し、5,000 人が視聴する環境を考慮しています。エンコーダーから送られる映像/音声信号を AWS Elemental MediaLive にて HTTP Live Streaming (HLS) 形式に変換し AWS Elemental MediaPackage へと出力し、AWS Elemental MediaPackage がオリジンサーバーとして機能。
参考文献
配信方式
- GET Manifest file
- GET Media Segment
- GET Manifiest file (Polling)
ライブ中に定期的に更新されるため、プレイヤーは追加された Media Segment を順次取得する
- 配信元からは持続接続型で軽量な RTMP や UDP ベースの RIST などで動画を送る
- サーバーサイドでリアルタイムで HLS / MPEG-DASH 形式にトランスコードして配信される
マルチビットレート
ライブ動画配信の課題
フォーワードバッファレイテンシというプレイヤーのバッファーが原因。品質を担保できる。バッファサイズが増やせば増やすほど、ユーザが再バッファリングする回数が少なくなるが、遅延が犠牲になる。
遅延を最小化するには, Media Segment のサイズを小さくする & バッファリングする数を少なくする。
一方、必要なキーフレームは増え帯域も圧迫する & リクエスト数も増えるためHTTPリクエスト/レスポンスのオーバーヘッドものってくる。
MPEG-2 TS エンコーディング中にさらに小さなフラグメントを送る方式。
Media Segment ファイル(ts) = メタデータ + メディアデータ(コンテナ)をいくつかにバッファリングさせてクライアントに送るのが一般的。
1 Segment を書き終わるまでに Chunk というさらに小さな単位で出力する。ファイルは完全ではないが、できたものを即時に送信可能になった。
ユースケース
シンプルな HLS ライブ配信
HLS & MPEG-DASH ライブ配信 / DRM
ライブ配信をアーカイブ
ライブ配信中に巻き戻し(DVR)
MediaPackage のエンドポイントに開始/終了時刻をパラメータに含めることで指定した時間範囲を含むマニフェストファイルを取得。
File/Live をスケジュール配信
同時配信数が増減
配信数が可変の場合、あらかじめライブチャンネルを多めにプールして、stop/start でチャンネル管理してコスト最適化する。
超低遅延配信
AWS Elemental MediaLive
MediaStore や MediaPackage もオリジンストレージとして使用できるが、アーカイブ動画であれば低価格で済む S3 がおすすめ。(Manifest ファイルの更新も行われないため)
Input ソースとして S3 上のファイルを指定できるようになり、時間指定で Input をスイッチングできる。
AWS Elemental MediaStore
S3 は結果整合性モデルを採用してるため、ライブ放送のように高頻度で Manifest ファイルが更新される場合には動画止まってしまう。
Amazon CloudFront
ライブ配信ではキャッシュヒット率が悪いのではないか?
AWS Elemental MediaConnect
打ち上げ時のパケロス、再送処理による遅延の対策で検討
AWS Elemental MediaPackage
マルチプラットフォームに対応したり、DRMによりコンテンツ保護をかけたり、タイムシフトや巻き戻しなど高度な機能が使える。
参考文献
- InterBee 2021 AWS Media Services を活用した動画配信
VOD 配信
4K解像度や広いレンジで明るさを表現できるハイダナミックレンジなどの高画質なコンテンツ。
マルチデバイスによる複数のビットレートで配信。(アダプティブビットレート)
MediaConvert
映像が複雑なところではビットレートを高く、動きが少ないシーンではビットレートを小さくできる。
容量を最適化できるため、コストや伝送速度に好影響。
Amazon IVS
超低遅延配信 & 簡単にセットアップ可能
動画の任意のチャンクにメタデータを付与することができる。
クイズのポップを表示するなど
- AWS Media Services を使ったライブ映像配信入門