ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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**