首页> 中国专利> RTP媒体流穿越方法、SIP服务器和SIP通信系统

RTP媒体流穿越方法、SIP服务器和SIP通信系统

摘要

本发明公开了一种RTP媒体流穿越方法、SIP服务器和SIP通信系统,涉及通信领域,用于解决当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备的问题。RTP媒体流穿越方法包括:所述SIP服务器接收主叫用户代理和被叫用户代理的SIP注册报文或注册保活报文,获取公网IP地址和公网端口号;根据主叫用户代理和被叫用户代理的公网IP地址和公网端口号向所述主叫用户代理和被叫用户代理发送报文以等待进行确认;判定用户代理类型;如果二者均为媒体代理类型,则将RTP媒体信息直接透传给另一方;如果有一方为媒体中继类型,则进行替换并将替换后的SIP报文转发给另一方。本发明的实施例应用于SIP通信。

著录项

  • 公开/公告号CN106131084A

    专利类型发明专利

  • 公开/公告日2016-11-16

    原文格式PDF

  • 申请/专利权人 迈普通信技术股份有限公司;

    申请/专利号CN201610770605.8

  • 发明设计人 卢立铭;

    申请日2016-08-30

  • 分类号H04L29/06;H04L29/12;

  • 代理机构北京中博世达专利商标代理有限公司;

  • 代理人袁方

  • 地址 610041 四川省成都市高新技术开发区九兴大道16号

  • 入库时间 2023-06-19 00:56:20

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-07-02

    授权

    授权

  • 2016-12-14

    实质审查的生效 IPC(主分类):H04L29/06 申请日:20160830

    实质审查的生效

  • 2016-11-16

    公开

    公开

说明书

技术领域

本发明涉及通信领域,尤其涉及一种RTP媒体流穿越方法、SIP服务器和SIP通信系统。

背景技术

SIP(英文全称:Session Initiation Protocol,中文全称:会话初始协议)正逐渐成为VOIP(英文全称:Voice Over Internet Protocol,中文全称:IP语音)通信的主流协议。但是SIP通信过程需要结合其他协议来实现,目前经常与SIP共同使用的一种协议是RTP(英文全称:Real-time Transport Protocol,中文全称:实时传输协议),具体的,可以通过RTP协议传输媒体流。

在VOIP组网环境中,通常包括SIP服务器以及互相进行VOIP业务的SIP用户代理,并且SIP用户代理与SIP服务器之间通过NAT设备进行隔离,使得SIP服务器位于公网中,SIP用户代理位于私网中。当SIP用户代理之间传输RTP媒体流信息时,在SIP报文中携带的是SIP用户代理的私网IP地址,或者当公网中存在STUN(英文全称:Simple Traversal of UDP over NATs,中文全称:网络地址转换的用户数据报协议简单穿越)服务器时,SIP用户代理可以从STUN服务器获取自己的公网IP地址并且在SIP报文中携带自己的公网IP地址,但是由于SIP报文为应用层数据,NAT设备无法对其进行解释以进行公网IP地址与私网IP地址的转换,因此,根据现有SIP协议,当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备。

发明内容

本发明的实施例提供一种一种RTP媒体流穿越方法、SIP服务器和SIP通信系统,用于解决当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

第一方面,提供了一种RTP媒体流穿越方法,该方法包括:

所述SIP服务器接收所述主叫用户代理的SIP注册报文或注册保活报文,并根据所述主叫用户代理的SIP注册报文或注册保活报文获取所述主叫用户代理的公网IP地址和公网端口号,接收所述被叫用户代理的SIP注册报文或注册保活报文,并根据所述被叫用户代理的SIP注册报文或注册保活报文获取所述被叫用户代理的公网IP地址和公网端口号;

所述SIP服务器根据所述主叫用户代理的公网IP地址和公网端口号向所述主叫用户代理发送报文以等待所述主叫用户代理进行确认,并且根据所述被叫用户代理的公网IP地址和公网端口号向所述被叫用户代理发送报文以等待所述被叫用户代理进行确认;

所述SIP服务器判定所述主叫用户代理为媒体中继类型或媒体代理类型,并且判定所述被叫用户代理为所述媒体中继类型或所述媒体代理类型;

如果所述主叫用户代理以及所述被叫用户代理均为所述媒体代理类型,则所述SIP服务器将来自所述主叫用户代理或所述被叫用户代理中一方的SIP报文中的RTP媒体信息直接透传给另一方,以便于所述主叫用户代理与所述被叫用户代理根据对方的公网IP地址直接传输RTP媒体流,其中,所述RTP媒体信息包括IP地址和端口号;

