最近参与的项目和音视频会议有关,所以利用空余时间在做音视频方案和技术的调研和熟悉;然后把过程做一些记录有记录才有进步嘛; 我们来看看我编译搭建好的服务器,并且拿个Html+JS的Demo通过nginx构建了一套系统;下面的效果是我拿一个华为平板和两台dell电脑进行开启的一个音视频会议 上面是编译的总体步骤,首先获取源代码; 获取源代码clone会有点慢;如果慢的话请+我QQ通过百度云盘直接下载 注意 我这里是2.x版本具体libsrtp-2.2.0,Janus要求至少1.5.4版本及以上;这个让Janus webrtc server中的RTP支持SSL 这个库是让Janus webrtc server支持 Data Channels 如果你不使用websocket可以不用这个依赖,因为我要更好的支持web浏览器音视频会议【当然Janus web rtc server也支持HTTP REST API】但是在我后续的方案中websocket还充当IM等双向的通信功能;而不仅仅只是用来作为webrtc信令通道 成功后安装目录/opt/janus,进入这个目录启动 cd /opt/janus 这里我拿Janus的html代码修改修改然后通过nginx进行代理,一定要记的配置证书,浏览器进行音视频是需要SSL的;这样就可以通过浏览器进行视频会议测试;
音视频会议SFU方案之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.安装依赖
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
sudo apt install python3-pip
如果网络环境不好,可以使用阿里的pip3源;如何设置请看这里pip源设置
pip3 install --user meson
2.2 源码安装ninja
在安装ninja之前,需要安装其依赖re2c
sudo apt install re2c re2c --version
git clone https://github.com/ninja-build/ninja.git cd ninja ./configure.py --bootstrap #编译,如果成功会生成ninja可执行文件 sudo cp ./ninja /usr/bin
2.3 编译
meson --prefix=/usr build && sudo ninja -C build && sudo ninja -C build install
sudo aptitude install libffi-dev
把用户目录/home/xxxx/.local/bin添加到PATH环境变量中2.4 配置PK_CONFIG
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig #查看上一步的日志可以看到目录
3.源码编译libsrtp
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
git clone https://github.com/sctplab/usrsctp #下载慢+QQ百度云 cd usrsctp ./bootstrap ./configure --prefix=/usr && make && sudo make install
5.让Janus webrtc server支持websocket信令-源码编译libwebsockets
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权限,否则无法创建目录
运行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 运行
sudo ./bin/janus –config=/opt/janus/etc/janus/janus.jcfg
编译完成搞个客户端就能 看效果了前端运行
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算