Skip to main content

用公開的 Jitsi 服務也可以上遠端音樂課?

Technical
Author
Kuan-Yi Li
Table of Contents

前陣子看到 NiceCode 耐斯扣 NiceChord 好和弦釋出了自架 Jitsi 來上遠端音樂課的教學,勾起了我的好奇心:有沒有辦法,不修改設定檔;甚至,連自己架站都不用,就達成高音質、低延遲的目標呢?

有道是前人種樹,後人乘涼,一搜尋就跳出這篇文章,其中列出了許多重點:

How to video conference in high-quality stereo using Jitsi Meet

作者是做音樂教育的,偶爾寫寫程式,熱愛自由軟體……(咦?這似曾相識的感覺是怎麼回事? 🤣)

稍作研究之後發現前景看好啊!以下就先列操作步驟,真的很有興趣的人可以再看看技術細節。

操作步驟
#

開啟高音質功能的關鍵,在於特調的 Jitsi 會議網址

網址的基底是這樣的:

https://主機名/房間名#config.enableNoisyMicDetection=false&config.audioQuality.stereo=true&config.audioQuality.opusMaxAverageBitrate=128000

首先得找一個有口碑的公開 Jitsi 服務,把主機名填進去。在台灣的話,個人推薦數位政委唐鳳國家高速網路中心架的公開 Jitsi 服務 - jitsi.pdis.dev。(低延遲的關鍵在此)

再來決定房間名,實務上可以取一個比較不會撞名的名字。這邊是示範用途,先用個簡單的 HelloWorld。

主機名、房間名都填入之後得到:

https://jitsi.pdis.dev/HelloWorld#config.enableNoisyMicDetection=false&config.audioQuality.stereo=true&config.audioQuality.opusMaxAverageBitrate=128000

接著把這串網址貼到瀏覽器,開房間~沒意外的話,這時候房間裡面只會有你自己,且系統會賦予你主持人的權限。

對隱私要求高的主持人,可以到選單 More actions > Security options 打開下面的選項:

  • Enable lobby - 加入需經主持人同意
  • Add password - 為房間設定密碼,知道密碼才能加入

最後,把剛剛的特調網址分享給其他參與者,即可開始上課

注意!

網址的特調部分在進入房間後會被套用然後消失。要是在此時加入書籤,未來用這個書籤進房間,就會失去高音質的功能。如果要建立書籤,請記得確認書籤裡紀錄的網址有包含特調的部分。

技術細節
#

Jitsi 裡面的 config.js 是拿來設定預設值的。若身為網站管理者,可以修改這個檔案,讓該站高音質功能預設為開啟(好和弦的做法);若是純粹的網站使用者,雖然改不了這個檔案,但是 Jitsi 有個機制,可以覆寫預設的設定值

我們可以先看看 config.js 裡有哪些設定值,到 configWhitelist.js 確認一下想改的設定值是可以覆寫的。另外 ScreenObtainer.js 裡可以發現,只要開啟 stereo(立體聲),以下功能都會自動關閉:

  • Auto Gain Control
    • 自動增益(自動調整麥克風大小聲)
    • 對應設定值 disableAGC
  • Acoustic Echo Cancellation
    • 回音消除
    • 對應設定值 disableAEC
  • Noise Suppression
    • 降噪
    • 對應設定值 disableNS

所以只要開啟 stereo 就有 disableAP (disables all audio processing) 的效果。

值得一提的是,原本主流之一的 Chromium 系列瀏覽器從 2017 年就存在其 WebRTC 對立體聲支援不好的問題,但是這個 bug 已於 2021 年 4 月上旬修好,讓高音質解決方案的通用性提升了不少。

HD audio 的一系列功能則是 2021 年 4 月中旬被實作出來(jitsi-meetlib-jitsi-meet),走 P2P 時對高音質的支援似乎也有改善,這應該不是巧合──巧合的是,剛做出來不久台灣的疫情就爆發了。 🥲

在寫文章的當下,這些修正都還算新。要保險的話,用之前可以檢查一下該站的 config.js,確認版本有跟上。像 jitsi.pdis.dev 的 config.js 一看版本就夠新。

在國外需要找公開 Jitsi 主機的話可以試著到 Community-run instances 查詢。

到主機或機房的網路延遲可以用 ping 來測試

# NCHC
ping jitsi.pdis.dev

# Linode Tokyo 2
ping speedtest.tokyo2.linode.com

不知為何到 Linode Tokyo 2 的 IPv6 路由似乎一直以來都沒 IPv4 的漂亮,延遲多了 100 ms 左右,如果要在這自架 Jitsi 感覺拔掉 AAAA record 比較好。