# 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
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020060714463845.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Fsc2hvdXl1,size_16,color_FFFFFF,t_70#pic_center)
## 环境准备
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学习笔记——视频的边缘检测
- 图像特征点匹配(视频质量诊断、画面抖动检测)
- 图像质量诊断