Tag: MediaLive

cheetsheet/aws/medialive

チャンネル操作 効果 コマンド チャンネルのリスト aws medialive list-channels –region ap-southeast-1 | jq -r ‘.Channels[].Id’) 止める aws medialive stop-channel –channel-id チャンネル ID 削除 aws medialive delete-channel –channel-id チャンネル ID 作成 aws medialive create-channel –cli-input-json file://channel_sample.json | jq ‘.Channel.Id’ 開始 aws medialive start-channel –channel-id チャンネル ID インプットを作成する aws medialive create-input –cli-input-json “$CREATEINPUT” –region ap-southeast-1 インプット id を調べる aws medialive list-inputs –region ap-southeast-1 | jq -r ‘. Read more...

MediaLiveでRTMP接続があった事を検知する

ひょっとするとServerlessFrameworkでも検索条件が作れるかもしれないが手動で作成した MediaLiveでRTMPで接続ができた際にトリガーとする方法 { "source": [ "aws.medialive" ], "detail": { "alarm_state": [ "cleared" ], "message": [ "Waiting for RTMP input" ] } } ターゲットはStepFunctionを指定した。 ServerlessFrameworkで、直接、CloudWatch ルールからStepfunctionを指定することはできなかった。 通常のlambdaであれば、ServerlessFrameworkで指定可能だろう、若干面倒そうではあるかな。手動で設定しよう。 Read more...

MediaLiveでライブ配信システムを構築する

ライブ配信システムの構成 映像データは下記のように流れる。 カメラ、マイク -> ローランドの映像ミキサー -> LiveShell X -> MediaLive -> MediaStore -> CloudFront -> 各プラットフォームのプレーヤー この手順では、MediaLive、MediaStore、CloudFrontの設定について行う。 このうち、MediaLiveには インプット( LiveShell X からの RTMP を受け取る ) チャンネル( 映像データをエンコードする ) で構成されている。 またMediaStoreはストレージで、MediaLiveでエンコードされたデータを保存する領域になっている( MediaLive だけでは映像を保存できない、かならず別の保存する領域に転送する必要がある ) CloudFrontは大規模配信で使われるCDNで、 複数ユーザにキャッシュを見せる事で、MediaStoreの負荷を下げるために用いている。つまりCloudFront無しでも配信は可能だが、CloudFront無しだとライブ授業のユーザー数には耐えられないため、導入しておいた方がよい。 MediaStore( 映像チャンク置き場 )を作る MediaStoreは「MediaLiveでエンコードされた映像のチャンクを置く場所」として必要( MediaLiveにはストレージが無いので、別途つくる必要がある ) MediaLiveを作る際にMediaStoreのアドレスを指定する必要があるので、事前に作成する。 チャンネルを作成する MediaLiveで映像データをエンコードするチャンネルを作成する 管理画面 からログイン 設定例 入力名: dev 入力タイプ: RTMP (プッシュ) Network mode: Public 入力セキュリティグループ: 既存の使用、0.0.0.0/0 入力の送信先: SINGLE_PIPELINE [チャンネルの作成] をクリック ( その環境にMediaLive用のロールが無ければ作る必要があるので )テンプレートからロールを作成する チャンネルテンプレートは[ Live Action ]をベースに作成する事にした。 ( このテンプレートの内容は時代によって変わるようだ。以前よりテンプレートも増えているし内容も異なる ) Read more...

MediaLiveで配信中のファイルを結合する

ライブ動画のTS結合方法 高解像度側 現在のチャンク数を確認 $ curl https://live3.test.com/a/live_1080p30.m3u8 #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:2 #EXT-X-MEDIA-SEQUENCE:1230 現在、1230までチャンク数が進んでいる。 最初から現在までのチャンクをダウンロード ( ユーザから見えるのはCloudFrontであるため、MediaStore経由ではなく、CloudFront経由で取得している。 特にライブ中はMediaStoreの制限にかかるケースがありえるので、直接の取得は避ける ) wgetコマンドでTSファイルを取得 作業ディレクトリ作成 mkdir -p ~/tmp/$(date +%Y%m%d) cd ~/tmp/$(date +%Y%m%d) ファイル取得 for num in $(seq -w 1 1230) ; do echo $num ; wget https://live3.test.com/a/live_1080p30_0${num}.ts ; done ダウンロードしたファイルリスト作成 for num in $(seq -w 1 1230) ; do echo "file ./live_1080p30_0${num}.ts" >> file_list.txt ; done 結合 ffmpeg -f concat -safe 0 -i file_list.txt -c copy $(date +%Y%m%d). Read more...

