--Ubuntu 下 Janus Server 搭建筆記html
Janus是一個開源的,經過 C 語言實現了對 WebRTC 支持的 Gateway;Janus 自身實現得很簡單,提供插件機制來支持不一樣的業務邏輯,配合官方自帶插件就能夠用來實現高效的 Media Server 服務。
本文主要介紹如何在 Ubuntu 16.04 下搭建起 janus 服務器,實現 janus 官方 Demo 瀏覽器與 Android APP Demo(janus-gateway-android)之間的音視頻通話。java
目前瀏覽器僅支持 FireFox 瀏覽器,由於 Chrome 瀏覽器打開音視頻採集的話須要 HTTPS 加密訪問!node
效果圖以下:android
Janus 官網:https://janus.conf.meetecho.com/index.htmlgit
參考文檔:https://github.com/meetecho/janus-gatewaygithub
編譯運行 Janus Server 須要依賴較多的一些第三方庫,而這些依賴庫在 Ubuntu 下主要經過 aptitude 進行安裝,首先經過安裝 aptitude:web
sudo apt-get install aptitude
Ubuntu 下經過 aptitude 批量安裝依賴工具包,這裏建議 Ubuntu 鏡像源(/etc/apt/source.list)不要爲了追求速度而改用了國內的某些鏡像源,如 網易 163,這可能會致使某些工具包下載失敗,建議依然使用官方自帶的鏡像源。npm
批量安裝命令:數組
sudo aptitude install libmicrohttpd-dev libjansson-dev libnice-dev \ libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \ libopus-dev libogg-dev libcurl4-openssl-dev pkg-config gengetopt \ libtool automake
若是出現某個工具包下載失敗,請修改鏡像源爲官方地址,並執行如下命令瀏覽器
sudo apt-get update && sudo apt-get upgrade
以更新鏡像源,完成後從新安裝。
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 mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" .. make && sudo make install
安裝成功後,在編譯 janus 時,janus 默認會增長對 WebSocket 的集成,或者經過增長編譯參數 --enable-websockets 打開 WebSocket 開關,或 --disable-websockets 關閉 WebSocket 開關。
Janus 源碼目錄下的 html 下自帶 Web Demo(html & JavaScript ),Janus 編譯完成並 Start 之後,須要經過 http server 訪問 Janus Web Demo,其中包括:
Echo Test: yes Streaming: yes Video Call: yes SIP Gateway: yes Audio Bridge: yes Video Room: yes Voice Mail: yes Record&Play: yes Text Room: yes
以上 janus 插件都可經過相應的 http 連接進行訪問體驗。
如下介紹一種快速,便捷,輕巧的 HTTP Server 安裝方式:
經過 Node.js (基於 Chrome V8 引擎的 JavaScript 運行環境) 進行安裝,首先安裝 Node.js:
sudo apt-get install nodejs
安裝成功後,經過 npm (npm 是 Node.js 的包管理器,是全球最大的開源庫生態系統) 進行安裝 httpserver:
sudo npm -g install http-server
啓動方式:
進入到 html 目錄,執行 http-server 命令便可,如:
gobert@gobert-ThinkPad-X230:~/OpenSource/janus-gateway$ cd html/ gobert@gobert-ThinkPad-X230:~/OpenSource/janus-gateway/html$ http-server Starting up http-server, serving ./ Available on: http://127.0.0.1:8080 http://100.100.32.64:8080 Hit CTRL-C to stop the server
輸入 http url 便可訪問。
注:需首先 build & start janus Server!
Janus 須要至少 version 1.5 以上的 libsrtp,若是系統中已經安裝了 libsrtp,則首先卸載後,手動安裝新版本,這裏咱們安裝 libsrtp 2.0,依次執行如下命令:
wget https://github.com/cisco/libsrtp/archive/v2.0.0.tar.gz tar xfv v2.0.0.tar.gz cd libsrtp-2.0.0 ./configure --prefix=/usr --enable-openssl make shared_library && sudo make install
經過 Git 下載 Janus 源碼,並編譯安裝:
git clone https://github.com/meetecho/janus-gateway.git sh autogen.sh ./configure --prefix=/opt/janus --enable-websockets --enable-docs make sudo make install
configure 執行成功後,會輸出 janus 所支持的 協議及插件,以下:
libsrtp version: 2.0.x SSL/crypto library: OpenSSL DTLS set-timeout: not available DataChannels support: no Recordings post-processor: no TURN REST API client: yes Doxygen documentation: no Transports: REST (HTTP/HTTPS): yes //支持 HTTP 訪問 WebSockets: yes (new API) //支持 WebSocket 訪問 RabbitMQ: no MQTT: no Unix Sockets: yes Plugins: Echo Test: yes Streaming: yes Video Call: yes SIP Gateway: yes Audio Bridge: yes Video Room: yes Voice Mail: yes Record&Play: yes Text Room: yes Event handlers: Sample event handler: yes
若是所有安裝以上步驟進行編譯的 janus ,那麼 janus 的全局配置文件存放目錄爲 :
/opt/janus/etc/janus/janus.cfg
或者在啓動 janus 時,加上相應的啓動參數,參數可經過 janus --help 查看;
janus 默認的配置中是沒有 WebSocket 的配置的,直接啓動 Janus 會因沒有 WebSocket 配置文件而報錯。幸運的是在配置目錄中 Janus 已經給咱們提供了一個 WebSocket 的示例配置文件 : janus.transport.websockets.cfg.sample,(若是咱們要經過 WebSocket 鏈接 Janus,則須要有個 WebSocket 的配置文件)這裏咱們能夠直接拷貝這個示例文件:
sudo cp janus.transport.websockets.cfg.sample janus.transport.websockets.cfg
經過查看此配置文件,能夠得知 Janus 默認的 WebSocket 的端口號爲 8188,記住這個端口號,在 Android APP Demo 中會使用到!
啓動 Janus:
/opt/janus/bin/janus --debug-level=7 --log-file=$HOME/janus-log
根據須要能夠選擇是否加上後面兩個啓動參數。
咱們使用 PC 下的 瀏覽器 與 Android APP Demo 進行聯調。
進入到 janus 目錄下的 html 目錄,啓動 http-server
gobert@gobert-ThinkPad-X230:~$ cd ~/OpenSource/janus-gateway/html/ gobert@gobert-ThinkPad-X230:~/OpenSource/janus-gateway/html$ http-server Starting up http-server, serving ./ Available on: http://127.0.0.1:8080 http://100.100.32.64:8080 Hit CTRL-C to stop the server
這樣外部即可以經過 http://100.100.32.64:8080 進行訪問了,進入首頁後,找到 videoRoom,Start
git clone git@github.com:Computician/janus-gateway-android.git
修改源代碼
janus-gateway-android 支持兩個 Demo 測試:EchoTest 和 VideoRoom,默認狀況下會啓用 EchoTest,這個 Demo 僅僅是鏈接服務器後,將數據再發回本地進行本地測試,咱們要改成與房間內的其它用戶(瀏覽器)進行視頻通話,則須要啓用另一個測試用例 VideoRoom,按照以下方式修改代碼:
JanusActivity.java 類中新增 VideoRenderer.Callbacks 數組(視頻房間中可能會有多人),暫定義爲 2 個,實際鏈接人數不要超過此數字:
private VideoRenderer.Callbacks remoteRenders[] = new VideoRenderer.Callbacks[3];
OnCreate 方法中初始化以上定義的數組:
remoteRenders[0] = VideoRendererGui.create(0, 0, 25, 25, VideoRendererGui.ScalingType.SCALE_ASPECT_FILL, true);
APP Demo 是經過 WebSocket 鏈接 Janus Server,因此修改 VideoRoomTest.java 中 JANUS_URL 地址爲咱們啓動的 Janus 服務器 WebSocket 地址,IP 爲 janus server 地址,端口默認爲 8188:
private final String JANUS_URI = "ws://100.100.32.64:8188";
編譯安裝
經過 Android studio 進行編譯安裝到 Android 機。
Janus Server 默認會開啓兩個視頻房間:1234 和 5678,分別使用 VP8 和 VP9 視頻編碼器,因此咱們經過 Brower 和 Android APP Demo 進行聯調測試時,暫不須要設置房間 ID。
效果圖: