Tag: MediaLive
Posted:
| Categories:
cheatsheet
| Tags:
AWS,
cheatsheet,
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 ‘.Inputs[].Id’ |
| インプット id から詳細を得る | aws medialive describe-input –input-id インプット ID –region ap-southeast-1 |
| インプット用のスケルトンを得る( 上記の json より、Destinations の雛形が良い ) | aws medialive create-input –generate-cli-skeleton |
セキュリティグループの雛形を得る
aws medialive create-input-security-group --generate-cli-skeleton
{
"WhitelistRules": [
{
"Cidr": ""
}
]
}
こんな感じにしたい
Read more...Posted:
| Categories:
AWS
| Tags:
MediaLive
ひょっとするとServerlessFrameworkでも検索条件が作れるかもしれないが手動で作成した
MediaLiveでRTMPで接続ができた際にトリガーとする方法
{
"source": [
"aws.medialive"
],
"detail": {
"alarm_state": [
"cleared"
],
"message": [
"Waiting for RTMP input"
]
}
}
ターゲットはStepFunctionを指定した。
ServerlessFrameworkで、直接、CloudWatch ルールからStepfunctionを指定することはできなかった。
通常のlambdaであれば、ServerlessFrameworkで指定可能だろう、若干面倒そうではあるかな。手動で設定しよう。
Read more...Posted:
| Categories:
AWS
| Tags:
Cloudfront,
LiveShell,
MediaLive,
MediaStore
ライブ配信システムの構成
映像データは下記のように流れる。
カメラ、マイク -> ローランドの映像ミキサー -> LiveShell X -> MediaLive -> MediaStore -> CloudFront -> 各プラットフォームのプレーヤー
この手順では、MediaLive、MediaStore、CloudFrontの設定について行う。
このうち、MediaLiveには
- インプット( LiveShell X からの RTMP を受け取る )
- チャンネル( 映像データをエンコードする )
で構成されている。
またMediaStoreはストレージで、MediaLiveでエンコードされたデータを保存する領域になっている( MediaLive だけでは映像を保存できない、かならず別の保存する領域に転送する必要がある )
CloudFrontは大規模配信で使われるCDNで、
複数ユーザにキャッシュを見せる事で、MediaStoreの負荷を下げるために用いている。つまりCloudFront無しでも配信は可能だが、CloudFront無しだとライブ授業のユーザー数には耐えられないため、導入しておいた方がよい。
MediaStoreは「MediaLiveでエンコードされた映像のチャンクを置く場所」として必要( MediaLiveにはストレージが無いので、別途つくる必要がある )
MediaLiveを作る際にMediaStoreのアドレスを指定する必要があるので、事前に作成する。
チャンネルを作成する
MediaLiveで映像データをエンコードするチャンネルを作成する
管理画面 からログイン
設定例
入力名: dev
入力タイプ: RTMP (プッシュ)
Network mode: Public
入力セキュリティグループ: 既存の使用、0.0.0.0/0
入力の送信先: SINGLE_PIPELINE
[チャンネルの作成] をクリック
( その環境にMediaLive用のロールが無ければ作る必要があるので )テンプレートからロールを作成する
チャンネルテンプレートは[ Live Action ]をベースに作成する事にした。
( このテンプレートの内容は時代によって変わるようだ。以前よりテンプレートも増えているし内容も異なる )
[ Channel class ] は [ SINGLE PIPELINE ]を選択する。 標準では[ STANDARD ]になっているが、正しく冗長化を試みるとなると、インターネット回線を2つ用意するような話になるので、シンプルに[ SINGLE PIPELINE ]で設定する。
Read more...Posted:
| Categories:
AWS
| Tags:
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).mp4
低解像度側 作業
ファイル取得
Read more...Posted:
| Categories:
AWS
| Tags:
MediaLive,
MediaStore
AWSメディアサービスで 動画配信のパラメータを変更して検証するの… 超面倒。
そもそも、都度チャンネル作らなきゃならない設定はなんなの。辛み。
CLIから作りたくなってきた。aws-cliをアップデートするとメディアサービスも使えるようになります!
最初に aws-cliをアップデートする
チャンネル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.json
チャンネルをスタートする
aws medialive start-channel --region ap-southeast-1 --channel-id $(aws medialive list-channels --region ap-southeast-1 | jq -r '.Channels[].Id')
チャンネルをストップする
aws medialive stop-channel --region ap-southeast-1 --channel-id (aws medialive list-channels --region ap-southeast-1 | jq -r '.Channels[].Id')
Read more...Posted:
| Categories:
AWS
| Tags:
AWS,
CloudWatch,
lambda,
MediaLive
背景
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:123456789012:MediaLiveEvent
同じ SNS 内の左側メニュー->[ サブスクリプションの作成 ]
[ トピック ARN ]に先程作成した MediaLive のトピックの ARN を入力
プロトコル メール(ほかにも lambda とかから Slack に送信できたりする)
エンドポイント : 自分のメールアドレス
はじめてのアラートメール設定の場合、AWS から確認のメールが飛ぶ
- [ AWS Notification - Subscription Confirmation ]という件名のメールがあったらメール本文内のリンクをクリック
CloudWatch
- cloudwatch のページに移動*
- [ イベント ]->[ ルールの作成 ]
- [ イベントパターン ]になってること
- [ カスタムイベントパターン ]に変更
カスタムイベントパターンの内容としては下記を入力
{
"source": [
"aws.medialive"
]
}
- 右側の[ ターゲットの追加 ]->[ SNS トピック ]に変更->[ トピック ]はプルダウンメニューから先程、作成した SNS のトピックを選択
- [ 設定の詳細 ]
- ルールの定義
- 名前: 任意
- 説明: 任意
- [ ルールの作成 ]
- メールボックスを確認
CLI
参考: SNS をコマンドラインから設定する : 電子の密林を開拓する
Read more...Posted:
| Categories:
AWS
| Tags:
CloudFront,
MediaLive,
MediaStore
2018年初頭 ライブ配信基盤を AdobeMdiaServer から MediaLive によるライブ配信に切り替えました。
2020年以降ですとVimeo Liveが有力候補です。
背景
- 動画配信システムだけで良いのでシンプルに立てたい( カメラの映像を手っ取り早くユーザに届けたい )
- 必要なときだけ配信システムを立てて終了したい。
- 似たような案件ができたときに、似たようなシステムをスピーディーに構築したい
- 現状、EC2 で AdobeMediaServer 立ててライブ配信している
- AdobeMediaServer のバージョンアップ? <- それに伴う検証したいか、というと検証工数を割きづらい…
- その点、AWS 上のサービスなら、後から機能追加があったりする。
- 今回は使っていませんが、CMAF 対応が追加された。機能追加の検証をクラウドベンダがやってくれて、我々はその時間をもっと別な事に使える。あるいは早く帰れてハッピー。
- 逆に「我々は配信方法で独自のチャレンジをして差別化を狙うぜ」には向いてない(現状、弊社的にそこでチャレンジはしてない)その観点でのチャレンジは EC2 上で構築した方が様々な戦術がとり得る
- 何か仕様変更に伴う負荷上昇(対応ビットレートの追加とか)に対する検証工数がビジネスに繋がりにくい
- AWS で費用をまとめられる。あとトラフィックが増えた場合、ネットワーク費用のディスカウントができるかもという。
- lambda から配信システムの起動/終了とかできそう
- Azure も魅力的に見える。ただ CLI や API での操作ってどうやるんだろうか、という調査に時間とられそうだった(その点、AWS なら手軽に CLI で操作できるのは知っていった)
システム構成
カメラ -> エンコーダー -> MediaLive -> MediaStore -> CloudFront -> Safari
CDN でコストを下げつつ、ライブ配信したい構成ですね。
それぞれの役割は
MediaLive: RTMP などカメラからの情報を受け付ける。目的の動画フォーマットにエンコードする。ただ、これ自体にはストレージ機能は無い。
MediaStore: CloudFront と経由するためのストレージ
CloudFront: MediaStore に貯められた
それぞれを構築する順序だが、MediaLive の設定で「どこに動画データを貯めるのか」という設定が必要なため、
MediaStore の設定から行う
Read more...Posted:
| Categories:
AWS
| Tags:
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 も併せて使う必要があるかもしれません。
設定方法
(先に MediaPackage から設定する必要があります )
当初、名前に Live ってあるし、MediaLive だけで完結できるか?と思いきやできず…
なんか、CDN から見えるはずのオリジンサーバに該当する設定が無くね? どこで作るの? と見つからなかった。
MediaLive は「カメラから入ってきたデータをエンコードして Push する」という機能までなので、
それを「CDN などから Pull するための機能は『MediaPackage』が担当する」という事に気づかなかった。ので先に MediaPackage の設定から行う必要があります。
Read more...Posted:
| Categories:
AWS
| Tags:
MediaLive
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. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libavresample 3. 5. 0 / 3. 5. 0
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Input #0, mpegts, from 'hoge.ts':
Duration: 00:00:01.06, start: 27410.447556, bitrate: 1105 kb/s
Program 1
Stream #0:0[0x1e1]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p(progressive), 320x240 [SAR 4:3 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream #0:1[0x1e2](und): Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 192 kb/s
[FORMAT]
filename=hoge.ts
nb_streams=2
nb_programs=1
format_name=mpegts
format_long_name=MPEG-TS (MPEG-2 Transport Stream)
start_time=27410.447556
duration=1.064000
size=147016
bit_rate=1105383
probe_score=50
[/FORMAT]
Read more...