Beyond テレワーク | Web会議・テレビ会議(TV会議)ブイキューブ

録画SDK

概要

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は構築した録画サーバ上のストレージになります。
(その他、機能面においていくつか差異があります)

On-premise Recordingの動作イメージ

(右上)Linux Server:録画サーバ(構築が必要)
(中央)SD-RTN:Agoraのメインサーバ
(左下)モバイルデバイス:クライアント

1.(左下の)各モバイルデバイスよりビデオ通話が開始されます。

2.(右上の)Linux Server(録画サーバ)は対象ビデオ通話の録画を実行します。

3.(中央の)SD-RTNは映像/音声を録画サーバに送ります。

4.(右上の)Linux Server(録画サーバ)は、録画ファイルを保存します。

録画サーバの構築準備(必要なもの)

サーバ環境

Agora SDKと録画サンプルソース

その他(必要なもの)

【Ubuntuにインストールするパッケージ】
・GCC
・nodejs
・npm
・ffmpeg
・その他(tar、tree、unzip、vim)

録画サーバの構築

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をセットします。

sdkdemo.js
(省略)
    //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が(タイムアウト後)自動で退室し、録画が停止します。

sdkdemo.js
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モードで利用したい場合は、以下コードを編集します。
agora_node_recording.cpp
/*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で録画中にレイアウトを変更したいのですが、方法はありますか?

Agora SDK イメージ
Agora SDK

大規模・安価・すぐに使える
ライブ配信・ビデオ通話・音声通話SDK

 

先頭へ戻る