go语言sip协议栈 golang quic 协议

RCS系统中使用的SIP(一)现在是2020年5月go语言sip协议栈 , 中移动RCS刚刚推出go语言sip协议栈 , 由于工作原因需要在原开发go语言sip协议栈的SIP协议栈基础上增加对RCS富媒体短信go语言sip协议栈的支持go语言sip协议栈 , 但是这个系统相关的一些业务支持还不清楚,这里做下记录 。
RCS(Rich Communication Suite)也叫增强型富媒体短信,什么概念呢,普通的短信一般只能是文本,RCS增强型富媒体短信有点象微信里的消息,可以是文本,也可以是图片,短视频,交互式查询框,也能够发红包,可以想象一下在不安装任何app的情况下就能实现微信的大部分功能 。
在中移动内部网络中会新增加5GMC消息系统和Maap平台管理模块 。UE与5G消息之间的接口基于GSMA UP2.4系列标准 , 要求平台兼容UP2.3、UP1.0及企标5G消息终端,但新终端均应以UP2.4系列及以上版本作为技术参考 。
信令接口使用SIP协议,涉及到的SIP方法主要有两种:MESSAGE与INVITE,两种方法的消息体格式是统一的 。媒体流的传输使用MSRP,媒体通道的连接信息在信令交互中协商 。
平台稍微有点复杂 , 这些基本地上都由大厂来完成,作为user端,最主要是的是如何完成消息的发送 。上段所描述的MESSAGE与INVITE方法也有这种说法:
CPIM (Common Presence and Instant Messaging)是一种IM通信中的会话描述格式 。CPIM具体的消息格式由RFC3862定义 。
(1)MESSAGE消息分为两部分:消息头部分、消息体部分 。
(2)IMDN做为状态报告,当用户需要状态报告时,在CPIM中携带IMDN头域 。
(3)消息文本内容被封装在CPIM中,并使用base64做为传输编码 。
(4)对于无法在SIP MESSAGE方法内携带的SIP头域,如Contact头,在需要携带时 , 可将此类头域作为参数携带于CPIM消息体内的From头域中 。
注册流程和一般的SIP注册流程相同 , 在参数上略有区别 。需携带sip.instance=UUID,UUID格式根据RFC4412格式,由DMS配置参数获?。栊斩酥С值囊滴衲芰?。
终端支持能力见表:
消息举例(注册请求(AKA鉴权方式)):
SIP协议与Psip协议区别sip是基本协议 , 像Psip,osip等都是sip的一种实现 , 类似与封装了一层,方便使用 。
搭建SIP服务器所需资源要在windows或者linux平台下开发基于SIP的软电话,需要以下软件
服务器端软件:注册多个客户端到服务器上,可以进行通话测试
SIP客户端软件 :主要用于测试,可以对别人已经完成的客户端进行抓包 , 以比对自己程序的发包数据
SIP协议栈: 基于某个现成的SIP协议栈来开发会加快开发进度
RTP栈 :传输语言或者视频数据的协议栈
抓包测试工具: 调试网络程序最有效的办法
以下介绍这些软件主要以开源软件为主
一 服务器端软件
webrtc linphone 到底哪个比较推荐webrtc 。webrtc基本技术已经有go语言sip协议栈了go语言sip协议栈,包括p2p传输,音视频codec,音频处理技术等 。【点击免费试用,0成本启动】
Linphone是老牌go语言sip协议栈的sip,支持平台广泛 windows, mac,ios,android,linux,技术会比较成熟 。但是linphone在Android上go语言sip协议栈的bug有点多 。imsdroid,csipsimple,linphone都想法设法调用webrtc的音频技术,测试过Android端的webrtc内网视频通话效果比较满意 。但是要把webrtc做成一个移动端的IM软件的话还有一些路要走,不过webrtc基本技术都已经有了,包括p2p传输,音视频codec,音频处理技术 。不过其因为目前仅支持VP8的视频编码格式(QQ也是)想做高清视频通话的要注意了 。VP8在移动端的硬件编解码支持的平台没几个(RK可以支持VP8硬件编解码) 。不过webrtc代码里看到可以使用外部codec,这个还是有希望调到H264的 。
想要了解更多关于webrtc的相关信息,推荐咨询ZEGO即构科技 。ZEGO即构科技自主研发的高音质语音视频引擎,能够提供实时清晰的多人语音视频通话 。支持多路视频画面,保障每一路语音视频都清晰流畅提供端到端的SDK、分布式转码、接入鉴权云服务接入、摆脱运维、轻松支撑海量用户运营 。
几种开源SIP协议栈对比几种开源SIP协议栈对比
随着VoIP和NGN技术的发展,H.323时代即将过渡到SIP时代,在H.323的开源协议栈中,Openh323占统治地位,它把一个复杂而又先进的H.323协议栈展现在普通程序员的眼前,为H.323普及立下了汗马功劳 。而然当在SIP时代,则出现了群雄割据的状况,SIP相对于H.323简单,灵活,于是各种协议栈层出不穷,下面将详细对比最具有代表性的5个开源项目:OPAL,VOCAL,sipX,ReSIProcate,oSIP
1、OPAL
OPAL是Open Phone Abstraction Library,是Openh323的下一个版本,它仍然使用了Openh323的体系结构,并在其基础上进行扩展,同时实现了SIP,H.323,但在音频和视频的编码和传输部分有较大改动 。OPAL初衷设计是包含任何电话通信协议,所以其底层进行了高度的抽象化,所以也能够很容易的支持MGCP,PSTN和将来会出现的协议 。不过由于Openh323的最后一个版本还在开发中,所以原本6月发布的OPAL也被推迟,现有的OPAL还非常不完善,BUG也非常多,不过相信以Openh323的开发班底,一定能让OPAL十分优秀 。
CVS : :pserver:anonymous@cvs.sourceforge.net:/cvsroot/openh323/opal
Language : C
VxWorks port : Yes
Win32 port : Yes
Linux port : Yes
Supports RFC 3261 : Yes
Supports RFC 2327 : Yes
Supports RFC 3264 : Yes
Supports RFC 3263 : No
Supports RFC 3515 : Yes
Supports RFC 3262 : No
Supports RFC 3311 : No
TCP : Yes
UDP : Yes
SIZE :8MB
License : MPL
Document : None
Samples : UA,GK
2、VOCAL
VOCAL是vovida.org开发的SIP系统,VOCAL应该是目前功能最完善,使用者最多的开源SIP协议栈了.它不只包括了协议栈,还包括了h323与sip转换网关,对SIP的各种Server的功能支持也非常完善.不过很可惜,不支持windows平台,而且自从vovida被CISCO收购以后就停止了开发,最后的版本是2003年4月的1.5.0 。
CVS : :pserver:anonymous@cvs.vovida.org:/cvsroot/vocal
Language : C
VxWorks port : No
Win32 port : Partial
Linux port : Yes
Supports RFC 3261 : Partial
Supports RFC 2327 : Yes
Supports RFC 3264 :
Supports RFC 3263 :
Supports RFC 3515 : Yes
Supports RFC 3262 :
Supports RFC 3311 :
TCP : Yes
UDP : Yes
SIZE : 6MB
License: Vovida software licencse
Document : Few
Samples : UA,GK,GW
3、sipX
sipX是一个SIP系统,由SIPFoundry开发 。sipX是从reSIProcate分离出来的,sipX除了包括SIP stack外,还包括了sipXphone,sipXproxy,sipXregistry等等...,由它们构成了完整的SIP系统,而且sipx还支持嵌入式系统 , 各个模块可以按需取舍 。不过可惜是几乎没有任何开发文档 。
SVN :
Language : C
VxWorks port : Yes
Win32 port : Yes
Linux port : Yes
Supports RFC 3261 : Yes
Supports RFC 2327 : Yes
Supports RFC 3264 : Yes
Supports RFC 3263 : Yes
Supports RFC 3515 : Yes
Supports RFC 3262 : No
Supports RFC 3311 : No
TCP : Yes
UDP : Yes
SIZE : 4 Mb
License : LGPL
Document : None
Samples : UA,GK,GW
4、ReSIProcate
ReSIProcate同样也是由SIPFoundry开发,ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc3254 , 为了支持最新的rfc3261,ReSIProcate诞生了,但现在,ReSIProcate已经成为一个独立SIP协议栈了,它十分稳定,并且很多商业程序都在使用 。
SVN :
Language : C
VxWorks port : No
Win32 port : Yes
Linux port : Yes
Supports RFC 3261 : Yes
Supports RFC 2327 : Yes
Supports RFC 3264 : Yes
Supports RFC 3263 : Partial
Supports RFC 3515 : Yes
Supports RFC 3262 : No
Supports RFC 3311 : No
TCP : Yes
UDP : Yes
SIZE :2.5 Mb
License : Vovida
Document : Few
Samples : None
SIP的协议比较H.323协议和SIP协议的比较
H.323和SIP分别是通信领域与因特网两大阵营推出的协议 。H.323企图把IP电话当作是众所周知的传统电话,只是传输方式发生了改变,由电路交换变成了分组交换 。而SIP协议侧重于将IP电话作为因特网上的一个应用 , 较其它应用(如FTP,E-mail等)增加了信令和QoS的要求,它们支持的 业务基本相同,也都利用RTP作为媒体传输的协议 。但H.323是一个相对复杂的协议 。
H.323采用基于ASN.1和压缩编码规则的二进制方法表示其消息 。ASN.1通常需要特殊的代码生成器来进行词法和语法分析 。而SIP的基于文本的协议,类似于HTTP 。基于文本的编码意味着头域的含义是一目了然的,如From、To、Subject等域名 。这种分布式、几乎不需要复杂的文档说明的标准规范风格,其优越性已在过去的实践中得到了充分的证明(如今广为流行的邮件协议SMTP就是 这样的一个例子) 。SIP的消息体部份采用SDP进行描述,SDP中的每一项格式为= , 也比较简单 。
在支持会议电话方面,H.323由于由多点控制单元(MCU)集中执行会议控制功能,所有参加会议终端都向MCU发送控制消息,MCU可能会成为颈,特别是对于具有附加特性的大型会议;并且H.323不支持信令的组播功能 , 其单功能限制了可扩展性,降低了可靠性 。而SIP设计上就为分布式的呼叫模型,具有分布式的组播功能 , 其组播功能不仅便于会议控制,而且简化了用户定位、群组邀请等,并且能节约带宽 。但是H.323的集中控制便于计费,对带宽的管理也比较简单、有效 。
H.323中定义了专门的协议用于补充业务,如H.450.1、H.450.2和H.450.3等 。SIP并未专门定义的协议用于此目的,但它很方便地支持补充业务或智能业务 。只要充分利用SIP已定义的头域(如Contact头域),并对SIP进行简单的扩展(如增加几个域),就可以实现这些业务 。例如对于呼叫 转移,只要在BYE请求消息中添加Contact头域,加入意欲转至的第三方地址就可以实现此业务 。对 于通过扩展头域较难实现的一些智能业务 , 可在体系结构中增加业务代理,提供一些补充服务或与 智能网设备的接口 。
在H.323中,呼叫建立过程涉及到第三条信令信致到:RAS信令信道、呼叫信令信道和H.245控制信道 。通过这三条信道的协调才使得H.323的呼叫得以进行,呼叫建立时间很长 。在SIP中,会话请求过程和媒体协商过程等一起进行 。尽管H.323v2已对呼叫建立过程作了改进,但较之SIP只需要1.5个回路时延来建立呼叫,仍是无法相比 。H.323的呼叫信令通道和H.245控制信道需要可靠的传 输协议 。而SIP独立于低层协议 , 一般使用UDP等无法连接的协议,用自己信用层的可靠性机制来保 证消息的可靠传输 。
总之,H.323沿用的是传统的实现电话信令模式,比较成熟 , 已经出现了不少H.323产品 。H.323符合通信领域传统的设计思想,进行集中、层次控制 , 采用H.323协议便于与传统的电话网相连 。SIP协议借鉴了其它因特网的标准和协议的设计思想,在风格上遵循因特网一贯坚持的简练、开放、兼容和可扩展等原则 , 比较简单 。
以下针对它们的应用目标、标准结构、系统组成以及系统实现的难易程度等几个方面进行简单分析 。h.323标准是itu-t组织 1996年在h.320/h.324的基础上建立起来的,其应用目标是,在基ip的网络环境中,实现可靠的面向音视频和数据的实时应用 。如今经过多年的技术发展和标准的不断完善,h.323已经成为被广大的itu成员以及客户所接受的一个成熟标准族 。
sip标准是itef组织在1999年提出的,其应用目标是在基于internet环境,实现数据、音视频实时通讯,特别是通过internet将视频通讯这种应用大众化,引入到千家万户 。由于sip协议相对于h.323而言,相对简单、自由,厂商可以使用相对小的成本就可以构造满足应用的系统 。例如仅仅使用微软基于sip协议的msn,和rtc就可以构造一个简单的,基于internet应用环境的视频通讯环境 。这样网络运营商就可以在尽量少的成本基础上,利用现有的网络资源开展视音频通讯业务的扩展工作 。h.323是一个单一标准,而不是一个关于在ip环境中实时多媒体应用的完整标准族,对于呼叫的建立、管理以及所传输媒体格式等各个方面都有完善而严格的规定 。一个遵守h.323标准建立的多媒体系统,可以保证实现客户稳定完善的多媒体通讯应用 。
sip标准严格意义上讲是一个实现实时多媒体应用的信令标准 , 由于它采用了基于文本的编码方式,使得它在应用上,特别是点到点的应用环境中,具有极大的灵活性、扩充性以及跨平台使用的兼容性,这一点使得运营商可以十分方便的利用现有的网络环境实现大规模的推广应用 。
但是sip协议自身不支持多点的会议功能以及管理和控制功能,而是要依赖于别的协议实现 , 影响了系统的完备性,特别是对于需要多点通讯的要求,应用单纯的sip系统难以实现 。针对这些不足,以radvison公司为首的itu-t sg16小组提出了sip的运用规范,并实现了sip和h.323之间的互通互联,并成功的解决了sip在多点环境下的应用难题 。首先,在系统主要组成成员的功能性方面进行类比,sip的ua等价于一个h.323的终端,实现呼叫的发起和接收,并完成所传输媒体的编解码应用;sip代理服务器、重定向服务器以及注册服务器的功能则等价于h.323的gatekeeper,实现了终端的注册、呼叫地址的解析以及路由 。
其次,虽然在呼叫信令和控制的具体实现上不同,但一个基于sip的呼叫流程与h.323的q931相类似,sip所采用的会话描述协议(sdp)则类似于h.323中的呼叫控制协议h.245 。h.323标准的信令信息是采用符合asn.1 per的二进制编码,并且在连接实现全过程都要严格标准的定义,系统的自由度小 , 如要实现大规模的应用,需要对整个网络的各个环节进行规划 。
sip标准的信令信息是基于文本的 , 采用符合iso10646的utf-8编码,并且全系统的构造结构相对灵活 , 终端和服务器的实现也相对容易成本也较低,从网络运营商的角度考虑,构造一个大规模视频通讯网络,采用sip系统的成本要廉价许多,而且也更具有可实现性 。在这里,我只讨论与java相关的SIP技术 , 其实实现SIP的技术有多种,比如CGI.
java为SIP提供了非常好的支持,JCP(Java Community Process)组织推动开发的一套基于Java技术的API:JAIN API(Java API for Integrated Networks),它包含JAIN SIP(JAIN SIP Lite)和SIP Servlet(JSR 116),SIP for J2ME,三个规范.
以下为与java相关的SIP技术:
JAIN SIP API (JSR 32)
SIP Servlet API (JSR 116)
JAIN SIP Lite (JSR 125)
SIP API for J2ME (JSR 180)
JAIN SIMPLE Presence (JSR 164)
JAIN SIMPLE Instant Messaging (JSR 165)
JAIN SDP (JSR 141) SIP描述协议
Java Media Framework for RTP (J2SE可选包,并非JAIN的)
SIP for J2ME:(JSR 180 )
JAIN SIP API主要提供了J2SE平台的SIP协议栈的实现,主要面向桌面的J2SE应用;SIP Servlet API主要为面向服务端的SIP程序提供了一个API规范,如今实现了该规范的应用服务器有BEA Weblogic SIP Server和Micromethod,还有Jiplet Container,至于如何开发sip servlet,可参见参考资料.SIP for J2ME主要为面向手机的CLDC设备的J2ME客户端.它们之间的差别在参考资料[6]中讲解得很详细.
其它Java相关技术:
jiplet: 一个支持sip servlet的应用服务器
nist-sip SIP Libraries and Tools
JAIN Service Logic Execution Environment (SLEE)
【go语言sip协议栈 golang quic 协议】go语言sip协议栈的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于golang quic 协议、go语言sip协议栈的信息别忘了在本站进行查找喔 。

    推荐阅读