Apsara Video Live でAliEatersイベントのライブ配信

#背景
この記事は AlibabaCloud AdventCalendar 2019 4 日目のエントリとなります。
Alibaba Cloudユーザー会"AliEaters"にてAliEaters東京で発表されたコンテンツを同時開催したAliEaters名古屋でLive配信することとなりました。今後も全国のAliEatersでLive配信を活用できるようノウハウをアーカイブします。
是非、他の勉強会でもLive配信を活用してください。
#利用したサービス
-Apsara Video Libe(AVL): Live配信のための総合プラットフォーム
-OSS(Object Strage Service): 配信動画をアーカイブするストレージサービス
-DNS: 今回もAlibaba Cloud DNSではなくお名前.comで
#全体構成
スマホを活用した簡易なLive配信を構築します。
![AliEaters東京#13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/05ed86da-b870-77dc-f706-0fd12d1c246c.png)

#手順
1.Apsara Video Liveの設定
2.配信ドメイン名のDNS設定
3.配信URLの発行
4.iPhoneによるrtmpクライアントの準備
5.動画視聴側のWebサーバ、htmlファイル準備
6.実際の配信とモニタリング
7.アーカイブ動画の活用
8.ところで料金は？
##1.Apsara Video Liveの設定
コンソール画面からApsara Video Liveのメニューに入って見ます。最初の画面には３ステップの設定手順が記載されてますので、それにしたがって設定してみます。（Alibaba Cloudのコンソールは以外と初心者に親切！）
<img width="1377" alt="スクリーンショット 2019-12-02 23.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/5bfbd5d4-625f-2768-0c43-6e01c0430512.png">
###Step①ドメインの追加
Live配信にはアップストリームとダウンストリームがあり、それぞれにドメイン名を用意する必要があります。アップストリームは、Alibaba Cloudの用意しているCDNと接続され、CDNノードと接続されたあとはAlibaba Cloudの内部ネットワークを使って安定的にApsara Video Live配信サーバに接続されます。
まずはダウンストリームを設定します。サブドメイン名は自由ですがあとでDNSで設定できるものを設定してください。高速化対応リージョンは、中国本土/グローバル/中国本土以外の３種類ですが日本国内ならば中国本土以外で大丈夫です。中国本土以外が料金がもっとも安くなります。
<img width="675" alt="スクリーンショット 2019-12-02 23.30.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/7ab5e676-6108-3a67-db7a-e0cc229f0687.png">
つぎにアップストリームを設定します。
<img width="668" alt="スクリーンショット 2019-12-02 23.29.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/86012fa8-69a2-95ee-3036-7cbb5a499206.png">
アップとダウンのドメイン名の設定ができるとドメイン名に対応したCNAMEが付与されます。これをドメイン名を管理するDNSサーバに設定します。
<img width="1195" alt="スクリーンショット 2019-12-03 0.50.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/d7b2a796-6776-bab7-a6e2-bb372fb396bd.png">

ここで、別ドメインサイトのHTMLから配信できるように「HTTP ヘッダーの設定」を行っておきます。（今回はalieaters.comのサイトでないOSSのサイトにhtmlファイルを置いて再生しようとするからです）
livedown.alieaters.comの「ドメイン設定」を選択し、「HTTP ヘッダーの設定」を追加します。今回は「*」としてどのドメインでも再生できるようにしました。
<img width="654" alt="スクリーンショット 2020-02-17 15.58.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/ac82155f-d548-f0ae-7c0d-91d32c4d4b14.png">

<img width="1094" alt="スクリーンショット 2020-02-17 15.52.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/1083c9f0-e2af-da56-3576-2e89c7723723.png">


##2.配信ドメイン名のDNS設定
アップストリームとダウンストリームのドメイン名とCNAMEを自身の管理するDNSサーバに反映してください。
ここではお名前.comで設定した参考画面を掲載します。下から２つの設定がそうです。
<img width="672" alt="スクリーンショット 2019-12-02 23.35.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/db1a82f6-a030-dd5f-76c8-30d97bbb8b30.png">
先ほどのドメイン管理画面のアクション-「ドメイン設定」のリンク先画面でDNSでCNAMEが正しく引けているかチェックして反映してくれます。最初はTTLを短くしておくと反映が早いです。あとで3600程度に戻しておきましょう。
<img width="1068" alt="スクリーンショット 2019-12-03 0.51.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/756b2106-632a-6b76-f7eb-b2c022e0e6c2.png">
##3.配信URLの発行
ここまで設定できると配信用URLが発行できます。
<img width="1377" alt="スクリーンショット 2019-12-02 23.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/d4604e02-466e-8a72-3618-ef7a02b5793e.png">
ストリーム管理メニューのURLジェネレーターから配信用URL生成していきます。
先ほど設定したドメインを選択します。ダウンロードドメインを選ぶとアップストリーミングが自動的に出てきます。
<img width="687" alt="スクリーンショット 2019-12-03 1.04.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/9f8b376e-f1f0-b80e-0cf4-5cc673fb6e89.png">
さらにアプリケーション名、ストリーム名を決めて入力します。この名前はOSSへのアーカイブ録画設定や配信端末のrmtpのURLなどにも利用されてきますので控えて置くといいでしょう。
<img width="679" alt="スクリーンショット 2019-12-02 23.52.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/f687eef8-8bad-7e4f-dd71-b61371ce4885.png">
アップストリーミングURLが、rtmp配信端末からAVLサーバに配信する先のURLです。rtmpの設定に記載することになります。これも控えておきましょう。URL生成し直しするたびに変化します。
ストリーミングURLは視聴者が見る配信用Webサーバのhtml内に記載するURLです。
<img width="594" alt="スクリーンショット 2019-12-02 23.52.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/fbc01eef-dfa6-355e-0fce-58fc3dbfac33.png">
Chromeなどのブラウザで視聴させる際にはm3u8形式を使います。HLS(HTTP Live Streaming)プロトコルの動画配信技術でストリーミング配信用の形式がm3u8です。WindowsではVLSクライアントがあれば再生できます。
##4.iPhoneによるrtmpクライアントの準備(rtmp配信端末）
今回は東京側の発表者を撮影し、そのまま配信する簡単方法を採用しました。iphoneのrtmpアプリを使いました。色々ありますので試してみるといいですね。今回はシンプルな機能のものを利用しました。
<img width="375" alt="IMG_4063.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/16f7ac5e-df50-94ce-5b07-0fc7fedd4f09.png">
アプリの設定画面に、URL生成でできたアップストリーミングURLを入力して配信ボタンを押すだけで配信開始されます。
![IMG_4062.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/95403917-fca2-a983-53c0-3cfdc5acd12e.png)
AliEaters東京当日はこんな感じで撮影していました。
<img width="954" alt="スクリーンショット 2019-12-02 23.21.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/29abfa85-73b4-9f86-0839-359b48718609.png">

##5.動画視聴側のWebサーバ、htmlファイル準備
今度は、視聴側の環境を作ります。Webサーバがあれはそこにhtmlを置けばいいです。今回はOSSの静的Webサーバ機能を利用して以下htmlファイルをOSSにアップして公開設定することで終わらせます。
[hls.js Demo](https://github.com/video-dev/hls.js/tree/master/demo)
<html>

  <head>
    <title>Hls.js demo - basic usage</title>
  </head>

  <body>
      <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>


      <center>
          <h1>AliEaters live  - Apsara Conference 2019 Report!!</h1>
          <video height="600" id="video" controls></video>
      </center>

      <script>
        if(Hls.isSupported()) {
          var video = document.getElementById('video');
          var hls = new Hls();
          hls.loadSource('http://livedown.alieaters.com/alieaters/tokyo13.m3u8?auth_key=1570815983-0-0-92a52d162026f12756f9bfa6e14269ef');
          hls.attachMedia(video);
          hls.on(Hls.Events.MANIFEST_PARSED,function() {
            video.play();
        });
       }
       // hls.js is not supported on platforms that do not have Media Source Extensions (MSE) enabled.
       // When the browser has built-in HLS support (check using `canPlayType`), we can provide an HLS manifest (i.e. .m3u8 URL) directly to the video element throught the `src` property.
       // This is using the built-in support of the plain video element, without using hls.js.
        else if (video.canPlayType('application/vnd.apple.mpegurl')) {
          video.src = 'http://livedown.alieaters.com/alieaters/tokyo13.m3u8?auth_key=1570815983-0-0-92a52d162026f12756f9bfa6e14269ef';
          video.addEventListener('canplay',function() {
            video.play();
          });
        }
      </script>

  </body>
</html>

このhtmlはhls.jsのサンプルをそのまま利用しています。
'video.src = 'http://livedown.alieaters.com/alieaters/tokyo13.m3u8?auth_key=1570815983-0-0-92a52d162026f12756f9bfa6e14269ef''
の部分を先ほどのダウンストリームURLで置き換えるだけです。※二箇所ありますのでご注意ください。

OSSにアップロードしたところ。OSSで静的htmlページとして公開設定してください。※公開設定するときに今回はhttpsは利用しない設定にしてください。httpsの証明書を設定している場合にはhttpsを使います。

<img width="820" alt="スクリーンショット 2019-12-02 23.46.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/fd89ef64-acd7-5b18-b846-66ca4e69030b.png">
<img width="611" alt="スクリーンショット 2020-01-28 14.04.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/c537a16b-f54e-c842-cb6e-9bbe3a960e1d.png">

このURLを開いて見るとシンプルにhlsで動画視聴できる画面になってます。配信が始まるとTopのサムネイルが表示され再生ボタン押すと動画視聴できます。
<img width="1266" alt="スクリーンショット 2019-12-03 1.36.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/fb8cfaaa-fb00-e2de-537a-94f836b7d325.png">
##6.実際の配信とモニタリング
ここまで準備できたらiphoneのrtmpアプリから配信ボタンを押すだけです。配信の様子はAVLのコンソール画面からリアルタイムモニタリングできます。メニューのモニタリングをクリックします。
<img width="1377" alt="スクリーンショット 2019-12-02 23.03.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/62423ee2-b93f-1a12-a8af-d32177342ac6.png">
配信して2~3分するとビットレートやフレームレートが表示され始めます。
<img width="1046" alt="スクリーンショット 2019-12-02 23.58.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/03201736-7f35-9cd9-3b83-5bb91a7eb341.png">
<img width="1062" alt="スクリーンショット 2019-12-02 23.58.50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/ab73ac9c-bbd4-b7c7-d6e1-b093fbefeadf.png">
モニタリングなかのリソースモニタリングは過去の情報も表示できます。10月始めのテストと10月8日AliEaters本番での結果はこんな感じです。
アップストリームが３〜3.5Mbpsくらいですね。
<img width="1092" alt="スクリーンショット 2019-12-02 23.07.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/d5cf184a-63a8-32ed-af99-e142dd4f6d8f.png">
ダウンストリームはAliEaters名古屋の１台とモニタリングしていた端末など２〜３台しかいなかったので大した帯域は利用していませんね。
<img width="1133" alt="スクリーンショット 2019-12-02 23.08.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/e0675a93-6c56-eeaf-a8b0-4ee16af5e755.png">
##7.アーカイブ動画の活用
ところで、Live配信と同時に実はOSSへ配信動画をアーカイブしていくことができます。録画メニューを選択します。
<img width="1087" alt="スクリーンショット 2019-12-02 23.59.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/3e370daa-b4c5-976a-312f-e8d2e7f23eb6.png">
「＋追加」で新しく録画先のOSSの設定ができます。録画設定でアプリケーション名とストリーム名が必要になりますのでURLジェネレータ管理の画面で記載した内容と同じにします。格納形式はm3u8とflvとmp4が選択できます。mp4ダイレクトがあとで便利でしょうか。
<img width="575" alt="スクリーンショット 2019-12-03 0.00.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/8ece682c-d749-61b6-c2ce-d3a31df1174b.png">
格納場所をOSSのディレクトリから選択してOKを押します。
<img width="564" alt="スクリーンショット 2019-12-03 0.01.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/2fb9d714-16eb-6164-b4a1-b829a80ad6a3.png">
録画先が追加されました。
<img width="917" alt="スクリーンショット 2019-12-03 0.01.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/0f92ff7b-f36c-f17d-864e-fa655a0d2127.png">
配信を開始したときにOSSの方にrecordというフォルダーが自動的にできて配信中はtsファイルがまず作られそれぞれの形式に自動変換されてアーカイブされていきます。
<img width="1046" alt="スクリーンショット 2019-12-03 0.03.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/81f4c36e-367b-b407-c15c-46edf37bfa53.png">
<img width="1049" alt="スクリーンショット 2019-12-03 0.03.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/63401584-d9dc-be0e-f4ec-d41c314c6f5c.png">
配信が終わるとm3u8形式やmp4ができてますね。30分ごとなど一定時間でまとめる設定ができますのであとで編集しやすい長さに分割して保存しましょう。
<img width="1101" alt="スクリーンショット 2019-12-03 1.56.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/8f6af325-f86f-2415-1c4b-3048c56e6496.png">
アーカイブ動画を編集して、再度OSSにアップロードしておけば記録動画としてライブが見れなかった人も見れますね。
AliEaters東京でのアーカイブ動画はこちら
[寺尾さん発表 Apsara Conference 2019速報 Recap](http://alieaters-tokyo-doc.oss-ap-northeast-1.aliyuncs.com/SS1-terao.mp4)
[森さん発表 Apsara Conference 2019速報](http://alieaters-tokyo-doc.oss-ap-northeast-1.aliyuncs.com/SS2-mori.mp4)
[渡辺さん発表 「カオスエンジニアリング入門?〜ChaosBladeの紹介〜」](http://alieaters-tokyo-doc.oss-ap-northeast-1.aliyuncs.com/SS3-watanabe.mp4)
[岡崎さん発表 Apsara Conference 2019速報 旅人編](http://alieaters-tokyo-doc.oss-ap-northeast-1.aliyuncs.com/SS4-okazaki.mp4)
[Azure vs AliEaters対談企画](http://alieaters-tokyo-doc.oss-ap-northeast-1.aliyuncs.com/SS5-interview.mp4)
##8.ところで料金は？
AVLには実際まだまだ色々な機能があるのですが、今回は基本の基本の配信をやってみました。AliEaters東京では実際に3時間あまりの配信でしたが料金はこんな感じです。AVLで137円、OSSで291円　そんなもん？！というリーズナブルな利用料金でした。大量視聴される配信は料金がもっとかかりますので気をつけてくださいね。
<img width="1155" alt="スクリーンショット 2019-12-03 2.08.43.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/177476ca-12fc-2fe7-4b47-7d5e5c950fbf.png">
<img width="1162" alt="スクリーンショット 2019-12-03 2.09.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113808/e4165c45-bc16-24eb-d24e-167572737baa.png">
#まとめ
-AVLは簡易な設定で本格的Live配信ができるお手軽ツール。
-OSSはWebサーバに配信動画保存に、アーカイブ動画配信に色々使える便利サービス。
-料金もリーズナブル
**注意ポイント**
-URLジェネレーター管理：URL生成時に有効期間の設定があります。デフォルトで3600秒とか短くなってますので配信時間に合わせて長くしておきましょう。
-トラフィック料金を注意：Live配信もOSSに保存されたアーカイブ動画も大量に視聴されるとトラフィック料金が大きくなる場合があります。視聴数が多い時は発生料金もケアください。
-中国本土への配信にはCDNの利用と同様にICPライセンスが必要になります。