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
在这里插入图片描述

效果预览

我们来看看我编译搭建好的服务器,并且拿个Html+JS的Demo通过nginx构建了一套系统;下面的效果是我拿一个华为平板和两台dell电脑进行开启的一个音视频会议
在这里插入图片描述

环境准备

  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.安装依赖

    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

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工具
    sudo apt install python3-pip 
    
  • 2.利用pip3安装 meson
    如果网络环境不好,可以使用阿里的pip3源;如何设置请看这里pip源设置
    pip3 install --user meson
    
2.2 源码安装ninja
  • 1.安装re2c
    在安装ninja之前,需要安装其依赖re2c
    sudo apt install re2c
    re2c --version
    
  • 2.编译ninja
    git clone https://github.com/ninja-build/ninja.git
    cd ninja
    ./configure.py --bootstrap #编译,如果成功会生成ninja可执行文件
    sudo cp ./ninja  /usr/bin
    
    获取源代码clone会有点慢;如果慢的话请+我QQ通过百度云盘直接下载
2.3 编译
meson --prefix=/usr build && sudo ninja -C build && sudo ninja -C build install

注意

  1. 这一步如果报找不到 libffi 请安装libffi-dev依赖
sudo aptitude install libffi-dev
  1. 如果找不到meson命令要配置path
    把用户目录/home/xxxx/.local/bin添加到PATH环境变量中
2.4 配置PK_CONFIG
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

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

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信令通道

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

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 修改配置

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