Janus WebRTC服务器

2020-06-01 04:04:58

Janus是由Meetecho设计和开发的开源通用WebRTC服务器。这个版本的服务器是为Linux系统量身定做的,尽管它也可以为MacOS机器编译和安装。Windows不受支持,但如果这是一个要求,Janus已知在Windows 10上的Windows Linux子系统中工作:不要信任提供.exe版本的Janus的repos,它们不是官方的,也不受支持。

对于一些在线演示和文档,请务必访问项目网站!

如果您有关于Janus的问题,或者希望与我们和其他用户讨论Janus,请加入我们的MeetEcho-Janus Google小组。如果你遇到错误,请在GitHub上提交一个问题:不过,在打开问题之前,请确保你阅读了指南。

libmicrohttpd(至少是v0.9.59;仅当您对Janus API的REST支持感兴趣时才需要)。

Cmake(仅当您对WebSocket和/或BoringSSL支持感兴趣时才需要,因为它们利用了它)。

rabbitmq-c(仅当您对Janus API或事件的RabbitMQ支持感兴趣时才需要)。

paho.mqtt.c(仅当您对Janus API或事件的MQTT支持感兴趣时才需要)。

libcurl(仅当您对流插件或示例事件处理程序插件中的RTSP支持感兴趣时才需要)

所有这些库通常在大多数最常见的发行版上都可用。例如,在最近的Fedora上安装这些库非常简单:

百胜安装libmicrohttpd-devel jansson-devel\openssl-devel libsrtp-devel sofia-sip-devel glib2-devel\opus-devel libogg-devel libcurl-devel pkgconfig gengetopt\libconfig-devel libtool autoconf auto ake。

请注意,如果您尝试在CentOS计算机上进行安装,则可能还需要yum安装epel-release。

智能安装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 auto ake。

注意:请注意,libopus在您的发行版上可能无法开箱即用。在这种情况下,您必须手动安装它。

虽然libnices通常在大多数发行版中都是以软件包的形式提供的,但Ubuntu中开箱即用的版本会导致问题。因此,我们始终建议您手动编译并安装libnice主版本。要构建libnices,您需要Python 3、Meson和忍者:

Git克隆https://gitlab.freedesktop.org/libnice/libnicecd库--前缀=/usr build&;&;ninja-C Build&;&;sudo Ninja-C Build Install。

注意:请确保先删除发行版,否则会导致安装之间的冲突。如果您出于某种原因想要保留这两个文件,对于libnices的自定义安装,您还可以运行pkg-config--cflag--libs nices以确保Janus可以找到正确的安装。如果失败,您可能需要在编译JANU之前设置PKG_CONFIG_PATH环境变量,例如导出PKG_CONFIG_PATH=/path/to/libnice/lib/pkgconfig

如果您对编译示例事件处理程序插件感兴趣,您还需要安装libcurl的开发版本(通常在Fedora/CentOS上安装libcurl-devel,在Ubuntu/Debian上安装libcurl4-openssl-dev)。

如果您的发行版附带了libsrtp 1.5之前的版本,您将必须卸载该版本并手动安装1.5.x、1.6.x或2.x。事实上,众所周知,1.4.x会导致WebRTC出现几个问题。1.5.4版的安装相当简单:

2.x版的说明实际上是相同的。请注意,以下步骤适用于版本2.2.0,但可能有更新的版本可用:

请注意,--enable-openssl部分很重要,因为它是AES-GCM支持所必需的。或者,您也可以传递--enable-nss让libsrtp使用NSS而不是OpenSSL。在启动Janus时配置libsrtp失败可能会导致未定义的引用,因为我们将尝试使用不在那里的方法。

Janus配置脚本自动检测您安装了哪一个,并自动链接到正确的库,如果两个都安装了,则选择2.x。如果您希望选择1.5或1.6(不推荐),请在配置Janus强制其使用旧版本时传递--Disable-libsrtp2。

注意:安装libsrtp时,无论是哪个版本,如果要在x86_64发行版上安装,则可能需要将--libdir=/usr/lib64传递给配置脚本。

如果您想使用BoringSSL而不是OpenSSL(例如,因为您想利用--enable-dtls-settimeout),则必须手动将其安装到特定位置。使用以下步骤:

Git克隆https://boringssl.googlesource.com/boringsslcd钻探错误-I s/&34;-Werror&34;//g CMakeLists.txt#Buildmkdir-p buildcd buildcmake-DCMAKE_CXX_FLAGS=";-lrt";..makecd..#Installsudo mkdir-p/opt/boringsslsudo cp-

