使用Jibri進行Jitsi Meet視頻錄制


想學更多的WebRTC知識,請關注WebRTC中文社區

前言

我們在做視頻會議系統的時候,通常都會有會議錄制功能,那么作為視頻會議開源的翹楚,Jitsi是怎么做這一點的,在官方文檔及其隱晦的情況下,我們該怎么成功搭建視頻錄制服務呢?下面我就帶大家來了解下實戰操作一把

什么的Jibri

Jibri提供用於錄制或流式傳輸Jitsi Meet會議的服務。

它通過啟動在虛擬幀緩沖區中呈現的Chrome實例並使用ffmpeg捕獲和編碼輸出來工作。它旨在在單獨的計算機(或VM)上運行,而沒有其他使用顯示或音頻設備的應用程序。單個jibri一次僅支持一次錄制。

這里注意 ** 單個Jibri一次僅支持一次錄制** ,也就是說一個Jibri服務只能同時錄制一次視頻會議,如果在其他會議室錄制的同時在開啟錄制,那么他會返回沒有錄制設備可用,或者設備在忙

Jibri的設計思路

我的理解可能有偏差,因為我也才剛接觸2天,歡迎各位補充。 Jibri重新添加了一個隱藏用戶,這個用戶你是看不見的,用戶沒有感知,進入了會議室,它使用了Chrome Driver來控制Chrome實例,在使用ffmpeg進行捕獲然后編碼在輸出為mp4格式的視頻文件。

錄制的方式

服務端錄制

優點是不用擔心客戶因自身電腦問題造成錄制失敗(如磁盤空間不足),也不會因錄制時搶占資源(CPU 占用率過高)而導致其他應用出現問題等;缺點是實現的復雜度很高。

客戶端錄制:

優點是方便錄制方操控,並且所錄制的視頻清晰度高,實現相對簡單。這里可以和服務端錄制做個對比,一般客戶端攝像頭的分辨率都非常高的(如 1280x720),所以客戶端錄制可以錄制出非常清晰的視頻;但服務端錄制要做到這點就很困難了,本地高清的視頻在上傳服務端時由於網絡帶寬不足,視頻的分辨率很有可能會被自動縮小到了 640x360,這就導致用戶回看時視頻特別模糊,用戶體驗差。不過客戶端錄制也有缺點,其中最主要的缺點就是耗 CPU。而 CPU 占用過高后,就很容易造成應用程序卡死。除此之外,它對內存、硬盤的要求也特別高,不過在計算機硬件發展的今天,這已經不是什么大問題了

准備工作:

  • 官方文檔用Ubuntu16.04進行的安裝,我測試的時候用的是Ubuntu18.04進行安裝,二選其一即可。
  • 已經搭建好jitsi-meet,並能正常的視頻通話,如果沒有搭建Jitsi-meet,可以按章我的上篇文章進行搭建

安裝依賴:

apt install linux-image-extra-virtual ffmpeg curl unzip software-properties-common 

因為安裝了linux-image-extra-virtual 內核軟件包,為了讓他生效,我們需要重新啟動操作系統,注意 以下命令會讓你電腦進行重啟啟動

reboot 

重啟電腦后,重新ssh進入雲主機

加載snd-aloop模塊:

設置要在啟動時加載的模塊:

echo "snd-aloop" >> /etc/modules 

將模塊加載到正在運行的內核中:

modprobe snd-aloop 

檢查模塊是否已加載:

lsmod | grep snd_aloop 

輸出以下內容便是成功加載了

root@jvb:~# lsmod | grep snd_aloop snd_aloop 24576 0 snd_pcm 98304 1 snd_aloop snd 81920 3 snd_timer,snd_aloop,snd_pcm 

安裝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-get -y update apt-get -y install google-chrome-stable 

安裝ChromeDriver,他是用來控制Chrome:

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 

安裝Jibri:

wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add - sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list" sudo apt-get update sudo apt-get install jibri 

在執行sudo apt-get install jibri如果提示讓你選擇,選擇keyboard configuration,並選擇英文English,如果沒有提示請忽略。

將Jibri的用戶帳戶添加到用戶組:

usermod -aG adm,audio,video,plugdev jibri 

配置Prosody

注意

  • 以下的jitsi.example.com全部替換成你的域名
  • 我的jitsi-meet在一台服務器,Jibri在另一台服務器。當我覺得安裝在一台服務器也沒有問題。
vim /etc/prosody/conf.d/you config.cfg.lua 

如果有下面內容的,請忽略,沒有的請添加

---Set up a MUC (multi-user chat) room server on conference.example.com: Component "conference.jitsi.example.com" "muc" --- Store MUC messages in an archive and allow users to access it modules_enabled = { "muc_mam" } 

添加internal MUC 組件

--- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.jitsi.example.com" "muc" modules_enabled = { "ping"; } storage = "internal" muc_room_cache_size = 1000 

添加VirtualHost以保存jibri用戶

