# Webrtc音視頻會議之Janus編譯
## 說明
通過Webrtc做音視頻的都了解一點,Webrtc音視頻方案有3種:SFU,MCU ,Mesh;
目前我所在項目組現有方案是MCU方案,MCU方案有一個種重要的特點就是所有流匯聚到MCU服務器然后進行編解碼合屏等等(不細說專門做音視頻的比我更專業),對于服務端壓力非常大不適合高并發的互聯網方案;我經過一些途徑知道不考慮網絡等一些因素,配置還比較好的單臺服務器接入的1080P視頻大概100路左右;
所以才有我后面的研究SFU方案,比較出名的互聯網會議ZOOM和騰訊會議就是SFU方案,SFU方案某種意義上講只是做流的轉發,而不做所有參會人員的視頻流編解碼合屏;
這樣只是對帶寬的要求比較高(5G時代都來害怕這個?)最重要的是視頻不是事先在服務器上合并好的,到了端上能更好的進行布局和做文章;不扯了,我能扯得大概也就這么多了………………;哈哈
*****
研究想要快速出成果和學習到好的思想當然得站在大牛的肩膀上。
所以研究了一些github上面start比較多的項目;我比較中意Mediasoup和Janus;他們都是相對成熟的音視頻會議系統;同時如果考慮自研的話推薦大家一個很好的golang庫**pion**;
*****
這里這重點說Janus,Janus是由c開發,它的架構有點類似Nginx,插件化,核心模塊不是很大,然后各種功能都是通過插件模式提供,如果要進行二次開發大部分只需要寫Plugin就行了;下圖是Janus支持的插件和事件,下面列出來都是支持的,只是我進行了裁剪按照我自己的要求配置了相應的Plugin

