#概要
agora.ioにCloud Recording SDKが公開されています。
Cloud Recording SDKは、agora.ioのVideoやVoiceSDKなどを使って作成されたサービス(1対1面談、ボイスチャット、会議、セミナーなど)の映像と音声を録画(録音)することができます。
録画の実行はRestfulAPIをコールします。また録画したファイルは指定するクラウドストレージ(※1)上に保存することができます。
(※1 指定可能なクラウドストレージについては公式ページをご参照ください。)
この記事では簡単な録画実行のサンプルを用いて、録画実行から録画ファイル作成までをざっくりと説明します。
##Cloud Recording利用イメージ
※agora公式ページより転用
##RestfulAPIメソッド
RestfulAPIには以下のメソッドが用意されています。
・acquire:録画実行IDの取得
・start:録画開始
・stop:録画停止
・update:録画更新
・query:問合せ
本サンプルではacquire、start、stopを利用します。
#サンプルソース
サンプルソースは以下よりダウンロードしてご準備ください。
サンプルソース
#動作確認
##前提
以下の設定が完了していることを前提として進めます。
・Webサーバとphp実行環境(今回はxamppを利用)
・クラウドストレージ環境(今回はAmazon S3を利用)
・録画の有効化
・RESTful API認証情報
・デモアプリ(今回はWebRTCデモアプリを利用)
##動作実行
1. サンプルソース(params.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認証情報) |
$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公式サイトをご参照ください。
2. デモアプリに指定したChannel名で入室しておきます。
※Channel名はparams.phpの$cnameで指定した値になります。
3. 【acquire実行】http://localhost/acquire.phpを実行します。
ブラウザ上に以下のレスポンスが表示されます。
{"resourceId":"VHSX885c0AW7PG4p0Wsufq(省略)IL0B7AstDJPJLomAtRqYZjC3b"}"
acquireコールにてresourceIdが発行されていることがわかります。
4. サンプルソース(params.php)にresourceIdを保存します。
$resourceid = 'VHSX885c0AW7PG4p0Wsufq(省略)IL0B7AstDJPJLomAtRqYZjC3b';
5. 【start実行】http://localhost/start.phpを実行します。
ブラウザ上に以下のレスポンスが表示されます。
{"resourceId":"VHSX885c0AW7PG4p0Wsufq(省略)CvuS2Wu2tKS_q",
"sid":"1c93125eb94e18318f556eb82a4d3fe0"}"
startコールにて録画が開始され、sidが発行されています。
6. サンプルソース(params.php)にsidを保存します。
$sid = '1c93125eb94e18318f556eb82a4d3fe0';
7.【stop実行】http://localhost/stop.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時の設定値が間違えている」です。
例えば、
・uidをintで設定していた
・(token利用の場合)録画側にtokenを設定していなかった
・CloudStrageのキーが間違えていた
404エラーが発生した際は、まずはstart時の設定値をご確認ください。
8.クラウドストレージに接続し、ファイルを確認します。
クラウドストレージ上にfileListと同じファイル名が作成されていることが確認できます。
録画の実行と録画ファイルの作成ができました。
[補足]
録画ファイルの結合、変換については、下記公式ドキュメントをご参照ください。
Merge Audio and Video Files
Convert File Format
##関連リンク
・On-premise RecordingとCloud Recordingの違いは何ですか?
・録画モードの違いについて教えてください。
・Cloud Recording SDKのCallback Serviceを利用したい