※Jitsi MeetとJibriの接続はこちらで記載しています!

弊社がホストをするTV会議では、「Jitsi Meet」(以下Jitsi)を中心に利用しています。

今回、Jitsiに録画機能を追加するために「Jibri」をインストールしました。

インストールすことにより以下のことができるようになります。

・mp4で動画が保存できる
会議室ごとに保存してくれるのは良いんですが、Jitsiから閲覧する機能ができないです。mp4ファイルを必要なとき取り出すか、会議室を指定して見れる仕組みを付く必要がりあります(^^;

・Youtubeストリームに配信ができる
Youtubeにアカウントをお持ちなら、ストリーミング再生ができます。
利用方法としては、会議の内容をパブリックビューイングで見せるって感じかなぁ(^^;

・Dropboxに保存する(ただいま検証中)
mp4の保存先をDropboxにすることができます。
ご自分の環境に保存ができます(^^)

環境

OS:ubuntu 18.08

Jibriをインストールしましょう!

こちらを参考にしています。

ALSAおよびループバックデバイス

最初にALSAループバックモジュールが必要です。
ubuntu16.04ではlinux-image-extra-virtualを使ってエクストラモジュール(ALSAループバックを含む)がインストールできます。

rootユーザーとして以下のタスクを実行します
・起動時にロードされるようにモジュールを設定します。
$ sudo echo “snd-aloop” >> /etc/modules

実行中のカーネルにモジュールをロードします。
$ sudo modprobe snd-aloop

モジュールが既に読み込まれていることを確認します。
$ lsmod | grep snd_aloop
snd_aloop              24576  0
snd_pcm                98304  1 snd_aloop
snd_timer              32768  1 snd_pcm
snd                    81920  3 snd_timer,snd_aloop,snd_pcm
soundcore              16384  1 snd

出力にsnd-aloopモジュールがロードされていることが示されている場合、ALSAループバック構成ステップは完了しています。

X11キャプチャをサポートするffmpeg

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ffmpeg

Google Chrome安定版とChromedriver

最新のGoogle Chrome安定ビルドを使用する必要があります。

# curl -sS -o – https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
# echo “deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main” > /etc/apt/sources.list.d/google-chrome.list
# apt update
# apt install google-chrome-stable

Chrome管理ポリシーファイルを追加し、に設定CommandLineFlagSecurityWarningsEnabledしfalseます。Chromeの警告を非表示にします。次のように設定できます。

# mkdir -p /etc/opt/chrome/policies/managed
# echo ‘{ “CommandLineFlagSecurityWarningsEnabled”: false }’ >>/etc/opt/chrome/policies/managed/managed_policies.json

Chromedriverも必要

$ CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
$ wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P .
$ unzip chromedriver_linux64.zip -d .
$ rm chromedriver_linux64.zip
$ sudo mv -f chromedriver /usr/local/bin/chromedriver
$ sudo chown root:root /usr/local/bin/chromedriver
$ sudo chmod 0755 /usr/local/bin/chromedriver

その他必要な工具

$ sudo apt install default-jre-headless alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy

Jitsi Debianリポジトリ

Jibriパッケージは、downloads.jitsi.orgの安定したリポジトリにあります。

$ wget -qO – https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add –

リポジトリを使用してsources.list.dファイルを作成します。

$ sudo sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”

パッケージリストを更新します。

$ sudo apt update

最新のジブリをインストール

$ sudo apt install jibri

ユーザー・グループ

Jibriは現在、通常のシステムユーザーとして実行するためのものです。
この例では、ユーザー名「jibri」とグループ名「jibri」をクリエイティブに使用しています。
これはrootユーザーでテストされていません。

jibriユーザーが適切なグループに属しており、オーディオデバイスとビデオデバイスに完全にアクセスできることを確認します。

$ sudo usermod -aG adm,audio,video,plugdev jibri

設定ファイル

finalize_recording.sh は /opt/recordings に設定します。

{
// NOTE: this is a *SAMPLE* config file, it will need to be configured with
// values from your environment

// Where recording files should be temporarily stored
"recording_directory":"/tmp/recordings",
// The path to the script which will be run on completed recordings
"finalize_recording_script_path": "/opt/recordings/finalize_recording.sh",
"xmpp_environments": [
{
// A friendly name for this environment which can be used
// for logging, stats, etc.
"name": "prod environment",
// The hosts of the XMPP servers to connect to as part of
// this environment
// /etc/jitsi/meet/jit01.kumakake.com-config.js参照
"xmpp_server_hosts": [
// "prod.xmpp.host.net"
"jit01.kumakake.com"
],
// The xmpp domain we'll connect to on the XMPP server
//"xmpp_domain": "xmpp.domain",
"xmpp_domain": "jit01.kumakake.com",
// Jibri will login to the xmpp server as a privileged user
"control_login": {
// The domain to use for logging in
// "domain": "auth.xmpp.domain",
// The credentials for logging in
// "username": "username",
// "password": "password"
"domain": "auth.jit01.kumakake.com",
"username": "jibri",
"password": "jibriauthpass"
},
// Using the control_login information above, Jibri will join
// a control muc as a means of announcing its availability
// to provide services for a given environment
"control_muc": {
// "domain": "internal.auth.xmpp.domain",
"domain": "internal.auth.jit01.kumakake.com",
"room_name": "JibriBrewery",
"nickname": "jibri-nickname"
},
// All participants in a call join a muc so they can exchange
// information. Jibri can be instructed to join a special muc
// with credentials to give it special abilities (e.g. not being
// displayed to other users like a normal participant)
"call_login": {
// "domain": "recorder.xmpp.domain",
// "username": "username",
// "password": "password"
"domain": "recorder.jit01.kumakake.com",
"username": "recorder",
"password": "jibrirecorderpass"
},
// When jibri gets a request to start a service for a room, the room
// jid will look like:
// roomName@optional.prefixes.subdomain.xmpp_domain
// We'll build the url for the call by transforming that into:
// https://xmpp_domain/subdomain/roomName
// So if there are any prefixes in the jid (like jitsi meet, which
// has its participants join a muc at conference.xmpp_domain) then
// list that prefix here so it can be stripped out to generate
// the call url correctly
"room_jid_domain_string_to_strip_from_start": "conference.",
// The amount of time, in minutes, a service is allowed to continue.
// Once a service has been running for this long, it will be
// stopped (cleanly). A value of 0 means an indefinite amount
// of time is allowed
"usage_timeout": "0"
}
]
}

ロギング

デフォルトでは、/var/log/jitsi/jibri

ログ設定は下記を参照
https://github.com/jitsi/jibri/blob/master/lib/logging.properties

Jitsi Meetとの連動に続きます。。