在实时音视频与VoIP系统里,SIP(Session Initiation Protocol,会话发起协议)几乎是绕不开的“信令中枢”:注册、呼叫建立、修改会话、挂断等流程都由它来编排。也正因为SIP处在系统最核心的位置,工程实践里很少有人从零开始实现一套完整协议栈或服务器——成熟的开源项目不仅覆盖了大量RFC细节与互通性“坑点”,还在NAT穿透、安全、并发性能、可扩展模块等方面积累了多年经验,直接决定了系统能否稳定上线与长期演进。

       本文将系统梳理主流SIP开源项目的定位与能力边界;在逐一介绍它们的功能特点与典型应用场景的同时,文章会给出项目的编译与运行步骤、关键配置项。

一、kamailio

1、简介:

        Kamailio 是一个开源的 SIP 信令服务器实现。SIP 是由 IETF 制定的开放标准协议,其核心规范文档为RFC3261。

        Kamailio SIP 服务器专为可扩展性而设计,主要面向大型部署(例如拥有庞大用户群或处理大量呼叫的 IP 电话运营商或网络运营商),但也可用于企业或个人用途,提供 VoIP、即时消息和状态显示功能。Kamailio 以其灵活性、稳健性、强大的安全性和丰富的功能而闻名

2、功能描述

强大且高性能的 SIP (RFC3261) 服务器版本

  • 注册服务器

  • 位置服务器

  • 代理服务器

  • SIP应用服务器

  • 重定向服务器

灵活性

  • 占用空间小——适用于嵌入式设备——二进制文件体积小,可通过模块添加/移除功能。

  • 即插即用模块接口——无需修改核心代码即可添加新的扩展功能,从而确保核心组件的稳定性。

  • 模块化架构——核心、内部库和用于扩展服务器功能的模块接口

  • 令人印象深刻的扩展库——Kamailio 源代码树中总共包含了超过 150 个模块。

SIP路由功能

  • 无状态和事务性有状态 SIP 代理处理

  • 串行和并行分叉

  • 支持 SIP 和 RTP 流量的 NAT 穿越

  • 支持多种分布式算法的负载均衡和故障转移

  • 灵活的最低成本路线

  • 路由故障转移

  • 高可用性 (HA) 复制

传输层

  • 支持通过 UDP、TCP、TLS 和 SCTP 进行通信

  • IPv4 和 IPv6

  • 传输层网关(IPv4 到 IPv6、UDP 到 TLS 等)

  • SCTP多宿主和多流

  • WebRTC 的 WebSocket

异步处理

  • 异步 TCP 处理

  • 异步SIP消息处理

  • 异步进程间消息队列通信系统

  • 分布式消息队列

安全通信

  • 摘要式 SIP 用户身份验证

  • 通过 ACL 或组成员身份进行授权

  • IP和网络认证

  • TLS对SIP信令的支持

  • 透明处理 SRTP 以实现安全音频

  • TLS 域名扩展支持

  • 针对数据库(MySQL、PostgreSQL、UnixODBC、BerkeleyDB、Oracle、文本文件)、RADIUS 和 DIAMETER 的身份验证和授权

3、源码:https://github.com/kamailio/kamailiohttps://github.com/kamailio/kamailio

4、编译:

       直接进入到源码目录下执行make,编译比较简单,这里不再说明。需要注意的是,make时指定安装路径:make prefix=/usr/local install

二、OpenSIPS

