安装Jitsi Meeting Jibri模块
目录
- List item
一、 安装依赖
二、 安装Ffmpeg
三、 安装Google Chrome
四、 安装ChromeDriver,他是用来控制Chrome
五、 安装Jibri
六、 将Jibri的用户帐户添加到用户组
七、 配置Jibri
八、 配置prosody配置文件
九、 配置Jicofo
十、 jitsi meet的配置文件
十一、 结果验证
说明:
使用安装操作系统Ubuntu18.04,JDK版本号为java version “1.8.0_131”
安装gpg软件版本gpg (GnuPG) 2.2.4;gpg是GNU Privacy guard 的缩写,是自由软件基金会GNU计划的一部分,它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密。
在安装Jitsi能召开视频会议的基础之上安装Jibri模块。
十分感谢这篇参考资料https://blog.csdn.net/mwl268/article/details/117331481
*
安装步骤
一、安装依赖
1、 输入apt install linux-image-extra-virtual ffmpeg curl unzip software-properties-common(此命令将ffmpeg也安装)
2、 设置要在启动时加载的模块,输入echo “snd-aloop” >> /etc/modules
3、 将模块加载到正在运行的内核中输入modprobe snd-aloop
4、 检查模块是否已加载输入lsmod | grep snd_aloop
5、 输入reboot重启操作系统
二、安装Ffmpeg
Jibri 需要相对新版本的 ffmpeg 安装并编译
1、 输入apt-get update
2、 输入apt-get install ffmpeg安装ffmpeg
3、 输入ffmpeg -version验证安装的版本
三、安装Google Chrome
1、 输入wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/sources.list.d/
2、 将下载源加入到系统的源列表;输入wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add –
3、 输入apt-get update
4、 输入apt-get install google-chrome-stable
5、 安装完Chrome后,添加chrome管理的策略文件,并将CommandLineFlagSecurityWarningsEnabled设置为false。要不然录像中会有一个Chrome警告,输入mkdir -p /etc/opt/chrome/policies/managed
6、 输入echo ‘{ “CommandLineFlagSecurityWarningsEnabled”: false }’ >>/etc/opt/chrome/policies/managed/managed_policies.json
~~安装Google Chrome的另一种方式
1、 说明:要已启用transport-https若没有安装,则输入
输入apt install apt-transport-https
2、 输入sudo apt-add-repository universe
3、 输入wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
wget这句命令是将谷歌浏览器的deb包下载到当前目录中。~~
4、 输入apt-get -f install
-f参数的主要作用是是修复依赖关系(depends),假如用户的系统上有某个package不满足依赖条件,这个命令就会自动修复,安装程序包所依赖的包。
-f 是 参数 ;放在 install 前面跟后面是一样的效果
即: " sudo apt-get -f install " equals(相等) to " sudo apt-get install -f"
5、 输入dpkg -i google-chrome-stable_current_amd64.deb
四、安装ChromeDriver,他是用来控制Chrome
然后安装Chromedriver, 就是下载下来zip 解压之,复制到/usr/local/bin/chromedriver这个路径,然后赋予相应权限
1、 输入CHROME_DRIVER_VERSION=curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE
使用 curl -sS 请求失败时返回失败的返回值
2、 输入wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
-N, --timestamping 只获取比本地文件新的文件
-P, --directory-prefix=PREFIX 以 PREFIX/… 保存文件
wget 非常稳定,它在带宽很窄的情况下和不稳定网络中有很强的适应性.如果是由于网络的原因下载失败,wget会不断的尝试,直到整个文件下载完毕。如果是服务器打断下载过程,它会再次联到服务器上从停止下载的位置继续下载。这对从那些限定了链接时间的服务器上下载大文件非常有用。
3、 输入unzip ~/chromedriver_linux64.zip -d ~/
4、 输入rm ~/chromedriver_linux64.zip
5、 输入mv -f ~/chromedriver /usr/local/bin/chromedriver
6、 输入chown root:root /usr/local/bin/chromedriver
7、 输入chmod 0755 /usr/local/bin/chromedriver
五、安装Jibri
-
输入apt-get install default-jre-headless ffmpeg curl alsa-utils icewm xdotool xserver-xorg-video-dummy
-
Jibri 软件包可以在 downloads.jitsi.org 上的稳定存储库中找到。首先将 Jitsi 存储库密钥安装到您的系统上;输入curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c ‘gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg’
“|”管道符,是指上一个命令的输出是下一个命令的输入。
然后,我们使用 sudo 并配合 echo 命令再次向修改权限之后的 test.asc 文件中写入信息:
$ sudo echo “又一行信息” >> test.asc
-bash: test.asc: Permission denied
这时,可以看到 bash 拒绝这么做,说是权限不够。
这是因为重定向符号 “>” 和 “>>” 也是 bash 的命令。我们使用 sudo 只是让 echo 命令具有了 root 权限,但是没有让 “>” 和 “>>” 命令也具有 root 权限,所以 bash 会认为这两个命令都没有像向test.asc 文件写入信息的权限。
这一问题的途径有两种。第一种是利用 “sh -c” 命令,它可以让 bash 将一个字符串作为完整的命令来执行,这样就可以将 sudo 的影响范围扩展到整条命令。具体用法如下:
$ sudo sh -c ‘echo “又一行信息” >> test.asc’ -
输入echo ‘deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/’ | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null
tee命令将输出到屏幕上的内容保存至文件中
操作过程:
1.执行以下的命令
[root@testvm ~]# uname -n | tee hostInfo
testvm
[root@testvm ~]# cat hostInfo
testvm -
输入apt-get update
-
输入apt-get install jibri
成功安装Jibri之后,会创建audio,video用户,可见上述安装成功截图
六、将Jibri的用户帐户添加到用户组
1、 输入usermod -aG adm,audio,video,plugdev jibri
usermod是更改用户属性的一个命令,-a指的是把用户追加到某些组中,仅与-G选项一起使用;-G|groups把用户追加到某些组中,仅与-a选项一起使用。
说明:
不安装adoptopenjdk-8-hotspot虽然能生成录像文件,但是不能播放,是运行jibri的jdk版本不匹配导致。所以需要安装openjdk-8,然后需要配置安装路径到Jibri的launch.sh文件中
1、 输入wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add –
2、 输入add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
3、 输入apt-get -y update
4、 输入apt-get install adoptopenjdk-8-hotspot
5、 输入vim /opt/jitsi/jibri/launch.sh,将Java 8设置为Jibri的默认值—将单词“Java”替换为jdk的完整路径
修改成如下
#!/bin/bash
exec /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java -Djava.util.logging.config.file=/etc/jitsi/jibri/logging.properties -Dconfig.file="/etc/jitsi/jibri/jibri.conf" -jar /opt/jitsi/jibri/jibri.jar --config “/etc/jitsi/jibri/config.json”
七、配置Jibri
1、 配置文件在/etc/jitsi/jibri/目录下,输入cd /etc/jitsi/jibri/
2、 输入vim jibri.conf
编辑成如下:
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = "Jibri_Meeting"
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of 'true'
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = true
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["172.16.13.75"]
xmpp-domain = "172.16.13.75"
control-muc {
domain = "internal.auth.172.16.13.75"//域名或者IP地址
room-name = "JibriBrewery"
nickname = "jibri"
}
control-login {
domain = "auth.172.16.13.75"
username = "jibri"
password = "jibriauthpass"
}
call-login {
domain = "recorder.172.16.13.75"
username = "recorder"
password = "jibrirecorderpass"
}
strip-from-room-domain = "conference."
usage-timeout = 0
trust-all-xmpp-certs = true
}
]
}
}
recording {
recordings-directory = "/srv/recordfile/"
# TODO: make this an optional param and remove the default
# finalize-script = "/path/to/finalize"
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
]
}
ffmpeg {
resolution = "1920x1080"
// The audio source that will be used to capture audio on Linux
audio-source = "alsa"
// The audio device that will be used to capture audio on Linux
audio-device = "plug:bsnoop"
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
"--use-fake-ui-for-media-stream",
"--start-maximized",
"--kiosk",
"--enabled",
"--disable-infobars",
"--autoplay-policy=no-user-gesture-required",
// "--headless",
"--no-sandbox",
//"--disable-dev-shm-usage",
"--ignore-certificate-errors"
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers = []
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"
// The kid to use as part of the JWT
# kid = "key-id"
// The issuer of the JWT
# issuer = "issuer"
// The audience of the JWT
# audience = "audience"
// The TTL of each generated JWT. Can't be less than 10 minutes.
# ttl = 1 hour
}
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds
// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes
// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds
}
3、 输入mkdir /srv/recordfile创建存放录制视频的目录
4、 输入chown -R 777 /srv/recordfile
八、配置prosody配置文件
1、 输入 cd /etc/prosody/
2、 输入vim prosody.cfg.lua
将文件内容下面部分注释去掉并改成如下这样
—Set up a MUC (multi-user chat) room server on conference.example.com:
Component “conference.172.16.13.75” “muc”
— Store MUC messages in an archive and allow users to access it
modules_enabled = { “muc_mam” }
3、 输入cd /etc/prosody/conf.d/
4、 输入vim 172.16.13.75.cfg.lua
Component "internal.auth.172.16.13.75" "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000
VirtualHost "recorder.172.16.13.75"
modules_enabled = {
"ping";
}
authentication = "internal_plain"
然后设置两个号,供jibri用, 就是jibri.conf里配置的那两个,输入:prosodyctl register jibri auth.172.16.13.75 jibriauthpass
prosodyctl register recorder recorder.172.16.13.75 jibrirecorderpass
九、配置Jicofo
1、 输入cd /etc/jitsi/jicofo/
2、 输入touch sip-communicator.properties*
3、 输入chmod -R 777 sip-communicator.properties*
增加如下配置:
```bash
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.172.16.13.75
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90
hiddenDomain: 'recorder.172.16.13.75',
## 十、jitsi meet的配置文件
1、 输入cd /etc/jitsi/meet/
2、 输入vim 172.16.13.75-config.js
取消如下两行注释
```bash
fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: 'recorder.172.16.13.75',
3、 输入重启服务
systemctl restart prosody
systemctl restart jicofo
systemctl restart jitsi-videobridge2
4、 输入 systemctl restart jibri
十一、结果验证
说明:
1、 按照上述步骤安装之后,只能会议主持人发起录制会议功能。
2、 录制结束之后,需要重启Jibri服务之后,才能继续使用录制服务会议。单个Jibri一次仅支持一个记录。 录制结束之后,还需要重启Prosody服务,录像存放文件夹中才能生成录像文件。 生成的录像文件名称格式是会场名称+会议发起时间。
3、 ChromeDriver作用介绍资料https://www.jianshu.com/p/31c8c9de8fcd(chrome Web驱动程序,能够提供谷歌浏览器与其他应用之间的协议通信)