由于工作,需要自己开发一个SIP软交换。严格意义上已不是什么sip proxy、sip registar、sip redirect、B2BUA的哪一个了。其实国内做这个的,大家都差不多是一个server,搞定了注册、路由、认证、计费的功能。
认证、计费、路由这些都是自定义业务,每个项目的需求都不太一样,需要自己基于数据库来做。这部分的代码也比较容易搞定,就是些sql语句罢了。
比较麻烦的是sip本身的一些处理,如SIP消息解析、事务状态机、会话管理等,严格参照RFC3261来实现不太可取,工作量太大。
在当下开源项目这么多的情况下,选择一个开源的协议栈作为开发的基础,应该是个不错的选择。未来降低复杂性,优先选择仅支持SIP的协议栈,方便对代码的掌握。
当下比较纯粹的sip协议栈,当属osip。但osip本身看上去效率不高是事实,代码看上去非常的简单,虽然没有什么文档支持,但很容易看懂。估计实际用起来会有不少地方需要优化的,搞到最后和自己写一个也差不多了。
根据我个人开发softphone的经验,发现pjsip非常不错。系统设计优良、效率很高,对标准的支持也很完善。根据2年来的跟踪情况看,社区开发也一直都很活跃,但由于系统的结构化做的非常好,主设计一直都很稳定。而且pjsip社区一直都注重文档工作,相关文档和代码里的注释也是非常的多。
个人倾向基于pjsip里的sip协议部分来开发sip软交换,不过在开发softphone的过程中发现,pjsip从头到尾都是为softphone而设计。担心作为服务器的协议栈,会有意想不到的限制。已经发现代码里有很多XX_MAX宏定义,定义了诸如最大transaction、最大dialog等。
借此宝地发文,寄望于我辈同道中人,能有幸一起讨论分析。
分享到:
相关推荐
本文将深入探讨一个名为“peers-0.1.1_sip_sipstack_”的项目,这是一个利用SIP(Session Initiation Protocol)协议栈构建的聊天室应用程序。该程序包含客户端和服务器端的完整源代码,为开发者提供了一个学习和...
这个API为开发者提供了一套完整的工具集,用于构建SIP服务器、代理服务器以及客户端应用程序。Java SIP API包括了SIP消息的创建、发送和接收,以及会话管理等功能。 1. **SIP消息结构** SIP消息由两部分组成:请求...
这个API提供了一系列接口和类,允许开发者创建SIP应用程序,处理SIP消息,注册到SIP服务器,以及管理会话。 JAIN SIP API的主要组件包括: 1. SipFactory:创建SIP堆栈和其他SIP对象。 2. SipStack:管理SIP会话和...
用户需要先运行"server.java"的main方法启动SIP服务器,然后运行"client.java"的main方法启动SIP客户端,模拟实际的通信场景。 在文件列表中,我们可以看到以下几个关键文件和目录: 1. "textclientdebug.log" 和 ...
聊天室服务器通常由SIP服务器和应用程序逻辑两部分组成。SIP服务器处理SIP消息的路由和注册,而应用程序逻辑则负责处理用户交互和会话管理。在本项目中,服务器可能使用SipProvider来监听SIP消息,并通过...
标题中的“sipstack-example-0.1.0.zip”似乎是一个软件项目的压缩包,很可能包含了某个版本(0.1.0)的示例代码或应用,专注于SIP(Session Initiation Protocol)协议的处理。SIP是一种用于控制多媒体通信会话(如...
这个简单的JAVA-JAIN-SIP客户端示例展示了如何利用该库与SIP服务器进行交互,实现登录和发起呼叫的基本功能。SIP是一种互联网协议,常用于多媒体通信,如VoIP电话、视频会议等。 首先,我们要理解JAIN SIP(Java ...
SIP(Session Initiation Protocol)协议是一种用于控制多媒体通信会话(如语音和视频通话)的信令协议。在IT领域,尤其是VoIP(Voice over Internet Protocol)开发中,理解和实现SIP协议栈是非常关键的技能。本篇...
- **设置SIP参数**:配置SIP服务器的地址、端口等信息。 - **创建SIP终端**:使用`SipProvider`来创建一个SIP终端,该终端负责发送和接收SIP消息。 - **注册到SIP服务器**:使用`SipRegister`类完成向SIP服务器的...
3. **代理服务器**(Proxy Server):转发SIP消息,可以进行路由选择、认证、计费等功能。 4. **重定向服务器**(Redirect Server):收到请求后,返回一个新的联系地址,而不是直接处理请求。 在飞信的源代码中,...
1. **初始化SIP Stack**:使用`javax.sip.SipFactory`创建SIP堆栈实例,然后设置参数,如监听端口、协议类型(UDP/TCP/TLS)等。 2. **创建SIP会话**:通过SIP堆栈创建`javax.sip.SipContext`对象,它代表了SIP会话...
标题“about sip”和描述“sip 001”表明我们关注的是SIP(Session Initiation Protocol)协议,这是一个用于建立、修改和终止多媒体通信会话的协议,常见于VoIP(Voice over Internet Protocol)系统中。...
4. **接收呼叫**:监听并处理来自SIP服务器的INVITE请求,如果接受呼叫,返回200 OK响应。 5. **媒体协商**:在呼叫建立后,双方交换SDP(Session Description Protocol)信息,确定音频或视频编码、带宽等参数。 6....
SIP(Session Initiation Protocol)协议是一种用于控制多媒体通信会话的信令协议,广泛应用于VoIP、视频会议、即时消息等领域。Java是SIP应用开发的常用编程语言,提供了丰富的库支持,使得开发者能够方便地实现SIP...
SIP(Session Initiation Protocol)协议是一种用于控制多媒体通信会话(如语音和视频通话)的信令协议。它在互联网电话、视频会议、即时消息等领域广泛应用。在Java中实现SIP协议,可以帮助开发者构建自己的VoIP...
Radvision SIP 协议栈是一款功能强大、高度可定制的软件解决方案,用于实现 SIP(Session Initiation Protocol)协议,该协议在 VoIP(Voice over Internet Protocol)通信中扮演着核心角色。 #### Session ...
`SipProvider`将关联到我们的监听点,并通过注册到SIP服务器来参与会话。 在实际开发中,`SipLayer`类可能还需要实现`processRequest`和`processResponse`方法,这些方法是`SipListener`接口的一部分,用于处理SIP...
SIP(Session Initiation Protocol)是一种用于控制多媒体通信会话(如语音和视频通话)的信令协议。在Java环境中,开发人员可以利用SIP API来实现基于SIP的应用程序,这使得Java成为构建VoIP(Voice over IP)系统...
1. `SipProvider`:这是与SIP服务器交互的接口,负责发送和接收SIP消息。 2. `SipListener`:监听SIP事件的接口,如接收到的SIP请求或响应,以及连接状态的改变。 3. `SipSession`:表示会话状态的接口,包含会话的...