1、简介:

       OpenSIPS 是一个采用 GPL 许可的 SIP 服务器实现。它起源于 Fokus Fraunhofer SIP Express Router (SER) 项目的一个分支。OpenSIPS 希望成为一个更加开放的项目,不仅体现在许可方面,也体现在项目管理方面,尤其是在外部贡献方面。 OpenSIPS 旨在克服当前 SER 项目的开发滞后问题,从而缩短新增功能的发布周期。OpenSIPS 是由 OpenSIPS Solutions( http://www.opensips-solutions.com/)维护的项目 ,其团队成员包括 SER 项目的核心和主要开发人员。

2、功能描述:

      主要功能包括:网络桥接、NAT穿越、协议转化、洪水检测、IP过滤。

3、源码:https://opensips.org/pub/opensips/latest/https://opensips.org/pub/opensips/latest/

4、文档:https://www.opensips.org/Documentation/Manual-4-0https://www.opensips.org/Documentation/Manual-4-0

5、编译安装

# 安装必要的库
apt-get install libncurses5-dev
# 可视化编译配置,选择需要支持的功能
make menuconfig
# 编译
make all
# 安装
make install
​
#运行
sudo /usr/local/sbin/opensips -f /usr/local/etc/opensips/opensips.cfg

6、配置类型

Residential Script

  • ENABLE_TCP:OpenSIPS 将监听 TCP 以接收 SIP 请求。

  • ENABLE_TLS:OpenSIPS将监听TCP以接收SIP请求。

  • USE_ALIASES:OpenSIPS 将允许 SIP 用户使用别名。

  • USE_AUTH:OpenSIPS 将对注册和邀请请求进行身份验证

  • USE_DBACC:OpenSIPS 会将所有呼叫的 ACC 条目保存到数据库中

  • USE_DBUSRLOC:OpenSIPS 会将用户位置条目持久存储在数据库中。

  • USE_DIALOG:OpenSIPS 将跟踪活动对话

  • USE_MULTIDOMAIN:OpenSIPS 将处理多个域的用户。

  • USE_NAT:OpenSIPS 将尝试通过修复 SIP 消息和启用 RTPProxy 来应对 NAT。

  • USE_PRESENCE:OpenSIPS 将充当 Presence 服务器

  • USE_DIALPLAN:OpenSIPS 将使用拨号方案来转换本地号码

  • VM_DIVERSION:OpenSIPS 会将无法接通用户的 VM 呼叫重定向。

  • HAVE_INBOUND_PSTN:OpenSIPS 将接受来自 PSTN 网关的呼叫(使用静态 IP 认证)

  • HAVE_OUTBOUND_PSTN:OpenSIPS 将向 PSTN 网关(具有静态 IP 定义)发送数字拨号。

  • USE_DR_PSTN:OpenSIPS 将使用动态路由支持 (LCR) 进行 PSTN 互连。

Trunking Script

  • ENABLE_TCP:OpenSIPS 将监听 TCP 以接收 SIP 请求。

  • ENABLE_TLS:OpenSIPS将监听TCP以接收SIP请求。

  • USE_DBACC:OpenSIPS 会将所有呼叫的 ACC 条目保存到数据库中

  • USE_DIALPLAN:OpenSIPS 将使用拨号方案来转换本地号码

  • USE_DIALOG:OpenSIPS 将跟踪活动对话

  • DO_CALL_LIMITATION:OpenSIPS 将限制每个中继的并行呼叫数量。

Load-Balancer Script

  • ENABLE_TCP:OpenSIPS 将监听 TCP 以接收 SIP 请求。

  • ENABLE_TLS:OpenSIPS将监听TCP以接收SIP请求。

  • USE_DBACC:OpenSIPS 会将所有呼叫的 ACC 条目保存到数据库中

  • USE_DISPATCHER:OpenSIPS 将使用 DISPATCHER 而不是负载均衡器来分配流量。

  • DISABLE_PINGING:OpenSIPS 将不会 ping 所有目标地址(否则,当检测到连接失败时,它会进行 ping 操作)。

OpenSIPs控制面板

三、WVP-GB28181-Pro

1、简介:

      WEB视频平台是一个基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台,负责实现核心信令和设备管理后台部分,支持NAT,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将其他不带国标功能的基站/直播流/直播推流转发到国标平台。

2、应用场景

  • 支持浏览器无插件播放网络头视频。 支持国标设备(地铁、平台、NVR等)设备接入 支持rtsp、rtmp,直播设备设备接入,充分利旧。 支持国标级联。多平台级联。跨网视频预览。 支持跨网网闸平台互联。

3、源码:https://gitee.com/pan648540858/wvp-GB28181-pro.githttps://gitee.com/pan648540858/wvp-GB28181-pro.git

4、文档:https://doc.wvp-pro.cn/#/_content/introduction/compilehttps://doc.wvp-pro.cn/#/_content/introduction/compile

5、编译:

# 源码下载
git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
 cd wvp-GB28181-pro/web/
# 源码编译
npm --registry=https://registry.npmmirror.com install
npm npm run build:prod
​
cd wvp-GB28181-pro
mvn package
​
cd wvp-GB28181-pro
mvn package -P war

四、ZLMediaKit

1、简介

       基于C++11的高性能运营级流媒体服务框架

2、功能特点:

  • 基于C++11开发,避免使用裸虾,代码稳定性可靠,性能相当。

  • 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV/GB28181/HTTP-TS/WebSocket-TS/HTTP-fMP4/WebSocket-fMP4/MP4/WebRTC),支持协议互转。

  • 使用多路复用/多线程/异步网络IO模式开发,并发性能提升,支持海量客户端连接。

  • 代码经过长期大量的稳定性、性能测试,已经在线上验证已久。

  • 支持linux、macos、ios、android、windows全平台。

  • 支持x86、arm、risc-v、mips、龙芯、申威等指令集平台。

  • 支持画面秒开、极低延迟( 500毫秒内,最低可达100毫秒)。

  • 提供完善的标准C API,可以用作SDK,或提供其他语言调用。

  • 提供完整的MediaServer服务器,可以免开发直接部署为服务器。

  • 提供完善的restful api以及web hook,支持丰富的业务逻辑。

  • 打通了视频监控协议栈与直播协议栈,对RTSP/RTMP的支持非常完善。

  • 功能完善,支持集群、互转协议、插入推拉流、先播后推、断连续推等功能。

  • 最大性能,单机10W级别播放器,100Gb/s级别io带宽能力。

  • 极致体验,独家特性

  • 谁在使用 zlmediakit?

  • 全面支持ipv6网络

  • 支持多轨道模式(一个流中多个视频/音频)

  • 全协议支持H264/H265/AAC/G711/OPUS/MP3/VP8/VP9/AV1,部分支持JPEG/H266/ADPCM/SVAC/G722/G723/G729

