Janus WebRTC Server 部署实战:依赖安装、编译构建与配置启动完全指南

发布时间:2026/9/16 15:00:09
Janus WebRTC Server 部署实战:依赖安装、编译构建与配置启动完全指南 Janus WebRTC Server 部署实战依赖安装、编译构建与配置启动完全指南【免费下载链接】janus-gatewayJanus WebRTC Server项目地址: https://gitcode.com/GitHub_Trending/ja/janus-gatewayJanus 是一款由 Meetecho 设计开发的通用型开源 WebRTC 服务器本仓库当前为multistream 版本1.4.x的主分支。本文以仓库 README.md 为核心骨架结合 configure.ac、conf/janus.jcfg.sample.in 与 Makefile.am 等源码级证据完整讲解 Janus 从依赖安装、编译构建到配置启动的全流程并逐条解析janus可执行文件的所有命令行参数与核心配置文件段落读完即可独立完成一套可运行的 Janus 网关部署。适用前提本版本服务器面向 Linux 系统也可在 MacOS 上编译安装不支持 Windows 原生运行Windows 10 用户需通过Windows Subsystem for Linux (WSL)运行。请勿使用网上非官方的.exe构建版本它们不受官方支持。一、项目与版本概览Janus 的核心设计是通用媒体网关它不实现 SIP、XMPP 等具体信令协议而是通过**插件plugins挂载具体业务能力视频会议、音频桥、SIP 通话、流媒体点播等通过传输层transports**接入 HTTP/WebSockets/MQTT 等不同 API 通道其角色类似 WebRTC 生态中的看门人与媒体路由器。许可证GPL v3见 COPYING当前版本1.4.2JANUS_VERSION1402见 configure.ac主分支为multistream新版旧版0.xlegacy为独立分支二者不兼容官方在线演示与文档见项目官网社区论坛用于提问讨论Bug 提交走 GitHub Issues提交前请阅读 .github/CONTRIBUTING.md 的规范从 configure.ac 可以看到Janus 编译时默认启用-Wall -Wextra -fstack-protector-all等严格的编译告警与安全加固选项代码质量门槛较高。二、依赖清单必需、可选与插件级2.1 必需依赖编译 Janus 核心依赖库说明版本要求GLib核心基础库GObject 体系由glib-2.0 2.34限定见 configure.aczlib压缩/解压支持无特殊要求pkg-config依赖发现与编译参数注入无特殊要求JanssonJSON 解析/生成Janus API 与信令的核心载体jansson 2.5libconfig.jcfg配置文件解析无特殊要求libniceICE 候选收集与连接建立建议 v0.1.16推荐 v0.1.18OpenSSLTLS/DTLS 加密至少 v1.0.1elibsrtpSRTP 媒体加密建议至少 v2.x详见下文版本坑2.2 可选依赖按功能裁剪usrsctp仅当需要 Data Channels数据通道时libmicrohttpd≥ v0.9.59仅当需要 Janus API 的 RESTHTTP支持时libwebsockets建议 ≥ v4.x仅当需要 WebSockets 方式访问 Janus API 时cmake仅当需要编译 WebSockets 和/或 BoringSSL 时二者构建依赖 cmakerabbitmq-c仅当需要 RabbitMQ 承载 Janus API 或事件events时paho.mqtt.c仅当需要 MQTT 承载 Janus API 或事件时nanomsg仅当需要 Nanomsg 承载 Janus API 时libcurl仅当需要 TURN REST API 支持时2.3 插件级依赖按需安装Sofia-SIP仅 SIP 插件src/plugins/janus_sip.c需要libopus仅 AudioBridge 插件需要libogg录音后处理recordings post-processor需要AudioBridge 与 Streaming 插件可选依赖libcurlStreaming 插件的 RTSP 支持、示例事件处理器sampleevh需要Lua仅 Lua 插件src/plugins/janus_lua.c需要Duktape仅 Duktape 插件src/plugins/janus_duktape.c需要三、各发行版一键安装依赖3.1 Fedora / CentOSyum/dnfyum install libmicrohttpd-devel jansson-devel \ openssl-devel libsrtp-devel sofia-sip-devel glib2-devel \ opus-devel libogg-devel libcurl-devel pkgconfig \ libconfig-devel libtool autoconf automake在 CentOS 上若提示找不到包可能需要先yum install epel-release。3.2 Ubuntu / Debianaptapt install libmicrohttpd-dev libjansson-dev \ libssl-dev libsofia-sip-ua-dev libglib2.0-dev \ libopus-dev libogg-dev libcurl4-openssl-dev liblua5.3-dev \ libconfig-dev pkg-config libtool automake注意部分发行版不自带 libopus需到 opus-codec.org 手动安装。3.3 文档构建工具可选若需要生成 Doxygen 文档Fedorayum install doxygen graphvizUbuntu/Debianaptitude install doxygen graphviz对应 configure 选项为--enable-docs见 configure.ac。四、需要手动编译的关键库含避坑指南4.1 libnice强烈建议手动编译Ubuntu 自带的 libnice 版本被官方明确指出known to cause problems因此始终推荐手动编译安装 master 版本。需要 Python 3、Meson 与 Ninjagit clone https://gitlab.freedesktop.org/libnice/libnice cd libnice meson --prefix/usr build ninja -C build sudo ninja -C build install建议先卸载发行版自带的 libnice避免两套安装冲突若想保留多版本可用pkg-config --cflags --libs nice验证 Janus 能找到正确安装失败时在编译 Janus 前设置export PKG_CONFIG_PATH/path/to/libnice/lib/pkgconfig。4.2 libsrtp2.x 是推荐版本发行版自带的 pre-1.5 版本必须卸载1.4.x 与 WebRTC 存在已知问题。1.5.x 可用但官方推荐 2.x。以 2.2.0 为例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 make shared_library sudo make install--enable-openssl很重要是 AES-GCM 支持的前提也可用--enable-nss让 libsrtp 改用 NSS。两者都不配会导致 Janus 启动时出现 undefined referencesJanus 的 configure 会自动探测并优先链接 2.x若要强制旧版编译 Janus 时加--disable-libsrtp2不推荐x86_64 发行版安装 libsrtp 时可能需要追加--libdir/usr/lib64。4.3 BoringSSL替代 OpenSSL可选需要--enable-dtls-settimeout更快的 DTLS 超时重传时可换用 BoringSSLgit clone https://boringssl.googlesource.com/boringssl cd boringssl # 去掉会报错的 -Werror sed -i s/ -Werror//g CMakeLists.txt mkdir -p build cd build cmake -DCMAKE_INSTALL_PREFIX/opt/boringssl -DCMAKE_CXX_FLAGS-lrt .. make sudo make install随后编译 Janus 时追加--enable-boringssl默认安装位置为/opt/boringssl换位置则写--enable-boringssl/path/to/boringssl。从 OpenSSL 切换过来前务必先make clean。若还要更快的 DTLS 超时重传再加上--enable-dtls-settimeout。使用较新的 BoringSSL 版本构建 Janus 时make命令可能需要加CCLDc。4.4 usrsctpData Channels 需要git clone https://github.com/sctplab/usrsctp cd usrsctp ./bootstrap ./configure --prefix/usr --disable-programs --disable-inet --disable-inet6 make sudo make installx86_64 发行版同样可能需要--libdir/usr/lib64。4.5 libwebsocketsWebSockets API 支持git clone https://libwebsockets.org/repo/libwebsockets cd libwebsockets # 需要稳定版则取消下一行注释 # git checkout v4.3-stable mkdir build cd build cmake -DLWS_MAX_SMP1 -DLWS_WITHOUT_EXTENSIONS0 -DCMAKE_INSTALL_PREFIX:PATH/usr -DCMAKE_C_FLAGS-fpic .. make sudo make install若 libwebsockets.org 不可达可将克隆地址换成https://github.com/warmcat/libwebsockets.git。4.6 Paho MQTT C 客户端MQTT API/事件支持git clone https://github.com/eclipse/paho.mqtt.c.git cd paho.mqtt.c make sudo make install自定义安装路径时将最后一条命令改为sudo prefix/usr make install。4.7 Nanomsg 与 rabbitmq-cNanomsg 一般在发行版仓库即有包Ubuntu 示例aptitude install libnanomsg-devrabbitmq-c 仓库自带的版本普遍偏旧推荐从源码装最新版git clone https://github.com/alanxz/rabbitmq-c cd rabbitmq-c git submodule init git submodule update mkdir build cd build cmake -DCMAKE_INSTALL_PREFIX/usr .. make sudo make installx86_64 发行版同样可能需要--libdir/usr/lib64。五、编译与安装5.1 标准流程git clone https://github.com/meetecho/janus-gateway.git cd janus-gateway sh autogen.sh # 生成 configure 脚本 ./configure --prefix/opt/janus make make install make configs # 安装默认配置文件只需执行一次make configs会从各.jcfg.sample.in模板生成实际配置文件见 Makefile.am 中的sed替换规则把confdir、plugindir、transportdir等占位符替换为真实安装路径重要提醒make configs只应执行一次重复执行会覆盖你之后修改过的所有配置文件。5.2 按需裁剪编译不需要 Data Channels、WebSockets、MQTT、RabbitMQ 时可显式禁用./configure --disable-websockets --disable-data-channels --disable-rabbitmq --disable-mqtt这些开关与 configure.ac 及 configure.ac 中AC_ARG_ENABLE的定义一一对应若缺少对应库又未禁用configure 会直接报错退出例如AC_MSG_ERROR([libusrsctp not found. ... use --disable-data-channels])见 configure.ac。几乎所有外部模块与功能都有独立开关务必先./configure --help查看全部选项。每次 configure 结束后都会输出构建摘要方便核对需要的在、不需要的没在。额外功能示例构建文档./configure --enable-docs需 Doxygen Graphviz见 configure.ac 的检查逻辑还可选择性禁用个别插件、录音后处理等特性。5.3 在其他平台编译FreeBSD通过 pkg 安装依赖pkg install libsrtp2 libusrsctp jansson libnice libmicrohttpd libwebsockets curl opus sofia-sip libogg libconfig libtool gmake autoconf autoconf-wrapper glib由于是 GNU makefile须用gmake替代make默认 prefix 为/usr/local./configure可直接运行。注意configure.ac默认链接 base 中的 OpenSSL想换 ports 里的 OpenSSL 需自行修改configure.ac另外因 issue #2051FreeBSD 上 Streaming 插件的 rtp_forward 目前仅支持向 IPv6 推流。MacOS可用 brew 安装大部分依赖brew install jansson libnice openssl srtp libusrsctp libmicrohttpd \ libwebsockets cmake rabbitmq-c sofia-sip opus libogg curl glib \ libconfig pkg-config autoconf automake libtoollibwebsockets 版本必须高于 2.4.1通常还需要自定义 prefix 与PKG_CONFIG_PATH./configure --prefix/usr/local/janus PKG_CONFIG_PATH/usr/local/opt/openssl/lib/pkgconfig其余步骤与 Linux 完全一致。六、启动服务器与完整命令行参数启动方式installdir/bin/janus服务器启动后会读取配置文件默认installdir/etc/janus/janus.jcfg。命令行参数的优先级高于配置文件。下面为janus --help输出的完整参数表逐条继承自 README.md默认值与含义均以仓库为准短参数长参数含义-h--help打印帮助并退出-V--version打印版本并退出-b--daemon以后台守护进程方式启动默认 off-p--pid-filepath启动时写入指定 PID 文件默认 none-N--disable-stdout禁用基于 stdout 的日志默认 off-L--log-filepath日志写入指定文件默认仅 stdout-H--cwd-path守护进程的工作目录默认 /-i--interfaceipaddress指定对外网卡/IP将写入 SDP-P--plugins-folderpath插件目录默认 ./plugins-C--configfilename使用的配置文件-F--configs-folderpath配置文件目录默认 ./conf-c--cert-pemfilenameDTLS 证书-k--cert-keyfilenameDTLS 证书私钥-K--cert-pwdtextDTLS 证书私钥口令如需-S--stun-serveraddress:portSTUN 服务器(:端口)用于 NAT 穿透默认 none-1--nat-1-1ip1:1 NAT 场景如 Amazon EC2下放入所有 host 候选的公网 IP默认 none-2--keep-private-host使用 nat-1-1 时保留私有 host两者并存以模拟 STUN默认 off-E--ice-enforce-listlist仅使用指定网卡收集 ICE 候选逗号分隔、支持部分匹配如 eth0 或 eno1,wlan0默认 none-X--ice-ignore-listlist收集 ICE 候选时忽略的网卡/IP支持部分匹配如 vmnet8,192.168.0.1,10.0.0.1默认 vmnet-6--ipv6-candidates是否启用 IPv6 候选实验性默认 off-O--ipv6-link-local是否同时收集 IPv6 link-local 候选默认 off-f--full-trickle使用 full-trickle 而非 half-trickle默认 off-I--ice-lite是否启用 ICE Lite 模式默认 off-T--ice-tcp是否启用 ICE-TCP警告仅与 ICE Lite 配合默认 off-Q--min-nack-queuenumber每个用户 NACK 重传队列的最小时长ms不受 RTT 影响-t--no-media-timernumber多少秒未收到媒体音/视频后通知默认 1s0 禁用-W--slowlink-thresholdnumber每秒丢失多少包触发 slowlink 事件默认 0即禁用-r--rtp-port-rangemin-maxRTP/RTCP 端口范围仅当 libnice 支持时可用-B--twcc-periodnumber协商后向发送方回送 TWCC 反馈的周期默认 200ms-n--server-namename本实例的公开名称默认 MyJanusInstance-s--session-timeoutnumber会话超时秒数默认 60-m--reclaim-session-timeoutnumber传输层断开后会话可被回收的超时秒数默认 0-d--debug-level1-7调试/日志级别0禁用7最大默认 4-D--debug-timestamps日志启用时间戳默认 off-o--disable-colors日志禁用颜色默认 off-M--debug-locks启用锁/互斥量调试非常啰嗦默认 off-a--apisecretrandomstring所有 Janus API 请求必须携带的 API 密钥适合服务端包装场景默认无-A--token-auth为所有请求启用基于 token 的认证默认 off-e--event-handlers启用事件处理器默认 off-w--no-webrtc-encryption禁用 WebRTC 加密无 DTLS/SRTP仅调试用默认 off七、核心配置文件深度解读安装后所有配置文件位于installdir/etc/janus/下仓库内的模板见 conf/ 目录janus.jcfg.sample.in为核心模板各插件/传输/事件处理器均有独立.jcfg.sample。每个配置文件都带详细注释官方默认值面向通用部署。7.1 general 段日志、守护进程与安全general: { configs_folder confdir # 配置文件目录 plugins_folder plugindir # 插件目录 transports_folder transportdir # 传输层目录 events_folder eventdir # 事件处理器目录 loggers_folder loggerdir # 外部日志器目录 #log_to_stdout false # 是否写 stdout默认 true #log_to_file /path/to/janus.log # 是否使用日志文件 #log_rotate_sig SIGUSR1 # 日志轮转信号SIGUSR1 或 SIGHUP默认不启用 debug_level 4 # 日志级别 0-7 #debug_timestamps true # 每行日志带时间戳 #debug_colors false # 禁用日志颜色 #log_prefix [janus] # 日志前缀支持 \x1b[32m... 终端颜色 #daemonize true # 是否以守护进程运行 #pid_file /path/to/janus.pid # PID 文件 #check_openfiles_limit 500000 # 启动时校验文件描述符上限不足则立即退出防崩溃 #api_secret janusrocks # Janus API 全局密钥 #token_auth true # 基于 token 的认证 #token_auth_secret janus # HMAC 签名 token配合 token_auth #token_auth_hash sha1 # 签名哈希sha1默认或 sha256 admin_secret janusoverlord # Admin API 密钥仅启用 admin API 时用到 #interface 1.2.3.4 # 对外网卡写入 SDP #server_name MyJanusInstance # 实例公开名称 #session_timeout 60 # 会话超时秒0禁用不推荐会有孤儿会话 #candidates_timeout 45 # 待定 trickle 候选保留时长秒0 为非法值会被忽略 #reclaim_session_timeout 0 # 传输层消失后会话等待回收时间秒 #recordings_tmp_ext tmp # 录音先存 .mjr.tmp结束后才改 .mjr #event_loops 8 # 限制媒体事件循环线程数默认每 handle 独立线程 #task_pool_size 100 # 插件消息处理线程池上限0不限默认 #opaqueid_in_api true # 把 opaque ID 也回传到 Janus API 响应 #hide_dependencies true # info 端点隐藏依赖库版本信息 #exit_on_dl_error false # 共享库加载失败时立即退出 #no_webrtc_encryption true # 仅调试 RTP/RTCP 用禁用加密 protected_folders [ ... ] # 禁止写入文件的目录清单保护 .mjr 录音与 pcap 抓包落盘路径 }protected_folders默认保护/bin /boot /dev /etc /lib /usr /var及/opt/janus安装目录等系统关键路径见 conf/janus.jcfg.sample.in防止通过 API 把文件写到危险位置。7.2 certificates 段DTLS 证书certificates: { #cert_pem /path/to/certificate.pem #cert_key /path/to/key.pem #cert_pwd secretpassphrase #dtls_accept_selfsigned false # 强制校验对端证书非必要勿动 #dtls_ciphers DEFAULT:!NULL:!aNULL:!SHA256:!SHA384:!aECDH:!AESGCMAES256:!aPSK #rsa_private_key false # 默认生成 NIST P-256 证书置 true 改用 RSA }不配置证书时Janus 会自动生成自签名证书——对当前 WebRTC DTLS 用途足够浏览器端的 Identity Provider 尚未标准化。7.3 media 段媒体面调优media: { #ipv6 true #ipv6_linklocal true #min_nack_queue 500 # NACK 队列最小长度ms默认 200不受 RTT 影响 #rtp_port_range 20000-40000 # RTP/RTCP 端口范围 #dtls_mtu 1200 # DTLS 起始 MTU默认 1200会自适应 #no_media_timer 1 # 无媒体通知阈值秒0 禁用 #slowlink_threshold 4 # 触发 slowlink 事件的丢包阈值默认 0 禁用 #twcc_period 100 # TWCC 反馈周期ms默认 200 #dtls_timeout 500 # BoringSSL 下 DTLS 重传间隔ms #nack_optimizations true # 发关键帧时清空 NACK 缓冲默认关边缘场景可能适得其反 #dscp 46 # DSCP 报文标记不懂别动 #rtp_port_range_perhandle_override false # 允许单个 handle 在全局范围内限定子端口区间 }7.4 nat 段NAT 穿透关键配置nat: { #stun_server stun.voip.eutelia.it #stun_port 3478 #full_trickle true # 默认 half-trickle #ice_nomination regular # regular 或 aggressivelibnice ≥ 0.1.15 可用 #ice_consent_freshness true # 定期连通性检查libnice ≥ 0.1.19 #ice_keepalive_conncheck true # 用连通性检查代替 keep-alive #ice_lite true #ice_tcp true # 注意建议同时启用 ICE Lite #hangup_on_failed true # ICE 失败立即挂断默认有宽限期 #ignore_mdns true # 丢弃 .local (mDNS) 候选 #nat_1_1_mapping 1.2.3.4 # 1:1 NAT如 EC2重写 host 候选为公网 IP多公网 IP 用逗号分隔 #keep_private_host true # 保留私有 IP 两者并存 #turn_server myturnserver.com # 仅当 Janus 自身在严格防火墙后时才配置 #turn_port 3478 #turn_type udp # udp/tcp/tls #turn_user myuser #turn_pwd mypassword #turn_rest_api http://yourbackend.com/path/to/api # TURN REST API 动态获取 #turn_rest_api_key anyapikeyyoumayhaveset #turn_rest_api_method GET # GET 或 POST #turn_rest_api_timeout 10 # 秒默认 10最小 1 #allow_force_relay true # 允许应用强制走 TURN默认不允许 #ice_enforce_list eth0 # 仅用指定网卡收集候选支持部分匹配 ice_ignore_list vmnet # 默认忽略 vmnet 开头的虚拟网卡 #ignore_unreachable_ice_server true # STUN/TURN 不可达仍启动不推荐尤其云端 }关键误区澄清nat段的 TURN 配置只针对Janus 自己例如 Janus 位于家庭内网受限防火墙后的场景绝不等于给浏览器用户配 TURN——浏览器侧的 TURN 必须由客户端信令下发如 WebRTC PC 的 iceServers。若混淆两者用户将无法借由 Janus 提供的 TURN 穿越自身 NAT。7.5 plugins / transports / loggers / events 段plugins: { #disable libjanus_echotest.so,libjanus_recordplay.so # 按 .so 文件名禁用插件 } transports: { #disable libjanus_rabbitmq.so } loggers: { #disable libjanus_jsonlog.so } events: { #broadcast true # 默认关闭开启后核心与插件事件才广播 #combine_media_stats true # 媒体统计合并为单条事件 #disable libjanus_sampleevh.so #stats_period 5 # 媒体统计推送周期秒0 禁用统计事件 }从 Makefile.am 可确认插件的真实加载目录约定plugindir$(libdir)/janus/plugins、transportdir$(libdir)/janus/transports、eventdir$(libdir)/janus/events、loggerdir$(libdir)/janus/loggersdisable中填写的正是这些目录下的.so文件名。八、验证部署内置演示页面仓库html目录自带与官网一致的全套插件演示页面html/demos/index.html 列出 echotest、videoroom、audiobridge、streaming、sip、textroom 等全部插件 demo。验证步骤将 html/ 目录文件复制到任意 Web 服务器或用用户态服务器直接托管该目录php、python 均可浏览器Chrome 或 Firefox打开index.html若修改过传输层/端口相关配置记得同步修改各 demo 的 janus.js 中的传输与端口信息demo 默认引用的是预配置的插件资源如已建好的视频会议室、流媒体挂载点若你新增资源需相应调整 demo 页面。另外Janus 官方还提供基于 test/echo.py 与 test/test_aiortc.sh 的 aiortc 自动化测试test/README.md 有使用说明可作为网关连通性的二次验证手段。九、常见问题速查libsrtp 版本过旧1.4.x 与 WebRTC 不兼容务必升级到 1.5.x/1.6.x/2.x推荐 2.xlibnice 异常优先手动编译 master 版避免使用 Ubuntu 自带版本conflict 时检查pkg-config nice与PKG_CONFIG_PATHmake configs覆盖配置该命令会重新生成所有.jcfg修改过配置后请勿重复执行文件描述符不足导致崩溃用check_openfiles_limit在启动期主动校验参照官方 FAQ 中关于 ulimit 的说明提前配置Windows 用户走 WSL勿使用任何非官方.exe构建进程数/线程数调优event_loops限制媒体处理线程数、task_pool_size限制插件消息线程池二者均有 CPU 资源与媒体实时性的权衡不了解时保持默认。结语从本文可以看到Janus 的部署链路并不复杂真正的功夫在于依赖选型与网络配置libsrtp 2.x、手动编译的 libnice、按需裁剪的传输层与插件再加上janus.jcfg中对 NAT/媒体/安全段的精细调优即可支撑起多插件、多传输通道的 WebRTC 媒体网关。本文所有命令与参数均以当前仓库1.4.2multistream 主分支的 README.md、configure.ac 与 conf/janus.jcfg.sample.in 为准可直接对照实操更细粒度的模块级配置可继续查阅 conf/ 下各插件的.jcfg.sample模板。【免费下载链接】janus-gatewayJanus WebRTC Server项目地址: https://gitcode.com/GitHub_Trending/ja/janus-gateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询