ライブ配信周りの技術を調べてみた
最近関わっているプロジェクトで、ライブストリーミング配信のインフラ周りについて調べたときの備忘録です。
Live配信技術調査
目標
インフラ関連
配信側
- エンコーダ
- 配信ソフトウェア
サーバー
- 配信サーバー
- ストリーミングサーバ
- エッジサーバ
- CDN
ライブ配信技術
ストリーミング用のプロトコル
MMS(Microsoft Media Server Protocol)
映像・音声のリアルタイムなストリーミング配信を制御するためのプロトコル
- HDS(Adobe HTTP Dynamic Streaming
Adobeが開発。HTTPベースのFlash Video用ストリーミング
Amazon Media Service
- Media Live
- Media Package
- Media Store
Media Live
ブロードキャストグレードグレードのライブ動画処理サービス ライブ動画ストリーミングをリアルタイムでエンコードエンコード 大サイズのライブ動画ソースを取得し、配信用に小さいサイズに圧縮
- 映像を受ける
- 配信ソフトウェアからEndpoint宛に映像を送信
- 映像を変換して書き出す
Media Package
コンテンツを簡単にパッケージングでき、様々な動画再生デバイスに簡単に配信可能(Endpoit提供)
- InputはHLSのみ
- CloudWatchによるモニタリング
- 配信形式はHLS/mpeg-DASH/SmoothStreaming
- デジタル著作権管理 (DRM)
- 高度なカスタマイズが可能なパッケージングオプションとパラメータを利用できるため、ストリーミングプロトコル、セグメントサイズ、マニフェスト調整、字幕、メタデータ処理、幅広い DRM へのサポート
- 追っかけ再生等可能
Media Store
メディア向けに最適化されたAWSストレージサービス
- httpにてファイルのPUT/GETが可能
- 最大ファイルは10MB
- 受信するリクエストの量に合わせて自動的なスケールが行われ、負荷が増加しても、視聴環境の品質に悪影響を与えることはない
Media Store + Media Liveでライブ配信
Mesia Store
- コンテナ名を入力しコンテナ作成
- アクセス権限のポリシーを設定設定例
- Media Liveで出力先を2箇所設定する必要があるので、もう1つ作成
Media Live
- Channel Input作成
- Input nameを入力
- Input typeを選択
- セキュリティグループの指定(どこからでも配信可能にしたい場合は、
0.0.0.0/0
) - Input destinationsの入力(instance nameはストリーム名)
- Channelを作成
- Channel Templateから
Live event
を選択(下の方にある) - Channel名入力
- IAM Roleの指定(Create role from templateを選択するとテンプレートから作成してくれる)
- Channel inputを先程作成したinputを指定
- Output GroupsのHDのURLにMedia Storaで作成したコンテナのURLを入力
- 先頭のhttps://をmediastoressl://として入力する必要がある
- 末尾に/path/basenameという形式でpathとbasenameを指定(/では終了できない)
https://docs.aws.amazon.com/ja_jp/medialive/latest/ug/about-hls-file-locations.html
配信テスト
OBSを利用
- 設定 > 配信のURLとストリームキーを入力
- URLにはMediaLiveのInputsのエンドポイント
rmtp://x.x.x.x:1935/xxx
を入力 - ストリームキーにはエンドポイントのInstance nameを入力
- 録画開始、配信開始をクリックして配信
- 正常に配信されると、MediaStoreのItemsにディレクトリが作成されてファイルが作成される
視聴テスト
- MesiaStoraに作成されたm3u8ファイルに直接アクセスする(Safari)
直接m3u8を見ているためか、live感はそれほどない
SafariよりQuickTimePlayerのほうがいい
Media Package + Media LiveでLive配信
Media Package
- Media Package > Chanenl IDを入力しCreate Channel
- Channel Details、Cloud Frontを入力
- ID : Channel ID
- Input Type : Apple HLS
- Endpoint追加 Add Endpoint
- ID : endpoint ID
- Manifest Name : endpointのユニークとなるpathに使用
Media Live
- Channel Input作成(Media Storeのときと同じ)
- Channel Output作成
- Output Groups (Destination入力)
- URL : Media Packageのendpoint
- Username : Media Package ChannelのUsername
- Password : Media Package ChannelのPassword
Create AWS Elemental MediaLive parameter
でパラメータ情報を保存
rtmpでlive配信
Cloud Frontを使用
Wowza
ライセンス料が別途必要なので今回は特に検証していない