agora.io Cloud Recording SDK スクリーンショットの取得方法

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

2020年4月よりCloud Recording SDKにスクリーンショット機能([Capture Screenshots](https://docs.agora.io/en/cloud-recording/cloud_recording_screen_capture?platform=All%20Platforms))が加わりました。

この記事では、Cloud Recording SDKの
・スクリーンショットの取得方法
についてご説明いたします。

なお、Cloud Recording SDKの関連記事も併せてご参照ください。
・[agora.io Cloud Recording SDKのクイックスタートガイド](https://qiita.com/v-cube/items/bd119f39239b6e6a7c22)
・[agora.io Cloud Recording SDK 録画モード(Individual/Composite)の違い](https://qiita.com/v-cube/items/d968a315266c17acf3a4)

##サンプル
本記事で利用するサンプルは[こちら](https://github.com/Nakamu987/agoraCloudRecording/tree/master/CloudRecordingSTSample)です。

##実装
Cloud Recording SDKにてスクリーンショットを取得するには、
RestfulAPIの[start](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-namestartastarts-cloud-recording)の[snapshotConfig](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#snapshotConfig)を設定します。

```php:start_Screenshot.php
$snapshotConfig = [
  'captureInterval' => 10, 
  'fileType' => ["jpg"]
];
```

**[snapshotConfig]**

| 設定値       |       説明 |
|:-----------------|:------------------|
| captureInterval|取得間隔(5～3600秒)　デフォルトは10秒|
| fileType| "jpg"のみ |


###補足
- スクリーンショットは[Individualモード](https://docs.agora.io/en/cloud-recording/cloud_recording_individual_mode?platform=All%20Platforms#overview)にて取得することができます。
- スクリーンショットはuidごとに取得されます。
- 1つのresource ID(録画実行ID)で、映像とスクリーンショット両方を取得することはできません。両方取得したい場合、resource IDをそれぞれ発行します。([acquire](https://docs.agora.io/en/cloud-recording/cloud_recording_api_rest?platform=All%20Platforms#a-nameacquireagets-the-recording-resource)を2回コール)


##動作確認
映像とスクリーンショットの両方を取得できるよう、動作確認します。

###前準備
下記環境をご準備ください。
・APPID ※コンソールより発行
・[サンプルコード](https://github.com/Nakamu987/agoraCloudRecording/tree/master/CloudRecordingSTSample)
・外部ストレージ環境（S3）
　※利用可能な外部ストレージについては[公式サイト](https://docs.agora.io/en/cloud-recording/product_cloud_recording?platform=Linux
)を参照
・アプリケーションサーバ環境(XAMPP)
・デモアプリ([Web](https://github.com/AgoraIO/Basic-Video-Call/tree/master/One-to-One-Video/Agora-Web-Tutorial-1to1))

###録画実行&停止の確認

1.params.phpにmode(individual)をセットします。

```php:params.php
$mode = 'individual';
```
2.デモアプリに指定したChannel名で2名入室しておきます。
※Channel名はparams.phpの$cnameで指定した値になります。
3.【acquire実行(映像用)】http\://localhost/acquire.phpを実行します。
4.【acquire実行(スクリーンショット用)】http\://localhost/acquire.phpを実行します。

(3、4共通)ブラウザ上に以下のようなレスポンスが表示されます。

```php:http://localhost/acquire.php
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq"} 
```
acquireコールにて、映像用、スクリーンショット用のそれぞれのresourceIdが発行されていることがわかります。

5.サンプルソース(params.php)にresourceIdを保存します。
・映像は$resourceid
・スクリーンショット用は$resourceid_ss

```php:params.php
$resourceid = "IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq";
$resourceid_ss = "VHSX885c0AW7PG4p0Wsuf(省略)K6Pwq3aa2cSUbjMwuzzYpNEerk";
```

6.【start実行(映像用)】http\://localhost/start_individual.phpを実行します。
7.【start実行(スクリーンショット用)】http\://localhost/start_screenshot.php実行します。

(6、7共通)ブラウザ上に以下のようなレスポンスが表示されます。

```php:http://localhost/start.phpのレスポンス
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq",
"sid":"533abda706437c0b551deab494ca088d"}"
```
startコールにて録画、スクリーンショットが開始され、各sidが発行されています。

8.サンプルソース(params.php)にsidを保存します。
・映像は$sid
・スクリーンショット用は$sid_ss

```php:params.php
$sid = '533abda706437c0b551deab494ca088d';
$sid_ss = '11f6c6315245c99854fbd9a8dfb58a19';
```

(10秒程度経過後)
9.【stop実行(映像用)】http\://localhost/stop.phpを実行します。
※スクリーンショット用のstop処理については、実行せずに全員を退室させて、30秒後(maxIdleTimeで指定)に録画が停止するのを待ちます。 

10.デモアプリから全員退室させます。
(30秒後にスクリーンショットも停止します。)

(映像用のみ)ブラウザ上に以下のレスポンスが表示されます。

```php:http://localhost/start.phpのレスポンス
{"resourceId":"IL0B7AstDJPJLomAtRqYZ(省略)jC3bVHSX885c0AW7PG4p0Wsufq",
"sid":"533abda706437c0b551deab494ca088d",
"serverResponse":{
"fileListMode":"string",
"fileList":"directory1/directory2/533abda706437c0b551deab494ca088d_demo__uid_s_2310497544__uid_e_audio.m3u8",
"uploadingStatus":"uploaded"}
}"
/*省略*/
```
※複数ファイルがある場合は複数表示されます。

###スクリーンショットの確認

1.クラウドストレージ(S3)に接続して確認します。

- 10秒間隔でjpgファイルが作成されています。
- jpgファイルはuidごとに作成されています。
- ファイル名の書式は以下です。
{sid}\_{channel}\_uid\_s\_{uid}\_uid\_e\_video\_\{datetime}.jpg

```S3:S3Storage
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073629678.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073639720.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073649790.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073659831.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073709862.jpg
/*省略*/
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073629649.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073639682.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073649704.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073659759.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073709783.jpg
11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073719829.jpg
/*省略*/
```

2．PCにダウンロードしてファイルを開いてみます。
※画像は一部隠しています。

(11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_2310497544__uid_e_video_20200525073629678.jpg)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505696/aa078bdb-2f6d-6542-8a18-bd97b632e15b.png" width="60%">

(11f6c6315245c99854fbd9a8dfb58a19_demo__uid_s_3534335585__uid_e_video_20200525073729854.jpg)
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505696/fbcf9176-3cc4-7e85-e4cc-2c386243f3ee.png" width="60%">

###映像の確認

1.クラウドストレージ(S3)に接続して確認します。
Individualモードの通り、uidごとに音声、映像ファイルが作成されています。

```S3:S3Storage
533abda706437c0b551deab494ca088d_demo__uid_s_2310497544__uid_e_audio.m3u8
533abda706437c0b551deab494ca088d_demo__uid_s_2310497544__uid_e_audio_20200525073525555.ts
/*省略*/
533abda706437c0b551deab494ca088d_demo__uid_s_2310497544__uid_e_video.m3u8
533abda706437c0b551deab494ca088d_demo__uid_s_2310497544__uid_e_video_20200525073525626.ts
/*省略*/
533abda706437c0b551deab494ca088d_demo__uid_s_3534335585__uid_e_audio.m3u8
533abda706437c0b551deab494ca088d_demo__uid_s_3534335585__uid_e_audio_20200525073538535.ts
/*省略*/
533abda706437c0b551deab494ca088d_demo__uid_s_3534335585__uid_e_video.m3u8
533abda706437c0b551deab494ca088d_demo__uid_s_3534335585__uid_e_video_20200525073538700.ts
/*省略*/
```

録画ファイルについては、この後、マージ処理でmp4ファイルに結合するなどし、用途に応じた映像に変換していきます。
本記事では内容は省略いたしますが、
Individualモードの録画、マージ処理、再生については、下記の記事で記載しておりますのでご参照ください。
[agora.io Cloud Recording SDK 録画モード(Individual/Composite)の違い](https://qiita.com/v-cube/items/d968a315266c17acf3a4)

Cloud Recording SDKのスクリーンショットの取得と確認ができました。

#最後に
[**agora.ioに関するお問い合わせはこちらから**](https://jp.vcube.com/lp/agora?utm_campaign=Agora&utm_source=Qiita&arc_id=9df21f922917d4fd6a1e)
[<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=9df21f922917d4fd6a1e)