のんびりSEの議事録

プログラミング系のポストからアプリに関してのポストなどをしていきます。まれにアニメ・マンガなど

ライブ配信周りの技術を調べてみた

最近関わっているプロジェクトで、ライブストリーミング配信のインフラ周りについて調べたときの備忘録です。

Live配信技術調査

目標

AWSを利用してライブ配信を行う

インフラ関連

配信側

  • エンコーダ
  • 配信ソフトウェア

サーバー

  • 配信サーバー
  • ストリーミングサーバ
  • エッジサーバ
  • CDN

ライブ配信技術

ストリーミング用のプロトコル

Wiki参考

Adobe Flashプレーヤーとサーバー間で、音声・動画データのやりとりをするプロトコル

映像・音声のリアルタイムなストリーミング配信を制御するためのプロトコル

Appleが開発。HTTPベースのストリーミングプロトコル。Webサーバでも配信可能。

  • HDS(Adobe HTTP Dynamic Streaming

Adobeが開発。HTTPベースのFlash Video用ストリーミング

Amazon Media Service

  • Media Live
  • Media Package
  • Media Store

Media Live

ブロードキャストグレードグレードのライブ動画処理サービス ライブ動画ストリーミングをリアルタイムでエンコードエンコード 大サイズのライブ動画ソースを取得し、配信用に小さいサイズに圧縮

  • 映像を受ける
    • 配信ソフトウェアからEndpoint宛に映像を送信
  • 映像を変換して書き出す
    • HLS、SmoothStreamingやArchiveようも
    • MediaPackage, MediaStora, S3, WebDAV等に書き出し可能
    • 配信サーバー機能はない
    • 書き出し時にABR変換、DRM暗号化などもできる

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

  1. コンテナ名を入力しコンテナ作成
  2. アクセス権限のポリシーを設定設定例
  3. Media Liveで出力先を2箇所設定する必要があるので、もう1つ作成

Media Live

  1. Channel Input作成
  2. Input nameを入力
  3. Input typeを選択
  4. セキュリティグループの指定(どこからでも配信可能にしたい場合は、0.0.0.0/0)
  5. Input destinationsの入力(instance nameはストリーム名)
  6. Channelを作成
  7. Channel TemplateからLive eventを選択(下の方にある)
  8. Channel名入力
  9. IAM Roleの指定(Create role from templateを選択するとテンプレートから作成してくれる)
  10. Channel inputを先程作成したinputを指定
  11. 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を利用

  1. 設定 > 配信のURLとストリームキーを入力
  2. URLにはMediaLiveのInputsのエンドポイントrmtp://x.x.x.x:1935/xxxを入力
  3. ストリームキーにはエンドポイントのInstance nameを入力
  4. 録画開始、配信開始をクリックして配信
  5. 正常に配信されると、MediaStoreのItemsにディレクトリが作成されてファイルが作成される

視聴テスト

  1. MesiaStoraに作成されたm3u8ファイルに直接アクセスする(Safari)

直接m3u8を見ているためか、live感はそれほどない
SafariよりQuickTimePlayerのほうがいい

Media Package + Media LiveでLive配信

Media Package

  1. Media Package > Chanenl IDを入力しCreate Channel
  2. Channel Details、Cloud Frontを入力
  3. ID : Channel ID
  4. Input Type : Apple HLS
  5. Endpoint追加 Add Endpoint
  6. ID : endpoint ID
  7. Manifest Name : endpointのユニークとなるpathに使用

Media Live

  1. Channel Input作成(Media Storeのときと同じ)
  2. Channel Output作成
  3. 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を使用

CDNを利用して配信。Akamaiもありそう

Wowza

ライセンス料が別途必要なので今回は特に検証していない

参考文献