如果所述主叫用户代理或者所述被叫用户代理中的至少一方为所述媒体中继类型,则将来自所述主叫用户代理或所述被叫用户代理中一方的SIP报文中的RTP媒体信息中的IP地址替换为所述SIP服务器的IP地址,将所述SIP报文中的RTP媒体信息中的端口号替换为所述SIP服务器的端口,然后将替换后的SIP报文转发给所述主叫用户代理或所述被叫用户代理中的另一方,以便于所述主叫用户代理与所述被叫用户代理通过所述SIP服务器转发RTP媒体流。

第二方面,提供了一种SIP服务器,该SIP服务器包括:

接收单元,用于接收所述主叫用户代理的SIP注册报文或注册保活报文,接收所述被叫用户代理的SIP注册报文或注册保活报文;

获取单元,用于根据所述接收单元接收到的所述主叫用户代理的SIP注册报文或注册保活报文获取所述主叫用户代理的公网IP地址和公网端口号,根据所述接收单元接收到的所述被叫用户代理的SIP注册报文或注册保活报文获取所述被叫用户代理的公网IP地址和公网端口号;

发送单元,用于根据所述获取单元获取的所述主叫用户代理的公网IP地址和公网端口号向所述主叫用户代理发送报文以等待所述主叫用户代理进行确认,并且根据所述获取单元1032获取的所述被叫用户代理的公网IP地址和公网端口号向所述被叫用户代理发送报文以等待所述被叫用户代理进行确认;

判定单元,用于判定所述主叫用户代理为媒体中继类型或媒体代理类型,并且判定所述被叫用户代理为所述媒体中继类型或所述媒体代理类型;

所述发送单元,还用于如果所述判定单元判定所述主叫用户代理以及所述被叫用户代理均为所述媒体代理类型,则将来自所述主叫用户代理或所述被叫用户代理中一方的SIP报文中的RTP媒体信息直接透传给另一方,以便于所述主叫用户代理与所述被叫用户代理根据对方的公网IP地址直接传输RTP媒体流,其中,所述RTP媒体信息包括IP地址和端口号;

替换单元,用于如果所述判定单元判定所述主叫用户代理或者所述被叫用户代理中的至少一方为所述媒体中继类型,则将来自所述主叫用户代理或所述被叫用户代理中一方的SIP报文中的RTP媒体信息中的IP地址替换为所述SIP服务器的IP地址,将所述SIP报文中的RTP媒体信息中的端口号替换为所述SIP服务器的端口;

所述发送单元,还用于将所述替换单元替换后的SIP报文转发给所述主叫用户代理或所述被叫用户代理中的另一方,以便于所述主叫用户代理与所述被叫用户代理通过所述SIP服务器转发RTP媒体流。

第三方面,提供了一种SIP通信系统,包括如第二方面所述的SIP服务器。

本发明的实施例提供的RTP媒体流穿越方法、SIP服务器和SIP通信系统,通过利用报文测试用户代理的公网IP地址是否可达来判断根据公网IP地址能否穿越NAT设备,从而将用户代理分为媒体中继类型或媒体代理类型,对于通信双方的用户代理均为根据公网IP地址能够穿越NAT设备的媒体代理类型时,可以根据对方的公网IP地址直接传输RTP媒体流,对于通信双方的用户代理中有一方为根据公网IP地址不可穿越NAT设备的媒体中继类型时,由用户代理将RTP媒体流发送至SIP服务器,由SIP服务器作为转发中继转发给另一方,解决了当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明的实施例提供的SIP通信系统的结构示意图;

图2为本发明的实施例提供的一种RTP媒体流穿越方法的流程示意图;

图3为本发明的实施例提供的另一种RTP媒体流穿越方法的流程示意图;

图4为本发明的实施例提供的SIP通信系统的IP地址和端口号的示意图;

图5为本发明的实施例提供的媒体中继类型时的RTP媒体流的示意图;

图6为本发明的实施例提供的一种SIP服务器的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供了一种SIP通信系统,参照图1中所示,包括:主叫用户代理101、第一NAT设备102、SIP服务器103、第二NAT设备104、被叫用户代理105和STUN服务器106。主叫用户代理101通过SIP服务器103向被叫用户代理105发起VOIP呼叫,需要说明的是,被叫用户代理105与主叫用户代理101的角色可以互换,即被叫用户代理105也可以主动向主叫用户代理101发起VOIP呼叫。主叫用户代理101通过第一NAT设备102被隔离在私网中,被叫用户代理105通过第二NAT设备104被隔离在私网中。SIP服务器103、STUN服务器106均位于公网中。主叫用户代理101通过STUN服务器106获取主叫用户代理101在公网中的IP地址,被叫用户代理105通过STUN服务器106获取被叫用户代理105在公网中的IP地址,需要说明的是,本发明不仅限于通过STUN服务器获取公网IP地址这一种方式,采用其他方式使得用户代理能够获取自己的公网IP地址同样适用于本发明。

