一、前言:
大家周末好,今天給大家分享janus環境搭建以及如何實現web端與web端的實時通話!在寫正式文章之前,首先要說明一下,本次環境的搭建,我沒有在ubuntu本地去搭建,而是騰訊云服務器上搭建的(服務器位于香港那邊,我為什么不選擇位于國內的云服務器搭建,原因很簡單,因為有些源碼庫位于國外服務器上,國內下載訪問慢如蝸牛,很是讓人著急啊!或者要么就是連接拒絕了。。。,這給學習者巨大的打擊,我曾經在ffmpeg源碼搭建環境的時候,深深體會到了這種心態崩了狀態!)
這篇文章內容可能會比較多,雖然只是搭建環境,但是很考驗動手能力,我在搭建的時候,遇到了很多細節問題,比如stun服務器分配的ip地址無效,一度無法讓整個環境進行下去。。。。,后來我重新開了一個位于廣州的云服務器,然后再安裝了coturn服務器,然后再啟動它,把這臺服務器的ip分配給我在香港那臺服務器上,才把janus給運行起來了(位于香港那邊的服務器會導致stun的ip失效,這樣是死活不能讓janus跑起來的)。
好了,簡單就說這么多吧(上面說的問題,在下面都會呈現給大家,后期有人搭建,希望少走彎路!),下面我就開始把整個環境搭建流程搭建過程分享給大家,過程中花了我不少時間折騰:
二、janus環境搭建:
1、什么是janus?
在正式大家環境之前,我們先了解一下什么是janus,我不造輪子,直接看官網的介紹:
https://janus.conf.meetecho.com/index.html
Janus官網介紹
嗯,這個就簡單說到這里。
2、騰訊云香港云服務器的配置選擇:
有些朋友可能平時沒怎么用過云服務器,大多可能都在本地使用一下linux相關發行版,所以下面我會有詳細步驟,當然騰訊云官網也有教程,我按照我的配置給大家演示一下(具體情況根據你實際情況而定);同時在這里也強調一下,這里不推薦大家開長期的云服務器租用,為什么說呢,一來,這玩意費用不低(特別是寬帶大小的不同,還是非常貴的),二來,你也可能也不經常用到,所以租用長期,浪費錢;我在搭建這個的時候,使用短期的按小時收費,如果不用的話,我把我這臺云服務器給注銷掉或者關機不收費,下次又可以接著用,比較靈活!
好了,下面是簡單的配置流程,騰訊云服務器地址:
https://buy.cloud.tencent.com/cvm?tab=lite
a
b
c
d
這里稍微說明一下:這個帶寬大小,對于測試音視頻的話,盡量開大一點,但是注意,你的主機不要被攻擊,不然產生的流量費用會比較可怕!所以這里我推薦大家開20M左右就行,我測試的時候,搞了100M.....
d
最后直接點擊開通就行,然后你就可以拿到一個公網ip地址了,然后可以在xshell上訪問這臺位于香港的云服務器了:
f
說明:這里會要你登入密碼,密碼就是你剛才設置這臺主機的密碼。
e
3、正式環境搭建:
好了,上面的前期準備我已經完全準備好了,接下來就開始正式大家環境了:
- a、安裝aptitude:
sudo apt-get install aptitude
- b、命令安裝依賴:
sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev
libssl1.0.1-dev libsrtp-dev libsofia-sip-ua-dev libglib2.3.4-dev
libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt
libtool automake
接著下面的命令一行行的執行就行:
sudo apt install cmake
sudo aptitude install libconfig-dev
sudo aptitude install libssl-dev
sudo aptitude install doxygen graphviz
# ffmpeg庫 支持--enable-post-processing
sudo aptitude install libavcodec-dev libavformat-dev libswscale-dev libavutil-dev
下面是源碼安裝依賴,我們先在當前目錄下創建webrtc和janus目錄,后面所有的源碼下載和安裝都在這個janus目錄下進行:
這里不用給權限,給了也沒關系!
- 安裝 WebSocket:janus 支持 WebSocket 是可選項,如果不安裝,編譯 janus 時,默認不支持 WebSocket 的鏈接請求,而 Android App Demo 是通過 WebSocket 與 janus 進行通信的,因為我們希望 Android APP Demo 能與瀏覽器(HTTP)進行視頻通話,所以就必須要在編譯 janus 時支持 WebSocket。依次執行以下命令,分別進行下載,編譯,安裝:
git clone https://github.com/warmcat/libwebsockets.git
cd libwebsockets
git branch -a 查看選擇最新的穩定版本,目前的是remotes/origin/v3.2-stable
git checkout v3.2-stable 切換到最新穩定版本
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
- 安裝 libsrtp:Janus 需要至少 version 1.5 以上的 libsrtp,如果系統中已經安裝了 libsrtp,則首先卸載后,手動安裝新版本,這里我們安裝 libsrtp 2.2,依次執行以下命令:
wget https://github.com/cisco/libsrtp/archive/v2.2.0.tar.gz
tar xfv v2.2.0.tar.gz
cd libsrtp-2.2.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
注意在下載這個,要切換到janus目錄下進行哈,后面的源碼安裝同樣操作,后期我就提醒了。
- 安裝libusrsctp:
libusrsctp支持--enable-data-channels:
git clone https://github.com/Kurento/libusrsctp.git
cd libusrsctp
./bootstrap
./configure
make
sudo make install
- 安裝libmicrohttpd:
libmicrohttpd支持--enable-rest:
wget https://ftp.gnu.org/gnu/libmicrohttpd/libmicrohttpd-0.9.71.tar.gz
tar zxf libmicrohttpd-0.9.71.tar.gz
cd libmicrohttpd-0.9.71/
./configure
make
sudo make install
下面開始進行編譯janus:
通過 Git 下載 Janus 源碼,并編譯安裝:
git clone https://github.com/meetecho/janus-gateway.git
git tag 查看當前的 tag,選擇最新穩定的版本v0.10.4
git checkout v0.10.4
sh autogen.sh
./configure --prefix=/opt/janus --enable-websockets --enable-post-processing --enable-docs --enable-rest --enable-data-channels
make
sudo make install
安裝完畢后,我們來配置相關janus運行所需條件:
- 1、生成證書:
mkdir -p ~/cert
cd ~/cert
# CA私鑰
openssl genrsa -out key.pem 2048
# 自簽名證書
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
- 2、安裝Nginx:
#下載nginx 1.15.8版本
wget http://nginx.org/download/nginx-1.15.8.tar.gz
tar xvzf nginx-1.15.8.tar.gz
cd nginx-1.15.8/
# 配置,一定要支持https
./configure --with-http_ssl_module
# 編譯
make
#安裝
sudo make install
- 3、修改nginx配置文件:
ubuntu@VM-0-3-ubuntu:~$ cd /usr/local/nginx/conf/
ubuntu@VM-0-3-ubuntu:/usr/local/nginx/conf$ ls
fastcgi.conf fastcgi_params koi-utf mime.types nginx.conf scgi_params uwsgi_params win-utf
fastcgi.conf.default fastcgi_params.default koi-win mime.types.default nginx.conf.default scgi_params.default uwsgi_params.default
然后進行配置:
注:剛才生成的證書路徑:
同時我們還要配置一下janus的路徑(指向janus所在目錄/opt/janus/share/janus/demos):
最終配置好結果如下:
- 4、啟動nginx:
這里稍微提一下對nginx不熟的朋友,可以看我之前學習總結的一篇關于nginx配置的文章。
這時候去訪問的話,訪問不了,因為我們的服務器沒有去開通一下權限,比如說80端口和443端口:
所以我們要配置一下:
1
2
3
4
最后就可以訪問到janus官網了(原理是通過nginx代理的功能):
1
2
3
- 5、安裝和啟動coturn
為啥要安裝這個呢,這就涉及到webrtc通話原理了,我在之前的文章里面有介紹過:
sudo apt-get install libssl-dev
sudo apt-get install libevent-dev
#git clone https://github.com/coturn/coturn
#cd coturn
# 提供另一種安裝方式turnserver是coturn的升級版本
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7
./configure
make
sudo make install
然后啟動coturn:
sudo nohup turnserver -L 0.0.0.0 --min-port 30000 --max-port 60000 -a -u txp:1121518woWO -v -f -r nort.gov &
1
- 6、配置janus的jcfg文件: 配置Video room: 需要配置的文件為(目錄/opt/janus/etc/janus): 并開通8088,8089,8188,8989
1
2
# 進到對應的目錄
cd /opt/janus/etc/janus
# 拷貝文件
sudo cp janus.jcfg.sample janus.jcfg
sudo cp janus.transport.http.jcfg.sample janus.transport.http.jcfg
sudo cp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfg
sudo cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
sudo cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg
sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
sudo cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
sudo cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
sudo cp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfg
sudo cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
sudo cp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfg
sudo cp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg
- 配置janus.jcfg:
sudo vim janus.jcfg
先找到stun服務器所在地方:
1
然后再找到turn服務器所在的地方
1
- 配置janus.transport.http.jcfg sudo vim janus.transport.http.jcfg
- 配置janus.transport.websockets.jcfg sudo vim janus.transport.websockets.jcfg
- 修改網頁默認支持的wss協議
修改 /opt/janus/share/janus/demos/videoroomtest.js文件
sudo vim /opt/janus/share/janus/demos/videoroomtest.js
1
三、運行janus遇到的坑:
上面為止,所以所需配置都已經搭建完畢,現在我們可以來運行janus了,但是我在運行的時候,遇到我開頭說的,stup的ip地址無效:
因為是香港的那邊的服務器不支持分配。。。。,所以為了解決這個問題,我后來又開了一臺國內位于廣州的云服務器,并且要在這臺國內服務器上安裝和啟動couturn,然后再把這臺服務器的ip地址分配到報錯的地方就行:
最后終于把janus給運行起來了,這過程蠻折騰的:
1
2
3
如果有用加進來,你可以在服務器后臺看到打印信息:
最終就可以實現web與web端的通話了:
四、總結:
今天的文章就總結到這里了,這篇文章花費的時間比較多,最近通過折騰突然領悟了之前卡住的問題,內心還是非常激動的,非常有成就感!
好了,我是txp,我們下期見!