## 環境準備
1. 安裝了**ubuntu**系統的visualbox虛擬機,本案使用ubuntu16.04;
2. 安裝好git,方便從github上面clone源碼
3. apt 安裝 aptitude**(sudo apt install aptitude)**
4. 更新 aptitude**(sudo aptitude upgrade)**
5. 安裝cmake**(sudo aptitude install cmake)**
.
## 開始編譯
### 1.安裝依賴
~~~sh
aptitude install libmicrohttpd-dev libjansson-dev \
libssl-dev libsrtp-dev libsofia-sip-ua-dev libglib2.0-dev \
libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \
libconfig-dev pkg-config gengetopt libtool automake
~~~
### 2.源碼編譯libnice
~~~sh
git clone https://gitlab.freedesktop.org/libnice/libnice
cd libnice
sudo meson --prefix=/usr build && sudo ninja -C build && sudo ninja -C build install
~~~
上面是編譯的總體步驟,首先獲取源代碼;
#### 2.1 安裝meson
* 1.安裝pip3工具
~~~sh
sudo apt install python3-pip
~~~
* 2.利用pip3安裝 meson
如果網絡環境不好,可以使用阿里的pip3源;如何設置請看這里[pip源設置](https://developer.aliyun.com/mirror/pypi?spm=a2c6h.13651102.0.0.3e221b11dDSfmG)
~~~sh
pip3 install --user meson
~~~
#### 2.2 源碼安裝ninja
* 1.安裝re2c
在安裝ninja之前,需要安裝其依賴re2c
~~~sh
sudo apt install re2c
re2c --version
~~~
* 2.編譯ninja
~~~sh
git clone https://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap #編譯,如果成功會生成ninja可執行文件
sudo cp ./ninja /usr/bin
~~~
獲取源代碼clone會有點慢;如果慢的話請+我QQ通過百度云盤直接下載
#### 2.3 編譯
~~~sh
meson --prefix=/usr build && sudo ninja -C build && sudo ninja -C build install
~~~
**注意**
1. 這一步如果報找不到 libffi 請安裝libffi-dev依賴
~~~sh
sudo aptitude install libffi-dev
~~~
2. 如果找不到meson命令要配置path
把用戶目錄/home/xxxx/.local/bin添加到PATH環境變量中
#### 2.4 配置PK\_CONFIG
~~~sh
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig #查看上一步的日志可以看到目錄
~~~
### 3.源碼編譯libsrtp
我這里是2.x版本具體libsrtp-2.2.0,Janus要求至少1.5.4版本及以上;這個讓Janus webrtc server中的RTP支持SSL
~~~sh
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
sudo make shared_library && sudo make install
~~~
### 4.讓Janus webrtc server支持Data Channels-源碼編譯usrsctp
這個庫是讓Janus webrtc server支持 Data Channels
~~~sh
git clone https://github.com/sctplab/usrsctp #下載慢+QQ百度云分享
cd usrsctp
./bootstrap
./configure --prefix=/usr && make && sudo make install
~~~
### 5.讓Janus webrtc server支持websocket信令-源碼編譯libwebsockets
如果你不使用websocket可以不用這個依賴,因為我要更好的支持web瀏覽器音視頻會議【當然Janus web rtc server也支持HTTP REST API】但是在我后續的方案中websocket還充當IM等雙向的通信功能;而不僅僅只是用來作為webrtc信令通道
~~~sh
git clone https://libwebsockets.org/repo/libwebsockets
cd libwebsockets
# If you want the stable version of libwebsockets, uncomment the next line
# git checkout v3.2-stable
mkdir build
cd build
# See https://github.com/meetecho/janus-gateway/issues/732 re: LWS_MAX_SMP
cmake -DLWS_MAX_SMP=1 -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_C_FLAGS="-fpic" ..
make && sudo make install
~~~
### 6.編譯正主Janus
~~~sh
git clone https://github.com/meetecho/janus-gateway.git
cd janus-gateway
sh autogen.sh
./configure --prefix=/opt/janus
make
sudo make install # unbutu下一定要root權限,否則無法創建目錄
~~~
成功后安裝目錄/opt/janus,進入這個目錄啟動
## 運行Janus webrtc server
### 1 修改配置
~~~sh
sudo cp janus.jcfg.sample janus.jcfg
sudo cp janus.plugin.videoroom.jcfg.sample janus.plugin.videoroom.jcfg
sudo cp janus.plugin.sip.jcfg.sample janus.plugin.sip.jcfg
sudo cp janus.plugin.audiobridge.jcfg.sample janus.plugin.audiobridge.jcfg
sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.cfg
sudo cp janus.plugin.textroom.jcfg.sample janus.plugin.textroom.jcfg
sudo cp janus.plugin.streaming.jcfg.sample janus.plugin.streaming.jcfg
sudo cp janus.plugin.videocall.jcfg.sample janus.plugin.videocall.cfg
sudo cp janus.transport.websockets.jcfg.sample janus.transport.websockets.jcfg
sudo cp janus.transport.pfunix.jcfg.sample janus.transport.pfunix.jcfg
sudo cp janus.plugin.echotest.jcfg.sample janus.plugin.echotest.jcfg
sudo cp janus.plugin.voicemail.jcfg.sample janus.plugin.voicemail.jcfg
sudo cp janus.plugin.nosip.jcfg.sample janus.plugin.nosip.jcfg
sudo cp janus.plugin.recordplay.jcfg.sample janus.plugin.recordplay.jcfg
~~~
### 2 運行
cd /opt/janus
sudo ./bin/janus --config=/opt/janus/etc/janus/janus.jcfg
編譯完成搞個客戶端就能 看效果了
## 前端運行
這里我拿Janus的html代碼修改修改然后通過nginx進行代理,一定要記的配置證書,瀏覽器進行音視頻是需要SSL的;這樣就可以通過瀏覽器進行視頻會議測試;
**引用文章請標明出處,否則可以保留一切追究責任的權利**
**技術交流:**
**qq:408365330**
**微信:egojit**
- 序言
- 編解碼
- H264
- HEVC碼流解析
- H264編碼原理
- 多媒體封裝
- MP4
- 學好 MP4,讓直播更給力
- AAC
- FLV
- 流媒體協議
- RTSP
- RTCP
- RTP
- H265 RTP封包筆記
- SDP
- RTMP
- RTMP URL
- rtmp url基礎
- webrtc
- 編譯
- 最簡單的編譯webrtc方案
- Webrtc音視頻會議之Webrtc“不求甚解”
- Webrtc音視頻會議之Mesh/MCU/SFU三種架構
- 音頻傳輸之Jitter Buffer設計與實現
- Janus
- Webrtc音視頻會議之Janus編譯
- Webrtc音視頻會議之Janus源碼架構設計
- webrtc服務器-janus房間管理
- 源碼分析
- WebRTC視頻JitterBuffer詳解
- 走讀Webrtc 中的視頻JitterBuffer(一)
- 走讀webrtc 中的視頻JitterBuffer(二)
- webrtc視頻幀率控制算法機制
- 目標碼率丟幀-1
- 目標幀率丟幀-2
- 29 如何使用Medooze 實現多方視頻會議
- FFmpeg
- FFmpeg編譯
- Window10下編譯最新版FFmpeg的方法步驟
- FFMPEG靜態庫編譯
- ffmpeg實現畫中畫
- FFmpeg推流器
- ffmpeg-aac
- OpenCV
- OpenCV學習筆記——視頻的邊緣檢測
- 圖像特征點匹配(視頻質量診斷、畫面抖動檢測)
- 圖像質量診斷