实施例1、

本发明提供了一种RTP媒体流穿越方法,应用于图1中所示的SIP通信系统,参照图2中所示,该方法包括:

S101、SIP服务器接收主叫用户代理的SIP注册报文或注册保活报文,并根据主叫用户代理的SIP注册报文或注册保活报文获取主叫用户代理的公网IP地址和公网端口号,接收被叫用户代理的SIP注册报文或注册保活报文,并根据被叫用户代理的SIP注册报文或注册保活报文获取被叫用户代理的公网IP地址和公网端口号。

需要说明的是,主叫用户代理和被叫用户代理向SIP服务器发送的SIP注册报文或注册保活报文中需要携带自己的公网IP地址和公网端口号,而不是自己的私网IP地址和私网端口号。主叫用户代理和被叫用户代理获取自己的公网IP地址可以选择如上所述的通过STUN服务器的方式或其他方式,本发明不在此进行限定。

S102、SIP服务器根据主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送报文以等待主叫用户代理进行确认,并且根据被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送报文以等待被叫用户代理进行确认。

具体的,SIP服务器接收所述主叫用户代理的第一UDP(英文全称:user datagram protocol,中文全称:用户数据报协议)请求报文。

SIP服务器根据主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送第一响应报文以等待主叫用户代理对第一响应报文进行确认,其中,第一响应报文用于对主叫用户代理的第一UDP请求报文进行响应。

SIP服务器接收被叫用户代理的第二UDP请求报文。

SIP服务器根据被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送第二响应报文以等待被叫用户代理对第二响应报文进行确认,其中,第二响应报文用于对被叫用户代理的第二UDP请求报文进行响应。

S103、SIP服务器判定主叫用户代理为媒体中继类型或媒体代理类型,并且判定被叫用户代理为媒体中继类型或媒体代理类型。

如果在预定时间内能接收到主叫用户代理或被叫用户代理的确认,则说明根据用户代理的公网IP地址和公网端口号即可直接穿越NAT设备,否则则说明根据用户代理的公网地址和公网端口号无法直接穿越NAT设备。

具体的,在SIP服务器向主叫用户代理发送第一响应报文之后,SIP服务器启动第一定时器。

如果在第一定时器超时之后,SIP服务器仍未接收到主叫用户代理针对第一响应报文所发送的第一确认报文,则重新根据主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送第一响应报文并重新启动第一定时器,如果在第一定时器超时之前,SIP服务器接收到第一确认报文,则将主叫用户代理标记为媒体代理类型。

如果在第一定时器再次超时之后,SIP服务器仍未接收到第一确认报文,则将主叫用户代理标记为媒体中继类型,如果在第一定时器再次超时之前,SIP服务器接收到第一确认报文,则将主叫用户代理标记为媒体代理类型。

在SIP服务器向被叫用户代理发送第二响应报文之后,SIP服务器启动第二定时器。

如果在第二定时器超时之后,SIP服务器仍未接收到被叫用户代理针对第二响应报文所发送的第二确认报文,则重新根据被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送第二响应报文并重新启动第二定时器,如果在第二定时器超时之前,SIP服务器接收到第二确认报文,则将被叫用户代理标记为媒体代理类型。

如果在第二定时器再次超时之后,SIP服务器仍未接收到第二确认报文,则将被叫用户代理标记为媒体中继类型,如果在第二定时器再次超时之前,SIP服务器接收到第二确认报文,则将被叫用户代理标记为媒体代理类型。

此处所述的媒体代理类型是指通过用户代理的公网IP地址和端口能够通过NAT设备到达对应用户代理,因此用户代理之间可以通过对方的公网IP地址和端口直接发送报文;而媒体中继类型是指通过用户代理的公网IP地址和端口能够不通过NAT设备到达对应用户代理,因此用户代理之间必须采用中继转发方式进行通信。

S104、如果主叫用户代理以及被叫用户代理均为媒体代理类型,则SIP服务器将来自主叫用户代理或被叫用户代理中一方的SIP报文中的RTP媒体信息直接透传给另一方,以便于主叫用户代理与被叫用户代理根据对方的公网IP地址直接传输RTP媒体流,其中,RTP媒体信息包括IP地址和端口号。

具体的,SIP服务器将来自主叫用户代理的INVITE呼叫请求报文直接透传给被叫用户代理,使得被叫用户代理从INVITE呼叫请求报文获得主叫用户代理的公网IP地址。

SIP服务器将来自被叫用户代理的200OK呼叫应答成功报文直接透传给主叫用户代理,使得主叫用户代理从200OK呼叫应答成功报文获得被叫用户代理的公网IP地址。

由于媒体代理类型即是指通过用户代理的公网IP地址和端口能够通过NAT设备到达对应用户代理,因此主叫用户代理根据与被叫用户代理可以根据对方的公网IP地址直接传输RTP媒体流,实现NAT设备的穿越。

S105、如果主叫用户代理或者被叫用户代理中的至少一方为媒体中继类型,则将来自主叫用户代理或被叫用户代理中一方的SIP报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将SIP报文中的RTP媒体信息中的端口号替换为SIP服务器的端口,然后将替换后的SIP报文转发给主叫用户代理或被叫用户代理中的另一方,以便于主叫用户代理与被叫用户代理通过SIP服务器转发RTP媒体流。

具体的,SIP服务器为主叫用户代理分配第一RTP媒体端点,为被叫用户代理分配第二RTP媒体端点,其中,第一RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器的IP地址,第一RTP媒体端点的RTP媒体信息中的端口号为第一空闲端口号,第二RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器的IP地址,第二RTP媒体端点的RTP媒体信息中的端口号为第二空闲端口号。此处所述的第一空闲端口号和第二空闲端口号为SIP服务器上空闲的端口的端口号。

将来自主叫用户代理的INVITE呼叫请求报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将INVITE呼叫请求报文中的RTP媒体信息中的端口号替换为第一RTP媒体端点的端口号,然后将INVITE呼叫请求报文发送给被叫用户代理。

将来自被叫用户代理的200OK呼叫应答成功报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将200OK呼叫应答成功报文中的RTP媒体信息中的端口号替换为第二RTP媒体端点的端口号,然后将200OK呼叫应答成功报文发送给主叫用户代理。

这样,以后当主叫用户代理向被叫用户代理发送RTP媒体流报文时首先发送给SIP服务器的第一RTP媒体端点,然后通过SIP服务器的第二RTP媒体端点转发给被叫用户代理;当被叫用户代理向主叫用户代理发送RTP媒体流报文时首先发送给SIP服务器的第二RTP媒体端点,然后通过SIP服务器的第一RTP媒体端点转发给主叫用户代理。通过SIP服务作为中继转发服务器转发RTP媒体流来实现主叫用户代理与被叫用户代理之间RTP媒体流的发送和接收。

需要说明的是,为方便描述起见,本发明将主叫用户代理和被叫用户代理与SIP服务器之间类似的通信过程整合在步骤S101至步骤S105中,本领域的技术人员可以理解,主叫用户代理与SIP服务器的通信过程以及被叫用户代理与SIP服务器的通信过程这二者之间并不存在先后执行顺序,二者是单独执行的过程。

本发明提供的RTP媒体流穿越方法,通过利用报文测试用户代理的公网IP地址是否可达来判断根据公网IP地址能否穿越NAT设备,从而将用户代理分为媒体中继类型或媒体代理类型,对于通信双方的用户代理均为根据公网IP地址能够穿越NAT设备的媒体代理类型时,可以根据对方的公网IP地址直接传输RTP媒体流,对于通信双方的用户代理中有一方为根据公网IP地址不可穿越NAT设备的媒体中继类型时,由用户代理将RTP媒体流发送至SIP服务器,由SIP服务器作为转发中继转发给另一方,解决了当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备的问题。

实施例2、

本发明提供了另一种RTP媒体流穿越方法,应用于图1中所示的SIP通信系统,参照图3中所示,该方法包括步骤S201-S228,其中,步骤S201-S215是判定用户代理类型的流程,步骤S216-S220是主叫用户代理101和被叫用户代理102都是媒体代理类型时的处理转发流程,步骤S221-S228为主叫用户代理101和被叫用户代理102中的至少一方是媒体中继类型时的转发流程。

S201、SIP服务器103创建UDP服务端(英文简称:US)和UDP客户端(英文简称:UC)。

SIP服务器103位于公网中,参照图4中所示,假设SIP服务器103的公网IP地址为130.255.3.101。可以通过公网IP地址或公网端口号来创建UDP服务端和UDP客户端。示例性的,SIP服务器103监听5066端口以创建UDP服务端,绑定5068端口以创建UDP客户端。或者,为SIP服务器103配置两个公网IP地址a地址和b地址,监听a地址以创建UDP服务端,绑定b地址以创建UDP客户端。

S202、主叫用户代理101启动后按照SIP协议标准流程向SIP服务器103发送注册报文(REGISTER报文)或注册保活报文以进行注册,其中,主叫用户代理101的注册报文或注册保活报文中包含主叫用户代理101的公网IP地址和公网端口号。

主叫用户代理101可以通过第一STUN服务器获取主叫用户代理101的公网IP地址。参照图4中所示,假设主叫用户代理101的私网IP地址为192.168.1.1,私网端口号为32768,经过第一NAT设备转换后的公网IP地址为130.255.3.168,公网端口号(相当于第一NAT设备的公网端口号)为18900。

S203、主叫用户代理101注册成功后,向SIP服务器103的UDP服务端发送第一UDP请求报文,第一UDP请求报文的格式如下:

Method:REQUEST

Call-ID:cala985a21534f77

其中,Method字段表示此报文类型为请求报文(REQUEST)。Call-ID字段为SIP注册报文中携带的Call-ID字段,能够在SIP服务器103上全局唯一标识此用户代理,不同的用户代理Call-ID不同,同一个用户代理重新注册也会产生新的Call-ID。

S204、SIP服务器103的UDP服务端收到第一UDP请求报文后,用UDP客户端根据主叫用户代理101的公网IP地址和公网端口号向主叫用户代理101发送第一响应报文以等待主叫用户代理101对第一响应报文进行确认,启动第一定时器T1,其中,T1的超时时间可配置,默认为2秒,第一响应报文用于对主叫用户代理101的第一UDP请求报文进行响应,第一响应报文的格式如下:

Method:REQUEST

Call-ID:cala985a21534f77

其中,Method字段表示此报文类型为响应报文(RESPONSE)。Call-ID字段同步骤S203中所述的Call-ID,在此不再赘述。

S205、主叫用户代理101收到第一响应报文后,发送第一确认报文(ACK报文),第一确认报文的格式如下:

Method:ACK

Call-ID:ca1a985a21534f77

其中,Method字段表示此报文类型为响应确认报文(ACK)。Call-ID字段同步骤S203中所述的Call-ID,在此不再赘述。

S206、如果在第一定时器T1超时之前,SIP服务器103收到第一确认报文,则标记主叫用户代理101为媒体代理类型。如果在第一定时器T1超时之后,SIP服务器103仍未接收到第一确认报文,则重新根据主叫用户代理101的公网IP地址和公网端口号向主叫用户代理101发送第一响应报文并重新启动第一定时器T1。

S207、如果在第一定时器T1再次超时之前,SIP服务器103接收到第一确认报文,则将主叫用户代理101标记为媒体代理类型。如果在第一定时器T1再次超时之后,SIP服务器103仍未接收到第一确认报文,则将主叫用户代理101标记为媒体中继类型。

S208、被叫用户代理102启动后按照SIP协议标准流程向SIP服务器103发送注册报文(REGISTER报文)或注册保活报文以进行注册,其中,被叫用户代理102的注册报文或注册保活报文中包含被叫用户代理102的公网IP地址和公网端口号。

被叫用户代理102可以通过第二STUN服务器获取被叫用户代理102的公网IP地址。参照图4中所示,假设被叫用户代理102的私网IP地址为10.0.0.1,私网端口号为32768,经过第二NAT设备转换后的公网IP地址为130.255.3.169,公网端口号(相当于第二NAT设备的公网端口号)为18902。

S209、被叫用户代理102注册成功后,向SIP服务器103的UDP服务端发送第二UDP请求报文,第二UDP请求报文的格式如下:

Method:REQUEST

Call-ID:cala1112111

其中,Method字段和Call-ID字段同步骤S203中所述的Method字段和Call-ID字段相同,在此不再赘述。

S210、SIP服务器103的UDP服务端收到第二UDP请求报文后,用UDP客户端根据被叫用户代理102的公网IP地址和公网端口号向被叫用户代理102发送第二响应报文以等待被叫用户代理102对第二响应报文进行确认,启动第二定时器T2,其中,T2的超时时间可配置,默认为2秒,第二响应报文用于对被叫用户代理102的第二UDP请求报文进行响应,第二响应报文的格式如下:

Method:REQUEST

Call-ID:cala1112111

其中,Method字段和Call-ID字段同步骤S204中所述的Method字段和Call-ID字段相同,在此不再赘述。

S211、被叫用户代理102收到第二响应报文后,发送第二确认报文(ACK报文),第二确认报文的格式如下:

Method:ACK

Call-ID:cala1112111

其中,Method字段和Call-ID字段同步骤S205中所述的Method字段和Call-ID字段相同,在此不再赘述。

S212、如果在第二定时器T2超时之前,SIP服务器103收到第二确认报文,则标记被叫用户代理102为媒体代理类型。如果在第二定时器T1超时之后,SIP服务器103仍未接收到第二确认报文,则重新根据被叫用户代理102的公网IP地址和公网端口号向被叫用户代理102发送第二响应报文并重新启动第二定时器T2。

S213、如果在第二定时器T2再次超时之前,SIP服务器103接收到第二确认报文,则将被叫用户代理102标记为媒体代理类型。如果在第二定时器T2再次超时之后,SIP服务器103仍未接收到第二确认报文,则将被叫用户代理102标记为媒体中继类型。

S214、主叫用户代理101向被叫用户代理102发起呼叫,根据主叫用户代理101的公网IP地址和公网端口号构建INVITE呼叫请求报文并发送给SIP服务器103,报文中携带的RTP媒体信息主要包括:

c=IN IP4 130.255.3.168

m=audio 18900RTP/AVP 0 101

从报文中c字段可以看出INVITE呼叫请求报文中携带的RTP媒体地址为主叫用户代理101的公网IP地址130.255.3.168,从报文中m字段可以看出公网端口号为18900。

S215、SIP服务器103收到INVITE呼叫请求报文后,根据其中的呼叫控制信息进行路由找到被叫用户代理102的注册信息,此时再通过主叫用户代理101的INVITE呼叫请求报文中的FROM(SIP报文的头域,标识源用户代理信息)头域找到主叫用户代理101的注册信息。根据主叫用户代理101和被叫用户代理102的注册信息确认主叫用户代理101和被叫用户代理102的媒体类型(媒体中继类型或媒体代理类型)。

S216、如果主叫用户代理101和被叫用户代理102都是媒体代理类型,则SIP服务器103将来自主叫用户代理101的INVITE呼叫请求报文直接透传给被叫用户代理102,使得被叫用户代理102从INVITE呼叫请求报文获得主叫用户代理101的公网IP地址。

S217、被叫用户代理102收到INVITE呼叫请求报文后,根据被叫用户代理102的公网IP地址和公网端口号构建200OK呼叫应答成功报文并发送给SIP服务器103。

具体的SIP服务器103向被叫用户代理102发送的INVITE呼叫请求报文中的RTP媒体信息直接拷贝主叫用户代理101的INVITE呼叫请求报文中的内容,报文中携带的RTP媒体信息主要包括:

c=IN IP4 130.255.3.169

m=audio 18902RTP/AVP 0 101

从报文中c字段可以看出200OK呼叫应答成功报文中携带的RTP媒体地址被叫用户代理102的公IP网地址130.255.3.169,从报文中m字段可以看出公网端口号为18902。

S218、SIP服务器103收到被叫用户代理102的应答报文后,将来自被叫用户代理102的200OK呼叫应答成功报文直接透传给主叫用户代理101,使得主叫用户代理101从200OK呼叫应答成功报文获得被叫用户代理102的公网IP地址。

具体的,SIP服务器103也产生一个200OK呼叫应答成功报文发送给主叫用户代理101,此报文中的RTP媒体信息拷贝自SIP服务器103从被叫用户代理102接收到的200OK呼叫应答成功报文。

S219、主叫用户代理101收到200OK呼叫应答成功报文后响应ACK SIP报文(应答确认报文),同时向200OK呼叫应答成功报文中的RTP媒体地址(公网IP地址)发送RTP媒体流。

S220、被叫用户代理102收到ACK SIP报文后开始向之前收到的INVITE报文中的RTP媒体地址(公网IP地址)发送RTP媒体流,此时主叫用户代理101与被叫用户代理102之间点对点的呼叫媒体通道建立。

S221、如果主叫用户代理101和被叫用户代理102中的至少一方是媒体中继类型,SIP服务器103为主叫用户代理101分配第一RTP媒体端点,为被叫用户代理102分配第二RTP媒体端点,其中,第一RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器103的IP地址,第一RTP媒体端点的RTP媒体信息中的公网端口号为第一空闲端口号,第二RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器103的IP地址,第二RTP媒体端点的RTP媒体信息中的端口号为第二空闲端口号。此处所述的第一空闲端口号和第二空闲端口号为SIP服务器103上空闲的端口的端口号。

示例性的,参照图5中所示,假设SIP服务器103分配的第一RTP媒体端点为:130.255.3.101:32768,第二RTP媒体端点为130.255.3.101:33770,其中,130.255.3.101为SIP服务器103的公网IP地址,32768为第一空闲端口号,33770为第二空闲端口号。

S222、SIP服务器103将来自主叫用户代理101的INVITE呼叫请求报文中的RTP媒体信息中的IP地址替换为SIP服务器103的IP地址,将INVITE呼叫请求报文中的RTP媒体信息中的端口号替换为第一RTP媒体端点的端口号,然后将INVITE呼叫请求报文发送给被叫用户代理102。

S223、被叫用户代理102收到INVITE呼叫请求报文后,根据被叫用户代理102的公网IP地址和公网端口号构建200OK呼叫应答成功报文并发送给SIP服务器103。