VirtualHost "recorder.jitsi.example.com" modules_enabled = { "ping"; } authentication = "internal_plain" 

為Jibri創建兩個新帳戶,一個用於控制,一個用於記錄:

prosodyctl register jibri auth.jitsi.example.com Jibripssword prosodyctl register recorder recorder.jitsi.example.com recorderPssword 

配置Jicofo:

vim /etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.yourdomain.com org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90 

配置Jitsi Meet:

配置Jitsi Meet 讓錄制按鈕在界面中顯示出來

vim /etc/jitsi/meet/jitsi.example.com-config.js 找到以下配置取消注釋 fileRecordingsEnabled: true, // 啟用文件錄制 liveStreamingEnabled: true, // 啟用實時流媒體錄制,這個選項是可以直接推流到油管進行直播的 hiddenDomain: 'recorder.yourdomain.com', //隱藏域 

還可以直接將錄制文件保存到雲存儲,不過目前就支持dropbox

 // dropbox: { // appKey: 'you app key', // Specify your app key here. // // A URL to redirect the user to, after authenticating // // by default uses: // redirectURI: 'https://jitsi.example.com/static/oauth.html' //` }, 

在創建dropbox應用的時候OAuth 2的Redirect URIs直接寫

'https://jitsi.example.com/static/oauth.htm 

這樣配置才會生效

建立目錄來存儲錄音並設置其權限:

mkdir srv/recordings chown jibri:jibri srv/recordings 

配置Jibri:

vim /etc/jitsi/jibri/config.json 
"recording_directory": "srv/recordings", / /錄制文件 "finalize_recording_script_path": "", //錄制完成后啟動的shell腳本,官方這里寫了一串路徑,但是我沒有找到他,所以直接取消了 //剛剛上面配置Prosody的配置 "xmpp_server_hosts": [ "jitsi.example.com" ], "xmpp_domain": "jitsi.example.com", "control_login": { "domain": "auth.jitsi.example.com", "username": "jibri", "password": "Jibr1P@ssw0rd" }, // 注意,如果要配置多個Jibri,同時錄制多個房間,這里的用戶名不能一致 "control_muc": { "domain": "internal.auth.jitsi.example.com", "room_name": "JibriBrewery", "nickname": "jibri" }, "call_login": { "domain": "recorder.jitsi.example.com", "username": "recorder", "password": "Rec0rderP@ssw0rd" }, 

重啟服務

systemctl restart prosody systemctl restart jicofo systemctl restart jitsi-videobridge2 systemctl restart jibri 

開始錄制

打開你的域名進入房間,點擊右下角

在這里插入圖片描述 當聽到語音開始錄制就代表成功了,我們去看看我們之前建立保存錄像的文件夾

cd srv/recordings 會自動創建一個字母的文件夾 我們進入文件夾就可以看到mp4文件夾了,你不取消錄制這個視頻大小會一直變化 ll 22_2020-07-16-23-15-21.mp4 視頻文件名的格式是 房間名_當前時間 

停止錄制

當開始錄制的人點擊停止錄制按鈕后會停止錄制 當所有人離開房間后會停止錄制。

可選項

如果雲主機沒有Java8環境需要安裝Java8

wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add - add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ apt update apt install adoptopenjdk-8-hotspot 

如果雲主機有多個Java環境需要指定Java8運行Jirbri 將Java單詞替換為Java8的完整路徑

vim /opt/jitsi/jibri/launch.sh 

替換后如下

exec /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java -Djava.util.logging.config.file=/etc/jitsi/jibri/logging.properties -jar /opt/jitsi/jibri/jibri.jar --config "/etc/jitsi/jibri/config.json" 

替換后重啟

systemctl restart jibri 

取消視頻錄制警告

當我們把錄制的視頻拷貝到本地來用播放器播放后,我們會發現視頻上方有一個警告 如圖: 在這里插入圖片描述

這是chrome提出的警告,解決警告的方法如下:

mkdir -p /etc/opt/chrome/policies/managed
echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >>/etc/opt/chrome/policies/managed/managed_policies.json 

重啟jibri

systemctl restart jibri 

再次錄制就沒有了。

為每個房間都錄制視頻

顯然同時一個房間只能錄制一個視頻,是滿足不了我們業務需求的,但是Jibri又是通過虛擬機進行錄制,每一個虛擬機只能安裝一個jibri,那么意味着,我們同時錄制上百個會議,那么就有上百台服務器在同時工作,服務器成本將會是個巨大的數字。

官方的社區和論壇並沒有提供相關的完整解決方案,只是說可以創建一個Jibri池,類似於連接池的概念,我倒是覺得也許容器化docker是個不錯的選擇。

或則使用客戶端進行錄制。

  • [ ] 一台服務器安裝多個jibri同時進行多個視頻錄制

后續

如果你在安裝中遇到了問題可以查看日志,根據錯誤進行解決

tail -f /var/log/jitsi/jibri


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM