AmazonのクラウドサービスAWSの新サービスとして、簡単に自サイトでライブ配信を行うAmazon Interactive Video Service(以下IVS)をリリースしました。
従来、自社サイトにライブ動画を貼り付け用とすると、
Youtube LiveやTwitchなどの配信サービスを使い、リンクを自社サイトに貼る
自営サーバーを建てる
といった選択肢が主流でした。前者はお手軽ですが、プライベートな配信にはやや難があります。一応パスワードがかけられたりもしますが、やっぱり業務用となんかだと公開配信サービスを通すことが難しかったりします。他方、自営サーバーも最近ではより簡単に構築できるようにはなってきているものの、基本的なWebサーバー運用の知識は必要ですし、エンコード性能がそれなりにあって、視聴者が多い場合は上り帯域が太いサーバーが必要だったりします。
IVSを使うと、OBS Studio、ATEM Mini Pro、LiveShellシリーズのようなRTMP送信できる配信機材から簡単にアップロードでき、また様々なプラットフォーム、回線速度に応じたトランスコードや配信側も丸投げできます。自社サイトには極簡単なHTMLを貼り付けるだけで済みます。HTMLに各種アクセス制限をかければプライベートな用途にも使えるんじゃないでしょうか。配信時間、視聴者数、解像度に応じて利用料金がかかりますが、上記記事の概算などをみても、小規模な配信であれば気にするような額にはならなそうです。
■ATEM Mini Proからの配信をしてみる
2021.03.08追記 :コメントいただいて気付いたのですが、現在AWSのTLS 1.1未満廃止の影響でATEM Mini ProからAmazon IVSへの配信は利用できなくなっているようです(ATEM Mini Pro側がファームウェア8.6現在TLS 1.2に非対応なため)。公式サポートに連絡したところ問題は把握しており協議中どの返信がありました。対応を期待するしかなさそうです。
とりあえず映像と音をが出るところまでテストしてみたので手順をまとめてみます。AWSのアカウントは既にもっている前提で進めます。利用に応じて料金がかかりますので自己責任で お願いします。
・IVSでチャンネルを作成
IVSのトップ へ行き「チャネルの作成」をクリック。以下のような画面が出るので、「チャネル名」を指定し、「チャネル設定」はとりあえず「デフォルト設定」にしておきます。チャネル名は視聴者に見えるものではなく、IVS上で自分で区別をするためのものと思って良いでしょう。
チャネル作成画面
・配信情報を確認する
作成後はこんな画面になります。「ライブストリーム」(=プレビュー画面)はまだ不要なので畳んであります。この画面で重要なのは、
取り込みサーバー
ストリームキー
再生URL
の3つの情報です。それぞれ先頭のコピーアイコンからクリップボードにコピーできるので必要になったらそこから取得します。
チャンネル情報
・ATEM Mini Proに設定を追加する
ATEM Mini Proの配信サーバーはデフォルトではFacebook/Twitch/Youtubeの3つしか選べませんが、設定ファイルをテキストエディタで書き換えることでカスタムサーバーを追加することができます。
方法としては、
ファイル->別名で保存から「出力」の「設定」のみチェックして書き出したXMLを編集し、それを「復元」で読み込む
デフォルトのサーバー設定ファイルを書き換える
の2つがあります。前者はサーバー設定のみを独立して保存できますが、ATEM Mini Proの電源を入れる度に再読込させなければなりません。後者は自動で読み込まれますが、おそらくATEM Software Controlをアップデートすると初期化されてしまう気がします。毎回読み込ませるのは面倒なので、ここでは後者の手順をとってみます。
設定ファイルのパスは、
C : \ Program Files ( x86 ) \ Blackmagic Design \ Blackmagic ATEM Switchers \ ATEM Software Control \ Streaming . xml
になります。<service>~</service>ではさまれた設定がFacebook/Twitch/Youtbeと3組あると思うので、最後のYoutubeの<service>~</service>間を複製し、以下を書き換えます。
サーバー名を示す<name></name>タグを適当な名前に書き換える。ここでは「Amazon IVS」。
<servers>タグの中にPrimaryとSecondaryの2つのサーバー指定があるので、Secondaryの方を削除する(<server>~</server>)
Primaryサーバーの<url></url>タグ内にIVSコンソールから「取り込みサーバー」をコピペする
直下に<key></key>タグを追加し、IVSコンソールから「ストリームキー」をコピペする
以上です。<profiles>以下にビットレート指定が何パターンかありますが、とりあえずそのままで良いでしょう。こんな感じになります。なお、上書き保存には管理者権限が必要になります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<service>
<name> Amazon IVS </name>
<servers>
<server>
<name> Primary </name>
<url> (取り込みサーバー) </url>
<key> (ストリームキー) </key>
</server>
</servers>
<profiles>
<profile>
<name> Streaming High </name>
<config resolution = "1080p" fps = "60" >
<bitrate> 9000000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
<config resolution = "1080p" fps = "30" >
<bitrate> 6000000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
</profile>
<profile>
<name> Streaming Medium </name>
<config resolution = "1080p" fps = "60" >
<bitrate> 7000000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
<config resolution = "1080p" fps = "30" >
<bitrate> 4500000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
</profile>
<profile>
<name> Streaming Low </name>
<config resolution = "1080p" fps = "60" >
<bitrate> 4500000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
<config resolution = "1080p" fps = "30" >
<bitrate> 3000000 </bitrate>
<keyframe-interval> 2 </keyframe-interval>
</config>
</profile>
</profiles>
</service>
ATEM Software Controlを起動すると右上の「出力」タブの「ライブ配信」「配信サービス」のところに追加したサーバー名が選択可能になっており、「サーバー」は1つだけのPrimaryが選択され、「キー」にストリームキーが入り、「品質」がStreaming Highになっているはずです(画像はオンエア状態)。
追加したサーバーが選択された状態
ここまでくれば後はATEM Software Controlか本体の「ON AIR」ボタンを押すだけで配信が始まるはずです。「ON AIR」の赤文字が光ればOK。点滅する場合はネットワーク帯域が足りないなど問題がある状態のようです。ウチの状態では、なぜか一度切断すると再度ON AIR状態にならず点灯と点滅を交互に繰り返す状態になり ました。ATEM Mini Proの電源を入れ直すとつながります が若干不安定ですね。一瞬ON AIRになった気がして放置していると実はつながってない、なんてこともあり得るので困りものです。
「ON AIR」が安定して赤点灯になるようなら、もういちどIVSコンソール画面に戻り「ライブストリーム」ブロックを展開表示してみましょう。左下の「ステータス」が「LIVE」になって映像が見えていれば成功です!
・Webページに挿入する
再生URLは拡張子がm3u8で、例えばVLCなどで「ファイル」「ネットワークストリームを開く」にURLをコピペすれば視聴できます。ただそれだと不便だし画質もあまりよくないようです。簡単にブラウザでWebページを開いて視聴可能なようにしてみましょう。
SDK for Web のページにあるSample Codeをコピーして自サイトにHTMLファイルとして保存し、以下を修正します。
1行目のscriptタグのsrc属性内のパスで「VERSION_NUMBER」となっている部分を「1.0.0」に書き換える(執筆時点)
8行目の「PLAYBACK_URL」をIVSコンソールの再生URLに置き換える。
<script src = "https://player.live-video.net/1.0.0/amazon-ivs-player.min.js" > </script>
<video id = "video-player" playsinline> </video>
<script>
if ( IVSPlayer . isPlayerSupported ) {
const player = IVSPlayer . create ( ) ;
player . attachHTMLVideoElement ( document . getElementById ( 'video-player' ) ) ;
player . load ( '再生URL' ) ;
player . play ( ) ;
}
</script>
基本的にはたったこれだけでOKです。スタイルシートもなにもないので極シンプルですが、ライブ中であれば映像が映るはずです。ライブが開始されてないと真っ白な画面になります。おそらく回線速度に応じた解像度でドットバイドットで表示されるんだと思います。固定したい場合はスタイルシートなどで指定すれば良いでしょう。コンソールのプレビューのような画質やサイズ、音量を指定するUIもありません。そういう凝ったことをしたい場合は、こちら を参考にVideo.jsを使えば良さそうですがまだ試していません。
ここまでざっと30分もあれば設定可能でした。良い時代になったものですね。OBS StudioやLiveShellなどを使う場合も、基本的には同じで「取り込みサーバー」「ストリームキー」を然るべき設定項目にコピペすればいけるんじゃないでしょうか。
■セキュアな配信が可能なのか?
これでプライベートな配信をしようとした場合、どんな手があるかですが、すぐ思いつくのはWebページに対してのアクセス制限です。BASIC認証をかけるとか、アクセス元をIPアドレスで制限するとか、ブラウザをクライアント証明書で絞る、とかですね。ただ一度アクセスできた状態でHTMLソースをみると、再生URL(m3u8)は丸見えです。これを視聴者が勝手に共有してしまうとアウトな気がします(先に書いたように再生URL単体をVLCなどで開いて再生は可能)。再生URL自体にアクセス制限をかける方法はざっと見た限りではなさそうでした。まぁそれいったらYoutube Liveで配信パスワードを漏洩されたら同じですかね。
アクセス制限を厳密にかつ簡単にしやすいのはFacebook Liveとかでしょうか。フレンド限定とか、グループで流すとか。ただあんまり画質は良くない印象です(きちんと調べてないですが)。
クラウドアレルギーな人がいる案件で使いやすいかというと、結局AWSというクラウドサービスは使っていることにはなりますので、なんともですかねー。
■まとめ
ともあれ、比較的簡単に配信環境が実装できることがわかりました。既存配信サービスとどう使い分けるかは案件次第になりそうですが、選択肢として割と有望そうな気がします。