MediaService関連で知ったこまごまとした事

RTMPの接続が切れた場合どうするか チャンネルのグローバル設定にありそう グローバル構成 - 入力損失の動作 グローバル構成設定。 Input Loss Behaviorフィールドは、AWS Elemental MediaLiveが入力ロスを処理する方法を変更します。 AWS Elemental MediaLiveは、入力が予定時刻内に到着していないことを検出すると、前のフレームを設定可能なミリ秒数(ゼロから永遠に)繰り返します。 その時間が経過すると、設定可能なミリ秒数(ゼロから永遠)の黒いフレームが表示されます。 その時間が経過すると、指定されたスレートまたは指定された色に切り替わります。 入力が再開されると、通常の取り込みが続行されます。 この動作を変更することができます。入力損失動作で、入力損失動作を選択します。 表示されるフィールドにはデフォルト値が表示されます。 必要に応じてフィールドを変更します。 後でデフォルトの動作に戻したい場合は、Input Loss BehaviorをDisabledに設定するだけです。 TSファイルを確認する ffmpeg内のツールの ffprobeを使う -show_frames フレームごとの情報を取得する( かなり出力されるのでlessで見る ) キーフレームを30秒ごとに入れると、videoとaudioで30フレーム分の情報を見ることになるのでかなり出力される。 ffprobe -show_frames hoge.ts | less フォーマットを確認する ❯ ffprobe -show_format hoge.ts ffprobe version 3.3.2 Copyright (c) 2007-2017 the FFmpeg developers built with Apple LLVM version 8.1.0 (clang-802.0.42) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.3.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --disable-lzma --enable-vda libavutil 55. Read more...

MediaLiveでテンプレートから作製する

AWSメディアサービスで 動画配信のパラメータを変更して検証するの… 超面倒。 そもそも、都度チャンネル作らなきゃならない設定はなんなの。辛み。 CLIから作りたくなってきた。aws-cliをアップデートするとメディアサービスも使えるようになります! 最初に aws-cliをアップデートする pip install -U awscli チャンネルidを取得する 先にチャンネルのIDを確認します。WebUIだと [ MediaLive ]->[ Channels ]->作成したチャンネルのラジオボタンをクリック->[ ID ]の所の数字をメモ aws medialive describe-channel --region ap-southeast-1 --channel-id チャンネルid > channel_sample.json CLIからだと aws medialive list-channels --region ap-southeast-1 で取得できます チャンネル設定を変更する 上記の describe-channel はユニークであるべきidやチャンネルごとに振られるIPアドレス、ステータスなども出力されてしまいますので削除します。 PipelinesRunningCount EgressEndpoints State Id Arn 既にある設定を削除する 注) 下記を実行すると、既にあるチャンネル設定が一つ消えます。高速に検証するため、チャンネル設定を消して作ってを行っていますが、サービスするようになったら変更する必要があるでしょう。 上記のチャンネルidを取得する方法を利用して、既存のチャンネル設定を削除しています。 aws medialive delete-channel --region ap-southeast-1 --channel-id $(aws medialive list-channels --region ap-southeast-1 | jq -r '.Channels[].Id') jsonからチャンネルを作る aws medialive create-channel --region ap-southeast-1 --cli-input-json file://channel_sample. Read more...

MediaLiveをCloudWatchで監視する