一旦安装了库,您就必须向配置脚本传递一个额外的--enable-boringssl标志,因为默认情况下将假设使用OpenSSL来构建Janus。默认情况下,Janus希望BoringSSL安装在/opt/boringssl中--如果它安装在其他位置,请将路径传递给配置脚本,如下所示:--enable-boringssl=/path/to/boringssl如果您正在使用OpenSSL并希望切换到BoringSSL,请确保在使用新的BoringSSL支持进行编译之前,还在Janus文件夹中执行了Make Clean。如果您启用了BoringSSL支持,并且还希望Janus通过更快的重传来检测DTLS超时并对其做出反应,那么也要将--enable-dtls-settimeout传递给配置脚本。

对于数据通道支持所需的usrsctp,它通常在存储库中不可用,因此如果您对它们感兴趣(支持是可选的),则必须手动安装它。这是一个相当简单和标准的过程:

注意:如果要在x86_64发行版上安装,可能需要将--libdir=/usr/lib64传递给配置脚本。

同样的道理也适用于libwebsocket,这是可选的WebSockets支持所需的。如果您有兴趣支持WebSockets来控制Janus,作为默认纯HTTP REST API的替代(或替代),您必须手动安装它:

git克隆https://libwebsockets.org/repo/libwebsocketscd libwebsocket#如果您想要稳定版本的libwebsocket,请取消注释下一行#git checkout v3.2-stablemkdir buildcd build#请参阅https://github.com/meetecho/janus-gateway/issues/732 Re:lws_max_smpcmake-dlws_max_smp=1-DCMAKE_INSTALL_PREFIX:PATH=/USR-DCMAKE_C_FLAGS=#34;-fpic;..make&;&;su.。

Eclipse PAHO MQTT C客户端库也是如此,可选的MQTT支持需要该库。如果您希望集成MQTT频道作为HTTP和/或WebSockets的替代(或替代)来控制Janus,或者作为Janus事件的载体,您可以通过以下步骤安装最新版本:

注意:您可能希望为库设置不同的安装路径,为此,请将最后一个命令替换为';sudo prefix=/usr make install';。

如果您对Nanomsg支持感兴趣,您需要安装相关的C库。它通常作为一个容易安装的软件包出现在几乎所有的存储库中。下面是如何在Ubuntu上安装的示例:

最后,Rabbitmq-c也可以这样说,这是可选的RabbitMQ支持所需的。事实上,可以找到该库的几个不同版本,大多数分发存储库中通常可用的版本并不是关于当前开发状态的最新版本。因此,如果您对集成RabbitMQ队列作为HTTP和/或WebSocket的替代(或替代)来控制Janus感兴趣,您可以通过以下步骤安装最新版本:

git克隆https://github.com/alanxz/rabbitmq-ccd Rabbitmq-cgit子模块initgit子模块更新版本&;&;cd buildcmake-DCMAKE_INSTALL_PREFIX=/usr..make&;&;sudo make install。

注意:如果要在x86_64发行版上安装,可能需要将--libdir=/usr/lib64传递给配置脚本。

总之,如果您也对构建Janus文档感兴趣,您还需要一些额外的工具:

以生成配置文件。之后,照常配置编译,开始整个编译过程:

由于Janus需要核心及其模块的配置文件才能工作,因此您可能还需要安装要使用的默认配置文件,您可以这样做:

请记住仅执行此操作一次,否则后续的make配置将覆盖您可能在此期间修改过的任何配置文件。

如果您已经安装了上述库,但对数据通道、WebSockets、MQTT和/或RabbitMQ不感兴趣,则可以在配置时禁用它们:

几乎所有的外部模块和许多特性都有配置标志,因此您可能需要发出./configure--help来挖掘可用的选项。在您进行配置之后,将始终显示将要构建内容的摘要,允许您仔细检查是否存在需要和不需要的内容。

如果Doxy和raphviz可用,该过程还可以为您构建文档。默认情况下,编译过程不会尝试构建文档,因此,如果您更喜欢构建文档,请使用--enable-docs配置选项:

您还可以有选择地启用/禁用其他功能(例如,您不关心的特定插件,或者是否要构建录音后处理器)。有关详细信息,请在配置时使用--help选项。

虽然上面的大部分说明在MacOS上编译Janus时也可以使用,但在执行此操作时有几个方面需要突出显示。

BREW安装Jansson libniceOpenSSL SRTP libusrsctp libmicrohttpd\libwebsocket cmake rabbitmq-c sofia-sip opus libogg curl glib\libconfig pkg-config gengetopt autoconf auto ake libtool。

不过,关于libwebsocket,请确保安装的版本高于2.4.1,否则您可能会遇到本文中描述的问题。如果BREW没有提供更新版本,您将不得不手动安装库。

请注意,在配置JANUS时,您可能还需要提供自定义前缀和PKG_CONFIG_PATH,例如:

