Amazon IVSの出力をAWS Elemental MediaLiveを使ってS3に保存する

  • 2020.11.04
  • IVS
Amazon IVSの出力をAWS Elemental MediaLiveを使ってS3に保存する

ども。キャレット合同会社の椎原です。

簡単ライブ配信システム IVSの出力を保存したい、そう思ったのですが、簡単にはいきませんでしたので注意点を。

注:AWS Elemental MediaStoreを使うのかと設定してみましたが、今回は使いません。
1)IVS → Media Live → S3 → CloudFront
2)IVS → Media Live → Media Store
の二パターンあり、1)の方法を解説します。AWSサポートに問い合わせたら、どっちでも良いとの回答でした。

アップロード

まず、CLIを使ってIVS → S3にしようとしました。あ、コマンドを実行するのはEC2上です。

aws s3 cp https://www.xxx/mov/xxx-samp001.mp4  s3://caret-test/

は失敗。(URLとバケット名はサンプルです)EC2から外部サイト→S3に送るのは駄目らしい。

次に、一度EBSへ取り込んでS3にアップロードすることにする。

curlして、aws s3 cp しようとしてみたが、curlの段階でストリーミングデータは途中で切れる(タイムアウトしてしまうため?)これも駄目。

結局うまくいった、ベストプラクティスはEMLを使うものです。EMLの設定方法はAmazon IVSで配信しているライブストリーミングをMediaLiveで録画してみた を参照してください。IVSとS3の設定方法はそれぞれ調べてください。

ほぼ、検索すれば出てくるので、ここでは注意点を。

①データの取り込み先はOBSなどの生成アプリの出力(rtmps)ではなく、IVSの出力(https)である。

OBSから直接取り込む方法は自分が使っているベストエフォートのインターネット回線でもできないことはないんですが、ブチブチ切れました。これは実用にはなりません。

②EMLの取り込み中にActive alertsが赤くなっている。

IVSの回線容量と動画生成アプリ(OBSなど)の画質は合わせておく。遅延が起きてます。SD回線にHD画像を流し込もうとしたら、OBSを使用時「切断ー再接続」が起きるので同様に分かります。

あと、データが流れてないときもActive alertsはエラーになります。

③出力先はs3://caret-test/main/ のようにする。

何の因果かファイル名が無いとかエラーがでることがありますが、ファイル名いりません。ディレクトリで指定してください。ちなみに、s3ssl://も使えるようです。

④作成した後、編集できない項目がある。

新しく作ってください。[Add]ボタン押して作成しないと選択できない設定があります。例えば、Add output groupのページ。S3に保存する場合、出力タイプでArchiveを選択しないといけないのですが編集では見つかりませんでした。

⑤デフォルトで2カ所に出力指定するようになっているけどS3の場合1カ所でOK

普通の用途で、S3の仕様上耐久性は99.999999999%なので複数保存の必要はほぼ無い。

⑥SDとかHDとか指定するのは回線だけでなく、Stream settingsでwidthとheightを指定する必要がある。

ライブストリームを使うのならArchive指定しない

出力グループをHLSにして、CDN設定をHls basic putにします。archiveにすると上記と一緒になります。

このサイト通りやれば問題ないでしょう。→ライブのアーカイブ化 https://aws-mediaservices-jp.workshop.aws/handson2.html

注意すべきは、丁寧すぎて同じことなんども書いているので、うっかり左のメニューをクリックして他の似たような設定画面を出して迷ってしまう点です(私、これやって、アレ? なんでこんな設定するんだろうと一瞬考え込んでしまいました……)

なお、Media Live使えば、自動的にビデオストリームを分割して保存してくれます。S3にarchive保存すると、数Gのファイルができて、それはそれでいいのかもしれませんが、ユーザーが丸ごと保存できるのでコンテンツが不正に配布される可能性があります

ダウンロード

最大1万5千人が視聴できるIVSでIAMユーザーを発行したりするのは現実的ではありません。S3 Presinged URLというものを使います。

【AWS S3】S3 Presigned URLの仕組みを調べてみた
まあ、私はこれを見てやったら問題なくできてしまったので、S3からダウンロードするのは以下省略。

ライブストリーム配信の場合

作成した分割された.tsファイルの配信方法は、CloudFrontを使います。.tsファイルを指定するのではなく、.m3u8のマニフェストファイルを指定し、視聴するときに、順番に分割された.tsファイルを見ることができます。こちらで結合とか考えなくてもいいです。

https://aws-mediaservices-jp.workshop.aws/handson5/step4.html

テスト視聴はhttps://hls-js.netlify.app/demo/で。左上のURLのボックスに「例 https://xxxxxricl68.cloudfront.net/live.m3u8」とCloudFrontのURL+マニフェストファイルのm3u8を入れて、enter。

私は403エラーが出たので、S3のブロックパブリックアクセスをパブリックにしたら視聴できました。

こんな感じで、参考になれば。

お問い合わせ

キャレット合同会社へのお問い合わせやご相談などがありましたら、以下のメールフォームよりお気軽にご連絡ください。

IVSカテゴリの最新記事