agora.io Cloud Recording SDK クイックスタートガイド

#概要
agora.ioに[Cloud Recording SDK](https://docs.agora.io/en/cloud-recording/product_cloud_recording%20?platform=Linux)が公開されています。

Cloud Recording SDKは、agora.ioのVideoやVoiceSDKなどを使って作成されたサービス(1対1面談、ボイスチャット、会議、セミナーなど)の映像と音声を録画(録音)することができます。
録画の実行はRestfulAPIをコールします。また録画したファイルは指定するクラウドストレージ(※1)上に保存することができます。
(※1 指定可能なクラウドストレージについては[公式ページ](https://docs.agora.io/en/cloud-recording/product_cloud_recording%20?platform=Linux)をご参照ください。)

この記事では簡単な録画実行のサンプルを用いて、録画実行から録画ファイル作成までをざっくりと説明します。

##Cloud Recording利用イメージ
※[agora公式ページ](https://docs.agora.io/en/cloud-recording/cloud_recording_rest?platform=All%20Platforms)より転用
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505696/958aa69a-27ff-c26e-9de1-2304ddbbc342.png" width="60%">

##RestfulAPIメソッド
RestfulAPIには以下のメソッドが用意されています。
・[acquire](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-nameacquireagets-the-recording-resource)：録画実行IDの取得
・[start](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-namestartastarts-cloud-recording)：録画開始
・[stop](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-namestopastops-cloud-recording)：録画停止
・[update](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-nameupdateaupdates-the-video-mixing-layout)：録画更新
・[query](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-namequeryaqueries-the-recording-status)：問合せ

本サンプルではacquire、start、stopを利用します。
#サンプルソース
サンプルソースは以下よりダウンロードしてご準備ください。
[サンプルソース](https://github.com/Nakamu987/agoraCloudRecording)

#動作確認
##前提
以下の設定が完了していることを前提として進めます。
・Webサーバとphp実行環境(今回はxamppを利用)
・クラウドストレージ環境(今回はAmazon S3を利用)
・[録画の有効化](https://docs.agora.io/en/cloud-recording/cloud_recording_rest?platform=All%20Platforms#enable-cloud-recording)
・[RESTful API認証情報](https://docs.agora.io/en/faq/restful_authentication#introduction)
・デモアプリ（今回は[WebRTCデモアプリ](https://github.com/AgoraIO/Basic-Video-Call/tree/master/One-to-One-Video/Agora-Web-Tutorial-1to1)を利用）

##動作実行

**１. サンプルソース(params.php)に設定値を保存します。**

録画実行時に必要な設定値をサンプルのparams.phpに設定してください。

```php:params.php
###agora.io###
$plainCredentials = '**********:**********';
$appid = '**********';
$cname = "demo";
$uid = "100000";

###CloudStorage###
$accessKey = '**********';
$bucket = '**********';
$secretKey = '**********';
$fileNamePrefix = ["directory1","directory2"];
```

| 変数名       | 説明           | 
|:-----------------|:------------------|
| $plainCredentials | {Customer ID}:{Customer Certificate} [(RESTful API認証情報)](https://docs.agora.io/en/faq/restful_authentication#introduction)|
| $appid            | AppID|
| $cname            | Channel名 (例"demo") |
| $uid              | 録画インスタンス用uid (例"100000")(※1) |
| $accessKey        | クラウドストレージのアクセスキー(※2)|
| $bucket           | クラウドストレージの保存先ルートフォルダ(※2) |
| $secretKey        | クラウドストレージのシークレットキー(※2) |
| $fileNamePrefix   | クラウドストレージの保存先サブフォルダ（例"/directory1/directory2"）(※2)|

(※1)
ここで指定するuidは、録画インスタンス用uidとして、Channelに入室しているuidとは重複しない固有のuidをセットすることがポイントです。
（uidが重複した場合、競合が発生しエラーとなるため、録画ファイルが作成されません）
(※2)
本SDKで利用可能なクラウドストレージについては[agora公式サイト](https://docs.agora.io/en/cloud-recording/product_cloud_recording%20?platform=Linux)をご参照ください。



**２. デモアプリに指定したChannel名で入室しておきます。**
※Channel名はparams.phpの$cnameで指定した値になります。

**３. 【acquire実行】http\://localhost/acquire.phpを実行します。**

ブラウザ上に以下のレスポンスが表示されます。

```php:http://localhost/acquire.php
{"resourceId":"VHSX885c0AW7PG4p0Wsufq(省略)IL0B7AstDJPJLomAtRqYZjC3b"}"
```
acquireコールにてresourceIdが発行されていることがわかります。

**４. サンプルソース(params.php)にresourceIdを保存します。**

```php:params.php
$resourceid = 'VHSX885c0AW7PG4p0Wsufq(省略)IL0B7AstDJPJLomAtRqYZjC3b';
```

**５. 【start実行】http\://localhost/start.phpを実行します。**

ブラウザ上に以下のレスポンスが表示されます。

```php:http://localhost/start.phpのレスポンス
{"resourceId":"VHSX885c0AW7PG4p0Wsufq(省略)CvuS2Wu2tKS_q",
"sid":"1c93125eb94e18318f556eb82a4d3fe0"}"
```
startコールにて録画が開始され、sidが発行されています。


**６. サンプルソース(params.php)にsidを保存します。**

```php:params.php
$sid = '1c93125eb94e18318f556eb82a4d3fe0';
```

**７.【stop実行】http\://localhost/stop.phpを実行します。**

ブラウザ上に以下のレスポンス表示されます。

```php:http://localhost/start.phpのレスポンス
{"resourceId":"VHSX885c0AW7PG4p0Wsufq(省略)CvuS2Wu2tKS_q",
"sid":"1c93125eb94e18318f556eb82a4d3fe0",
"serverResponse":{
"fileListMode":"string",
"fileList":"directory1/directory2/1c93125eb94e18318f556eb82a4d3fe0_demo.m3u8",
"uploadingStatus":"uploaded"}
}"
```
stopコールにて録画が停止し、結果(serverResponse)が表示されています。
また、fileListは保存先ファイル名になります。

**※404エラーについて**
stop時のレスポンスコードが404だった場合、'録画失敗により)録画ファイルは作成されません。
良くある原因は「[start](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-namestartastarts-cloud-recording)時の設定値が間違えている」です。

例えば、
・uidをintで設定していた
・(token利用の場合)録画側にtokenを設定していなかった
・[CloudStrage](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#storageConfig)のキーが間違えていた

404エラーが発生した際は、まずはstart時の設定値をご確認ください。





**８.クラウドストレージに接続し、ファイルを確認します。**
クラウドストレージ上にfileListと同じファイル名が作成されていることが確認できます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505696/2e487573-3dcd-592c-3240-aec75fd15c06.png" width="50%">

録画の実行と録画ファイルの作成ができました。


**[補足]**
録画ファイルの結合、変換については、下記公式ドキュメントをご参照ください。
[Merge Audio and Video Files](https://docs.agora.io/en/cloud-recording/cloud_recording_merge_files?platform=All%20Platforms#overview)
[Convert File Format](https://docs.agora.io/en/cloud-recording/cloud_recording_convert_format?platform=All%20Platforms)

##関連リンク
・[On-premise RecordingとCloud Recordingの違いは何ですか？](https://vcube-support.zendesk.com/hc/ja/articles/900000575863)
・[録画モードの違いについて教えてください。](https://vcube-support.zendesk.com/hc/ja/articles/900000657783)
・[Cloud Recording SDKのCallback Serviceを利用したい](https://vcube-support.zendesk.com/hc/ja/articles/900001328303)


#最後に
[**agora.ioに関するお問い合わせはこちらから**](https://jp.vcube.com/lp/agora?utm_campaign=Agora&utm_source=Qiita&arc_id=bd119f39239b6e6a7c22)
[<img width="912" alt="スクリーンショット 0001-08-15 13.41.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/300377/5d815376-9b89-08fa-9434-6fa7e8e67bcf.png">](https://jp.vcube.com/lp/agora?utm_campaign=Agora&utm_source=Qiita&arc_id=bd119f39239b6e6a7c22)