3、源码:https://github.com/ZLMediaKit/ZLMediaKithttps://github.com/ZLMediaKit/ZLMediaKit

4、文档:

https://github.com/ZLMediaKit/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8Bhttps://github.com/ZLMediaKit/ZLMediaKit/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

5、编译运行

### 1、编译
# 国内用户推荐从同步镜像网站gitee下载 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
# 千万不要忘记执行这句命令
git submodule update --init
​
### 2、运行
cd ZLMediaKit/release/linux/Debug
#通过-h可以了解启动参数
./MediaServer -h
#以守护进程模式启动
./MediaServer -d &

五、FreeSWITCH

1、简介:

       FreeSWITCH是一个开源的电话软交换平台,支持实时音视频通信及会议,支持SIP及WebRTC等多种通信协议。其主要开发语言是C,某些模块使用了C++,以MPL1.1发布。

2、源码:https://github.com/signalwire/freeswitchhttps://github.com/signalwire/freeswitch

3、编译

# --prefix指定安装目录:--prefix=/home/test/freeswitch-1.10.8.-release/build_bin
./configure --prefix=/home/test/freeswitch-1.10.8.-release/build_bin LDFLAGS="$LDFLAGS -L/home/test/freeswitch-1.10.8.-release/spandsp-master/build/lib -L/home/test/freeswitch-1.10.8.-release/sofia-sip-master/build/lib -L/home/test/freeswitch-1.10.8.-release/speex-Speex-1.2.1/build/include/lib -L/home/test/freeswitch-1.10.8.-release/speexdsp-SpeexDSP-1.2.1/build/lib" CPPFLAGS="$CFLAGS -Werror=deprecated-declarations -I/home/test/freeswitch-1.10.8.-release/spandsp-master/build/include -I/home/test/freeswitch-1.10.8.-release/sofia-sip-master/build/include -I/home/test/freeswitch-1.10.8.-release/speex-Speex-1.2.1/build/include/ -I/home/test/freeswitch-1.10.8.-release/speexdsp-SpeexDSP-1.2.1/build/include" PKG_CONFIG_PATH=/home/test/freeswitch-1.10.8.-release/spandsp-master/build/lib/pkgconfig/:/home/test/freeswitch-1.10.8.-release/sofia-sip-master/build/lib/pkgconfig/:/home/test/freeswitch-1.10.8.-release/speex-Speex-1.2.1/build/lib/pkgconfig:/home/test/freeswitch-1.10.8.-release/speexdsp-SpeexDSP-1.2.1/build/lib/pkgconfig:/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH --disable-core-libedit-support --disable-libvpx --disable-libyuv --with-openssl --disable-mod_av

      FreeSWITCH编译相对复杂,目前没有编译通过!!!

六、Flexisip

1、简介:

       Flexisip 是一个全面、模块化且可扩展的 SIP 服务器套件,采用 C++17 编写

2、功能特点:

  • 代理服务器:作为路由SIP消息的中央枢纽。 推送通知服务:即使应用已启动,仍向移动设备发送SIP通知(通话中、消息) 没有在运行。

  • 在线服务器:允许用户查看他人的在线状态及其通话可用性。

  • 会议服务器:支持组队语音和视频通话。

  • 背靠背用户代理(B2BUA)服务器:支持呼叫者身份转换、媒体级转码和SIP 集群。

  • RegEvent 服务器:通知分层域名用户注册情况。

3、源码:https://github.com/BelledonneCommunications/flexisiphttps://github.com/BelledonneCommunications/flexisip

4、编译:

编译环境依赖:

  • C 和 C++ 编译器。只要GCC 和 Clang 版本足够新,能够编译 C++17 代码,就都受支持。

  • CMake >= 3.13

  • make or Ninja

  • Python >= 3

  • Doxygen

mkdir ./build
cmake -S . -B ./build
make -C ./build -j<njobs>

七、Asterisk

1、简介:

      Asterisk 是一个用于构建通信应用程序的开源框架

2、源码:https://github.com/asterisk/asteriskhttps://github.com/asterisk/asterisk

3、编译:

./configure
make menuselect
make
make install
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