要启动服务器,可以使用janus可执行文件。您可以在配置文件中配置以下几项内容:

<;installdir>;/bin/janus--help用法:Janus[Options].-h,--help print help and exit-V,--version print version and exit-b,--daemon作为后台进程在后台启动Janus(默认值=OFF)-p,--pid-file=path在启动Janus时打开指定的PID文件(默认值=无)-N,--Disable-stdout禁用基于标准输出的日志记录(默认值=OFF)-L,-log-file=path记录到指定的文件。--interface=要使用的IP地址接口(将是公有IP)-P,--plugins-older=path Plugins文件夹(默认值=./plugins)-C,--config=要使用的文件名配置文件-F,--configs-older=路径配置文件文件夹(默认值=./conf)-c,--cert-pem=filename DTLS证书-k,--cert-key=filename DTLS证书密钥-K,--cert纳特背后的贾纳斯。默认值=无)-1,--NAT-1-1=要放入所有候选主机的IP公共IP,假设NAT为1:1(例如,Amazon EC2实例,默认值=无)-2,--使用NAT-1-1时保持私有主机(例如,Amazon EC2实例),DON';t删除专用主机,但保留两者以模拟STUN(默认值=OFF)-E,--ice-enforce-list=列出仅用于ICE收集的接口的逗号分隔列表;支持部分字符串(例如,eth0或eno1,wlan0,默认值=无)-X,--ice-Ignore-List=列出ICE收集要忽略的接口或IP地址的逗号分隔列表;支持部分字符串(例如,vmnet8,192.168.0.1,10.0.0.1或vmnet,192.168.,默认值=VMnet)-6,--ipv6-候选项是否启用ipv6候选(实验)(默认值=OFF)-l,--libnices-debug是否启用libnices调试(默认值=OFF)-f,--FULL-TRICLE执行全涓流而不是半滴流(默认值=OFF)-i,-ICE-LITE是否启用libnices调试。--ice-tcp是否启用ICE-TCP(警告:仅适用于ICE Lite)(默认值=OFF)-q,--min-nack-queue=每个用户用于重新传输的NACK队列的最小大小(以毫秒为单位),与RTT-t无关,--no-media-Timer=在Janus通知您之前不接收任何媒体(音频或视频)的情况下应经过的时间(以秒为单位)-W,--slowlink-Threshold=丢失的数据包数(。Slow Link';发送给用户的Janus API事件-r,--rtp-port-range=用于RTP/RTCP的最小-最大端口范围(仅在安装的libnices支持的情况下才可用)-B,--TWCC-Period=number将TWCC反馈发送回发送者的频率(毫秒),如果协商(默认值=200ms)-n,--server-name=name此Janus实例的公共名称(默认值=MyJanusInstance)-s,--session-timeout=会话数超时。--debug-level=1-7调试/记录级别(0=禁用调试,7=最高调试级别;默认值=4)-D,--debug-timeStamp启用调试/日志记录时间戳(默认值=OFF)-o,--DISABLE-COLOR禁用日志记录中的颜色(默认值=OFF)-M,--DEBUG-LOCKS启用锁/互斥锁的调试(非常详细!)。(默认值=OFF)-a,--apisecret=随机字符串API密码所有请求都需要通过才能被Janus接受(在服务器中包装Janus API请求时很有用,默认情况下为无)-A,--Token-auth为所有请求启用基于令牌的身份验证(默认值=OFF)-e,--Event-Handler启用事件处理程序(默认值=OFF)-w,--no-WebRTC-Encryption禁用WebRTC加密,因此没有DTL或SRTP(仅用于调试!)。(默认值=关闭)。

通过命令行传递的选项优先于配置文件中指定的选项。要启动服务器,只需运行以下命令:

确保您查看了所有的配置文件,以便根据您的特定需求定制Janus:每个配置文件都有文档记录,因此根据您的要求进行更改应该不难。repo附带一些默认设置(假设您在安装服务器后出现问题进行配置),这些默认设置对一般部署很有意义,还包括所有插件的一些示例配置(例如,要侦听的Web服务器、要创建的会议室、要在启动时可用的流式装载点等)。

要测试它是否工作正常,您可以使用html文件夹中随此软件包提供的演示:这些演示与项目网站上在线提供的演示完全相同。只需复制Web服务器中包含的文件,或使用用户空间Web服务器提供html文件夹中的文件(例如,使用php或python),然后在Chrome或Firefox中打开index.html页面。使用不同插件的演示页面列表将可用。如果您更改了任何与传输相关的默认配置,请记住编辑演示JavaScript文件中的传输/端口详细信息。另外,demo引用了预配置的插件资源,所以如果您添加了