録画SDK
On-premise
概要
agora.ioにOn-premise Recording SDKが公開されています。
On-premise Recording SDKは、agora.ioのVideoやVoiceSDKなどで作成されたサービス(1対1面談、ボイスチャット、会議、セミナーなど)の通話(映像・音声)を録画することができます。オンプレミス型のため、録画サーバ(Linux)を構築し、そこで録画処理を実行します。
- この記事では、NodeJSのサンプルを利用して、録画サーバの構築と録画実行、映像再生までの流れをご説明します。
(録画サーバ環境構築は検証環境の構築というレベルになります。)
Cloud Recording SDKとの違い
Cloud Recording SDKとの一番の違いは、オンプレミス型かクラウド型かになります。Cloud Recordingの場合は録画ファイルの保存先がサードパーティのクラウドストレージであるのに対し、On-premise Recordingは構築した録画サーバ上のストレージになります。
(その他、機能面においていくつか差異があります)
参考
Cloud Recording SDK
agora.io Cloud Recording SDK クイックスタートガイド
On-premise Recordingの動作イメージ
- ※agora公式ページより転用
(右上)Linux Server:録画サーバ(構築が必要)
(中央)SD-RTN:Agoraのメインサーバ
(左下)モバイルデバイス:クライアント
1.(左下の)各モバイルデバイスよりビデオ通話が開始されます。
2.(右上の)Linux Server(録画サーバ)は対象ビデオ通話の録画を実行します。
3.(中央の)SD-RTNは映像/音声を録画サーバに送ります。
4.(右上の)Linux Server(録画サーバ)は、録画ファイルを保存します。
録画サーバの構築準備(必要なもの)
サーバ環境
- ・Ubuntu : 18.04.2
※Docker for windowsを利用
Agora SDKと録画サンプルソース
その他(必要なもの)
【Ubuntuにインストールするパッケージ】
・GCC
・nodejs
・npm
・ffmpeg
・その他(tar、tree、unzip、vim)
- 【検証用クライアント】
・Agora-Web-Tutorial-1to1(検証用クライアント)
※動作確認時にクライアントとして利用
録画サーバの構築
1. Linuxサーバの準備と起動
(Dockerコンテナを作成、実行し)Linuxサーバを起動します。
2. SDKと録画サンプルのインストール
1. Agora On-premise Recording SDKを解凍します。
2. Agora Basic recording sample(録画サンプル)を解凍します。
※ファイルは/home以下に保存しました。
$tar -xvf /home/Agora_Recording_SDK_for_Linux_v2_3_4_FULL.tar
$unzip /home/Basic-Recording-master.zip
3. 解凍したSDKをAgora Basic recording sample(録画サンプル)配下に移動します。
移動元:/home/Agora_Recording_SDK_for_Linux_FULL
移動先:/home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk
/home/Basic-Recording-master.
|-- On-Premise-Recording-C++
|-- On-Premise-Recording-Nodejs
|-- record
| |-- output
| |-- package-lock.json
| |-- sdkdemo.js
| `-- src
| `-- sdk //←ここ
`-- server
移動時のコマンド
$cp -r /home/Agora_Recording_SDK_for_Linux_FULL /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src
$mv /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/Agora_Recording_SDK_for_Linux_FULL
/home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk
3. npmパッケージ作成
1. ディレクトリを移動
/sdk配下へ移動します。
$cd /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk
2. npmパッケージの作成
$npm install -g node-gyp
4. 録画実行ソースビルド
1. ディレクトリを移動
/record配下へ移動します。
$cd /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record
2. ビルド実行
$source build.sh
3. ビルド実行後確認
ビルドが成功すると./record配下に"agorasdk.node"が作成されます。
$ls /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record
AgoraRecordSdk.js agorasdk.node build.sh build_debug.sh output package-lock.json sdkdemo.js src
録画サーバの構築が完了しました。
動作の確認
それでは録画を実行してみます。
1. 動作前準備1(APPIDの設定)
実行ファイル(sdkdemo.js)にAPPIDをセットします。
1. 実行ファイル(sdkdemo.js)を編集モードで開きます。
$vi /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/sdkdemo.js
2. "rec.joinChannel()"の第4引数("YOUR APP ID")にAPPIDをセットします。
(省略)
//create output folder
fs.mkdir(storageDir, {recursive: true}, err => {
//join channel
rec.joinChannel(null, "agoratest", 0, "<YOUR APP ID>", storageDir); ←ここ
})
return rec;
(省略)
3. 編集を保存(:wq)します。
2. 動作前準備2(クライアント)
Agora-Web-Tutorial-1to1(録画実行時の検証用クライアント)をPCに保存し、
起動できるようにしておきます。
3. 録画の開始
録画を開始します("node sdkdemo.js")。
実行後、SDKよりレスポンスがあります。
(以下例ではChannel:"agoratest"に録画用UID:"1202710079"がJoinしています。)
$ node sdkdemo.js
setting mix layout...
joinChannel...
appliteDir /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk/bin/
pRecording->m_agorasdk->createChannel return result:1
join channel Id: agoratest, with uid: 1202710079
channel joined agoratest 1202710079
4. クライアントの入室
用意しておいたクライアントで入室します。(できれば2拠点以上)
※入室時のAPPIDとChannelは録画の開始時と同じものをセットします。
入室すると、以下のようなレスポンスがあります。
User 361415303 joined, RecordingDir:/home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/output/
userjoin 361415303
setting mix layout...
color: #00ff00
5. 録画の停止
各クライアントを退室させます。
退室すると以下のようなレスポンスがあります。
leaveChannel...
※このデモでは、タイムアウトにより録画UIDが(タイムアウト後)自動で退室し、録画が停止します。
setTimeout(() => {
recorder.leaveChannel();
}, 1000 * 50)
6. 出力フォルダの確認
outputフォルダに録画したファイルが保存されています。
※スペースで区切って表示しています
$cd /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record
$ls ./output
0_20200316055159530.aac agorasdk.dat metadata.txt recording_sys.log
0_20200316055200353.mp4 agorasdk.log recording2-done.txt uid_0_20200316055159535.txt
agorareport.dat cfg.json recording_0.log
7. トランスコード
※Individualモードの場合のみ
出力されたファイルをトランスコードツール(video_convert.pyとffmeg)で変換します。
(この例ではfps:30、640x480で変換しています)
$python /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk/tools/video_convert.py
-f /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/output
-p 30 -r 640 480
8. 再生
1. Linuxサーバ内のoutputフォルダをPCに転送します。
2. トランスコード済みのファイル(0_20200316055159535_av.mp4)をクリックし再生を開始します。
・1拠点目入室時の映像(背景:"#00ff00"(デフォルト))
※実際の映像は隠して表示しています。
・2拠点目入室時の映像
録画サーバの構築、録画の実行、映像の再生まで実施できました。
補足
- NodeJSのサンプルは、デフォルトでmixモードでの利用になっています。
Individualモードで利用したい場合は、以下コードを編集します。
/*individualモードの時*/
config.isMixingEnabled = false;
config.mixedVideoAudio = agora::linuxsdk::MIXED_AV_DEFAULT;
(mixモードの時はtrue、MIXED_AV_CODEC_V2)
※修正後は再度ビルドが必要です。
関連リンク
On-premise RecordingとCloud Recordingの違いは何ですか?
録画モードの違いについて教えてください。
On-premise Recordingで録画中にレイアウトを変更したいのですが、方法はありますか?