该步骤与步骤S217相同,在此不再赘述。

S224、SIP服务器103将来自被叫用户代理102的200OK呼叫应答成功报文中的RTP媒体信息中的IP地址替换为SIP服务器103的IP地址,将200OK呼叫应答成功报文中的RTP媒体信息中的端口号替换为第二RTP媒体端点的端口号,然后将200OK呼叫应答成功报文发送给主叫用户。

S225、当主叫用户代理101向被叫用户代理102发送第一RTP媒体流报文时首先发送给SIP服务器103的第一RTP媒体端点。

示例性的,参照图5中所示,主叫用户代理101的第一RTP媒体流报文经过第一NAT设备102后到达SIP服务器103的第一RTP媒体端点。

S226、通过SIP服务器103的第二RTP媒体端点将第一RTP媒体流报文转发给被叫用户代理102。

示例性的,参照图5中所示,第一RTP媒体流报文进入SIP服务器103的第一RTP媒体端点后,从SIP服务器103的第二RTP媒体端点流出,经由第二NAT设备104到达被叫用户代理102。

S227、当被叫用户代理102向主叫用户代理101发送第二RTP媒体流报文时首先发送给SIP服务器103的第二RTP媒体端点。

示例性的,参照图5中所示,被叫用户代理105的第二RTP媒体流报文经过第二NAT设备104后到达SIP服务器103的第二RTP媒体端点。

S228、通过SIP服务器103的第一RTP媒体端点将第二RTP媒体流报文转发给主叫用户代理101。

示例性的,参照图5中所示,第二RTP媒体流报文进入SIP服务器103的第二RTP媒体端点后,从SIP服务器103的第一RTP媒体端点流流出,经由第一NAT设备102到达主叫用户代理101。

具体的,SIP服务器103的媒体端点的数据转发,可以通过socket(中文全称:套接字)编程实现,也可以使用iptable创建对应的转发规则实现,本发明不做具体描述。

本发明提供的RTP媒体流穿越方法,通过利用报文测试用户代理的公网IP地址是否可达来判断根据公网IP地址能否穿越NAT设备,从而将用户代理分为媒体中继类型或媒体代理类型,对于通信双方的用户代理均为根据公网IP地址能够穿越NAT设备的媒体代理类型时,可以根据对方的公网IP地址直接传输RTP媒体流,对于通信双方的用户代理中有一方为根据公网IP地址不可穿越NAT设备的媒体中继类型时,由用户代理将RTP媒体流发送至SIP服务器,由SIP服务器作为转发中继转发给另一方,解决了当互相传输RTP媒体流的SIP用户代理之间存在NAT设备时,RTP媒体流无法穿越NAT设备的问题。

实施例3、

本发明提供了一种SIP服务器,参照图6中所示,应用于上述RTP媒体流穿越方法,作为图1中所示的SIP服务器103,该SIP服务器包括:

接收单元1031,用于接收主叫用户代理的SIP注册报文或注册保活报文,接收被叫用户代理的SIP注册报文或注册保活报文。

获取单元1032,用于根据接收单元1031接收到的主叫用户代理的SIP注册报文或注册保活报文获取主叫用户代理的公网IP地址和公网端口号,根据接收单元1031接收到的被叫用户代理的SIP注册报文或注册保活报文获取被叫用户代理的公网IP地址和公网端口号。

发送单元1033,用于根据获取单元10321032获取的主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送报文以等待主叫用户代理进行确认,并且根据获取单元10321032获取的被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送报文以等待被叫用户代理进行确认。

判定单元1034,用于判定主叫用户代理为媒体中继类型或媒体代理类型,并且判定被叫用户代理为媒体中继类型或媒体代理类型。

发送单元1033,还用于如果判定单元1034判定主叫用户代理以及被叫用户代理均为媒体代理类型,则将来自主叫用户代理或被叫用户代理中一方的SIP报文中的RTP媒体信息直接透传给另一方,用于主叫用户代理与被叫用户代理根据对方的公网IP地址直接传输RTP媒体流,其中,RTP媒体信息包括IP地址和端口号。

替换单元1035,用于如果判定单元1034判定主叫用户代理或者被叫用户代理中的至少一方为媒体中继类型,则将来自主叫用户代理或被叫用户代理中一方的SIP报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将SIP报文中的RTP媒体信息中的端口号替换为SIP服务器的端口。

发送单元1033,还用于将替换单元1035替换后的SIP报文转发给主叫用户代理或被叫用户代理中的另一方,用于主叫用户代理与被叫用户代理通过SIP服务器转发RTP媒体流。

