ライブ配信のアプリケーションを組んでみるためのメモ
きっかけ:こちらのツイートを拝見して、技術スタック的にも興味が出たので自分にも配信系のアプリが組めないかと思った次第
予習知識
まずライブ配信がどうやって実現されているか
AWSJ の資料「クラウドネイティブサービスで実現するライブ動画配信」が参考になるのでこちらから知識を得る
普通にコンテンツダウンロードするだけの形式ではだめで、Streaming 対応なプロトコルで会話しないといけない。
HTTP Streaming をいうものを使えばデバイスの標準的なプレイヤーやプラグインで再生できるとのことで、ユーザー普段がない。普通の web 世界のキャッシュも利用できるので、CDN で配信することも可。たぶん HTTP Stream というのは何で通信するかという手段であって、データがどのようなフォーマットをしているかはまた別問題。HLS とか MPEG-DASH とかそういったフォーマットの違いがあり、プラットフォームによってサポート状況も異なる
※ ありもののコンテンツを動画再生するだけならば HTML5 の video タグを使えばよいし、通常の web サーバーがあれば対応可能。ライブ配信するなら HTTP Streaming などのテクノロジーを採用する必要がある
HLS や MPEG-DASH は OS がネイティブサポートしている場合が多いため、これらをベースにストリーミングの標準化が図られている最中
ビットレートの調整 (Adaptive bitrate
複数のビットレートを用意しておき、回線状況に応じてビットレートを再生途中でも変更できるようにする
配信の構成
資料 p.18 - 19 より
インターネット経由で配信する場合に、通信品質をどうやって担保するかは課題。以下のキーワードが挙がっている
- TCP / UDP
- FEC, ARQ (前方誤り訂正, 自動再送要求)
- RTMP, RP+FEC, SRT, Zixi, RIST
- 収録環境から映像と音声を出力し、エンコーダに転送
- エンコーダによって特定のフォーマットに変換して Origin に転送
- Live Encoder (とは?) によって、HTTP Streaming のような配信方法を使って配信。フォーマット=マルチメディアコンテナは HLS や MPEG-DASH を利用(必要があれば CDN を噛ませることも可能)
"Live Encoder" という単語が出た。通常の Encoder とは異なる概念であるらしい
AWS では
Elemental シリーズというのが色々配信関係のプロダクトとして出ているらしい。
正直こんなに Elemental シリーズが多いとは知らなかったのでびっくりしている。
BlackBelt に Media Services の説明があったのでこれを引用。
| Service | description |
| :--- | :--- | :--- |
| MediaConnect | ライブストリーミングを伝送する |
| MediaConvert | マルチフォーマット・コーデックをサポートするトランスコーディングを行う |
| MediaLive | ライブ配信用のエンコーディングを行う |
| MediaPackage | Just-In-Time Package のサービス、DRM (Digital Rigths Management) やタイムシフト再生を提供する(ライブ配信のワークロードには不要) |
| MedhiaStore | ライブ配信用のストレージサービス |
| MediaTailor | サーバーサイドで最適化された広告挿入を可能にする |
いろいろなユースケースに対応した(Media Services を活用した)ハンズオン集が公開されているので、これを使うことでそれぞれのユースケースを理解できそう