背景 MediaLive ですが、いろいろなエラーを通知してくれます。 やれ「RTMP 接続が切れたよ」とか「オーディオ入力 or ビデオ入力が無いよ」とかですね。 通常、ライブ配信が始まる前は当然、MediaLive への入力は無いはずなので、通知は構わないのですが、 ライブ配信中に出ると、それはもうトラブルシューティングの情報の一つとして重要なものになります。 ( というか当初、エラーは出てるっぽいし、挙動はおかしいんだけど、どんなエラーが出てるか分からないケースがあって窮地な時がありました ) 今は管理画面の[ channels ]->[ 目的のチャンネル ]->[ Alerts ]から確認できます。が、ログとして残しておくのは良い事だと思います。 このエラー出力のフォーマットは決まっている訳ではなく、たまに変わります。ので 『あー、エラー出力が変わったからアラートが上がらなくなったのね』、という事がログを残しておくと分かります。 手順 WebUI SNS トピック作成 SNS のページ( https://ap-northeast-1.console.aws.amazon.com/sns/ )を開く [ トピック ]->[ 新しいトピックの作成 ]->トピック名の入力、私は[ MediaLiveEvent ]、表示名[ MediaLiveEvent ]と入れてみた 作成したトピックの ARN をコピペ arn:aws:sns:ap-northeast-1:1111111111111:MediaLiveEvent ( 同じ SNS 内の左側メニュー )[ サブスクリプション ]->[ サブスクリプションの作成 ] [ トピック ARN ]に先程作成した MediaLive のトピックの ARN を入力 Read more...

MediaLive+MediaStore+CloudFrontで手軽に動画配信

2018年初頭 ライブ配信基盤を AdobeMdiaServer から MediaLive によるライブ配信に切り替えました。 2020年以降ですとVimeo Liveが有力候補です。 背景 動画配信システムだけで良いのでシンプルに立てたい( カメラの映像を手っ取り早くユーザに届けたい ) 必要なときだけ配信システムを立てて終了したい。 似たような案件ができたときに、似たようなシステムをスピーディーに構築したい 現状、EC2 で AdobeMediaServer 立ててライブ配信している AdobeMediaServer のバージョンアップ? <- それに伴う検証したいか、というと検証工数を割きづらい… その点、AWS 上のサービスなら、後から機能追加があったりする。 今回は使っていませんが、CMAF 対応が追加された。機能追加の検証をクラウドベンダがやってくれて、我々はその時間をもっと別な事に使える。あるいは早く帰れてハッピー。 逆に「我々は配信方法で独自のチャレンジをして差別化を狙うぜ」には向いてない(現状、弊社的にそこでチャレンジはしてない)その観点でのチャレンジは EC2 上で構築した方が様々な戦術がとり得る 何か仕様変更に伴う負荷上昇(対応ビットレートの追加とか)に対する検証工数がビジネスに繋がりにくい なぜ、MediaService? AWS で費用をまとめられる。あとトラフィックが増えた場合、ネットワーク費用のディスカウントができるかもという。 lambda から配信システムの起動/終了とかできそう Azure も魅力的に見える。ただ CLI や API での操作ってどうやるんだろうか、という調査に時間とられそうだった(その点、AWS なら手軽に CLI で操作できるのは知っていった) システム構成 カメラ -> エンコーダー -> MediaLive -> MediaStore -> CloudFront -> Safari CDN でコストを下げつつ、ライブ配信したい構成ですね。 それぞれの役割は MediaLive: RTMP などカメラからの情報を受け付ける。目的の動画フォーマットにエンコードする。ただ、これ自体にはストレージ機能は無い。 MediaStore: CloudFront と経由するためのストレージ Read more...

AWS MediaLive + MediaPackageを使ってライブ配信

目的 2017/11 にリリースされた AWS メディアサービスを使って、ラクして動画配信したい。 できる限り遅延は無い方向で! まずざっくりとした使い方を把握して、どの程度、細かく設定できるのか知りたい! ( 実際のスマホでの確認までではなく、PC 上でエンコードされたライブが見えるところまでが今回のゴール ) 作りたいシステム構成 ライブカメラ -> Wirecast -> RTMP(ないし RTSP) -> エンコーダー -> CDN -> ユーザ CDN 使うと大規模に安く配信できるので使いたい。が、当然できる限り遅延は少なくしたい。 感想 あとマルチビットレートの設定が最初から入っているのとか、冗長化を初めから考慮されてる設定は素敵。 2017/12/04 時点では、MediaPackage で選択可能な配信フォーマットは HLS のみでした。Mpeg-DASH とか必要な場合は、対応待ちです。 ただ、UI というか画面遷移が迷うところが多いし、一通り設定が完了しないと、 カメラからのデータを送れないしで、挫けそうになりました。この辺は時間が解決してくれるよ!という気持ちで。 背景 EC2 で wowza や AdobeMediaServer 立てて運用するのはもちろんありだし、カスタマイズ性はこちらの方が高そうではある(インスタンスプランも選択できるし) が、運用コストはかかるのでありできれば減らしたい。 AWS メディアサービスって?(複数サービスの集合でした) 参考 クラウドベースの映像処理、保存、収益化 classmethod 様 2017/12 現在、MediaConvert、MediaLive、MediaPackage、MediaStore、MediaTailor という 5 つのサービスで構成されています。 このうち、自分に必要そうな『MediaLive』『MediaPackage』のみを使ってみました。 VOD、および他動画解析サービスなどと連携する場合は S3 に保存する MediaStore も併せて使う必要があるかもしれません。 設定方法 MediaLive について (先に MediaPackage から設定する必要があります ) 当初、名前に Live ってあるし、MediaLive だけで完結できるか? Read more...