由于本发明实施例中的SIP服务器可以用于上述RTP媒体流穿越方法,因此,其所能获得的技术效果也可参考上述方法实施例,本发明实施例在此不再赘述。

可选的,在一种可能的方式中:

接收单元1031,还用于接收主叫用户代理的第一UDP请求报文。

发送单元1033,具体用于根据主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送第一响应报文以等待主叫用户代理对第一响应报文进行确认,并启动第一定时器,其中,第一响应报文用于对主叫用户代理的第一UDP请求报文进行响应。

接收单元1031,还用于接收被叫用户代理的第二UDP请求报文。

发送单元1033,具体用于根据被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送第二响应报文以等待被叫用户代理对第二响应报文进行确认,并启动第二定时器,其中,第二响应报文用于对被叫用户代理的第二UDP请求报文进行响应。

可选的,在一种可能的方式中,参照图6中所示,SIP服务器103还包括定时器单元1036:

定时器单元1036,用于在发送单元1033向主叫用户代理发送所述第一响应报文之后,启动第一定时器。

发送单元1033,具体用于如果在定时器单元1036启动的第一定时器超时之后,接收单元1031仍未接收到主叫用户代理针对第一响应报文所发送的第一确认报文,则重新根据主叫用户代理的公网IP地址和公网端口号向主叫用户代理发送第一响应报文并重新启动第一定时器。

判定单元1034,具体用于如果在定时器单元1036启动的第一定时器超时之前,接收单元1031接收到第一确认报文,则将主叫用户代理标记为媒体代理类型。

判定单元1034,具体用于如果在第一定时器再次超时之后,接收单元1031仍未接收到第一确认报文,则将主叫用户代理标记为媒体中继类型,如果在第一定时器再次超时之前,接收单元1031接收到第一确认报文,则将主叫用户代理标记为媒体代理类型。

定时器单元1036,还用于在发送单元1033向被叫用户代理发送所述第二响应报文之后,启动第二定时器。

发送单元1033,具体用于如果在定时器单元1036启动的第二定时器超时之后,接收单元1031仍未接收到被叫用户代理针对第二响应报文所发送的第二确认报文,则重新根据被叫用户代理的公网IP地址和公网端口号向被叫用户代理发送第二响应报文并重新启动第二定时器。

判定单元1034,具体用于如果在定时器单元1036启动的第二定时器超时之前,接收单元1031接收到第二确认报文,则将被叫用户代理标记为媒体代理类型。

判定单元1034,具体用于如果在第二定时器再次超时之后,接收单元1031仍未接收到第二确认报文,则将被叫用户代理标记为媒体中继类型,如果在第二定时器再次超时之前,接收单元1031接收到第二确认报文,则将被叫用户代理标记为媒体代理类型。

可选的,在一种可能的方式中,参照图6中所示,SIP服务器103还包括分配单元1037。

分配单元1037,用于为主叫用户代理分配第一RTP媒体端点,为被叫用户代理分配第二RTP媒体端点,其中,第一RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器的IP地址,第一RTP媒体端点的RTP媒体信息中的端口号为第一空闲端口号,第二RTP媒体端点的RTP媒体信息中的IP地址为SIP服务器的IP地址,第二RTP媒体端点的RTP媒体信息中的端口号为第二空闲端口号。

替换单元1035,具体用于将来自主叫用户代理的INVITE呼叫请求报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将INVITE呼叫请求报文中的RTP媒体信息中的端口号替换为分配单元1037分配的第一RTP媒体端点的端口号。

发送单元1033,具体用于将替换单元1035替换后的INVITE呼叫请求报文发送给被叫用户代理。

替换单元1035,具体用于将来自被叫用户代理的200OK呼叫应答成功报文中的RTP媒体信息中的IP地址替换为SIP服务器的IP地址,将200OK呼叫应答成功报文中的RTP媒体信息中的端口号替换为分配单元1037分配的第二RTP媒体端点的端口号。

发送单元1033,具体用于将替换单元1035替换后的200OK呼叫应答成功报文发送给主叫用户代理。

需要说明的是,获取单元、判定单元和替换单元可以为单独设立的处理器,也可以集成在控制器的某一个处理器中实现,此外,也可以以程序代码的形式存储于控制器的存储器中,由控制器的某一个处理器调用并执行以上获取单元、判定单元和替换单元的功能。这里所述的处理器可以是一个中央处理器(英文全称:central processing unit,英文简称:CPU),或者是特定集成电路(英文全称:application specific integrated circuit,英文简称:ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。

接收单元和发送单元可以是以太网口或光纤网口等具有网络通信功能的模块。

应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、设备和方法,可以通过其它的方式实现。例如,以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文全称:read-only memory,英文简称:ROM)、随机存取存储器(英文全称:random access memory,英文简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号