#概要
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と録画サンプルソース
・Agora On-premise Recording SDK
・Agora Basic recording sample
※NodeJSのサンプルを利用
##その他(必要なもの)
【Ubuntuにインストールするパッケージ】
・GCC
・nodejs
・npm
・ffmpeg
・その他(tar、tree、unzip、vim)
【検証用クライアント】
・Agora-Web-Tutorial-1to1(検証用クライアント)
※動作確認時にクライアントとして利用
#録画サーバの構築
##1.Linuxサーバの準備と起動
(Dockerコンテナを作成、実行し)Linuxサーバを起動します。
##2.SDKと録画サンプルのインストール
2-1.Agora On-premise Recording SDKを解凍します。
2-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
2-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パッケージ作成
3-1.ディレクトリを移動
/sdk配下へ移動します。
$cd /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/src/sdk
3-2.npmパッケージの作成
$npm install -g node-gyp
##4.録画実行ソースビルド
4-1.ディレクトリを移動
/record配下へ移動します。
$cd /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record
4-2.ビルド実行
$source build.sh
4-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-1.実行ファイル(sdkdemo.js)を編集モードで開きます。
$vi /home/Basic-Recording-master/On-Premise-Recording-Nodejs/record/sdkdemo.js
1-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;
(省略)
1-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.再生
8-1. Linuxサーバ内のoutputフォルダをPCに転送します。
8-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で録画中にレイアウトを変更したいのですが、方法はありますか?