5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

agora.io On-premise Recording SDK クイックスタートガイド

Last updated at Posted at 2020-03-17

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

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

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.再生
8-1. Linuxサーバ内のoutputフォルダをPCに転送します。

8-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.ioに関するお問い合わせはこちらから
スクリーンショット 0001-08-15 13.41.56.png

5
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?