一种高性能接收RTP复用流的方法与流程

文档序号:19415054发布日期:2019-12-14 00:51阅读:512来源:国知局
一种高性能接收RTP复用流的方法与流程

本发明涉及网络通信领域,更具体地说,涉及一种高性能网络媒体数据接收方法。



背景技术:

视频指挥,视频会议等业务中需要使用流媒体服务器进行媒体流的转发传输,出于实时性考虑,一般采用rtp协议,需要占用网络通信端口,实际应用场景中,为了节省端口的使用,往往需要采用端口复用的方式,即按照rec.itu-th.460.19规范,在udp包头和rtp包头之间插入复用id来区分不同的媒体流(如图2),从而达到共用一个udp端口的目的。

而当服务器接收的媒体流路数较多时,很容易出现性能瓶颈,导致服务器崩溃,断流等故障;cn104836811a描述了如何对rtp进行端口复用,但是并没有描述如何同时接收多个rtp复用流的情况,也没有考虑性能问题。

本发明是鉴于上述问题而做出的,其目的在于,提出一种高性能接收rtp复用流的方法,保证在高并发、高吞吐量场景下能够正常的接收rtp复用流。



技术实现要素:

有鉴于此,本发明实施例提供了一种在高并发、高吞吐量场景下能够正常的接收rtp复用流的方法。

本发明提供了一种高性能接收rtp复用流的方法,包括以下步骤:

一种高性能接收rtp复用流的方法,针对高并发复用端口接收rtp流的场景,其特征在于,包括以下步骤:

步骤1:客户端向服务端发起媒体协商,确定接收端的媒体复用端口和媒体流路数,以及每一路媒体流对应的复用id;

步骤2:协商完成后,客户端开始监听媒体复用端口,准备接收服务端打包发送的媒体流的udp报文即复用流;

步骤3:客户端接收到媒体流的udp报文后,从中提取出复用id和rtp报文;

步骤4:客户端通过负载均衡找出与复用id关联的任务队列,将复用id和rtp报文封装成任务投递到与复用id关联的任务队列中,一个任务队列绑定一个固定的工作线程;

步骤5:工作线程从对应的任务队列中取出步骤4投递的任务,并对任务中的rtp报文进行处理,将rtp报文还原成媒体流,至此,成功的将不同会话的媒体流通过负载均衡分配到不同的线程进行处理。

进一步地,所述步骤1中,媒体协商的方法为:媒体协商可以通过rtsp、sip及私有协议进行。

进一步地,所述步骤2中,udp报文指的是:经过第一步协商成功后,服务端首先将媒体流打包成rtp报文,再将rtp报文、复用id打包成复用rtp报文,最后将复用rtp报文和复用端口信息打包成udp报文。

进一步地,所述步骤3中,接收udp报文的方法为:采用单线程的方式从复用端口读取媒体流对应的udp报文。

进一步地,所述步骤3中,提取出复用id和rtp报文的方法是:先从udp报文里面提取出复用rtp报文,然后再从复用rtp报文中提取到复用id和rtp报文。

进一步地,所述步骤5中,将rtp报文还原成媒体流的方法:取出的任务信息里面包含了复用id和rtp报文,根据媒体流的实际打包情况对rtp报文进行rtp包头解析,如果有加密的话进行srtp解密,得到rtp包头字段和负载数据即媒体数据。

与现有技术相比,本发明具有以下有益效果:

(1)同一路媒体流始终绑定到同一个线程进行处理,避免了rtp报文乱序;

(2)通过负载均衡将不同的媒体流根据复用id绑定到不同线程,利用多线程技术同时处理不同媒体流,最大化系统负载能力,保证系统性能。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是一种高性能接收rtp复用流的方法的实施步骤图;

图2是按照rec.itu-th.460.19规范,实现端口复用图。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。

步骤1:客户端向服务端发起媒体协商,确定接收端的媒体复用端口和媒体流路数,以及每一路媒体流对应的复用id;

本发明中,媒体协商可以通过rtsp,sip或者私有协议进行,客户端通过协商告知服务端媒体流的复用端口、复用id等信息。协商成功后,服务端首先将媒体流打包成rtp报文,再将rtp报文、复用id打包成复用rtp报文,最后将复用rtp报文和复用端口信息打包成udp报文发送给客户端,出于实时性考虑,传输层一般采用udp协议。

步骤2:协商完成后,客户端开始监听媒体复用端口,准备接收服务端打包发送的媒体流的udp报文即复用流;

步骤3:客户端接收到媒体流的udp报文后,从中提取出复用id和rtp报文;

本发明中,为了避免线程之间不同步引起的乱序,所以采用单线程的方式从复用端口读取媒体流对应的udp报文,根据图2所示,udp负载的前4个字节即为复用id,4个字节的复用id后面为完整的rtp报文;提取出复用id和rtp报文是先从udp报文里面提取出复用rtp报文,然后再从复用rtp报文中提取到复用id和rtp报文。

步骤4:客户端通过负载均衡找出与复用id关联的任务队列,将复用id和rtp报文封装成任务投递到任务队列中,一个任务队列绑定一个固定的工作线程;

负载均衡采用轮询策略,任务队列的个数与工作线程的个数一一对应,而工作线程的个数出于性能最优化考虑,一般设置为等于系统的cpu核心数。比如系统cpu核数为4,客户端需要同时接收8路媒体流a1,a2,...,a8,复用id分别为m1,m2,...,m8,则程序启动后会创建4个线程t1,t2,t3,t4,并创建与之对应的4个任务队列q1,q2,q3,q4。根据负载均衡的轮询策略,则会将媒体流a1,a2分配到q1,a3,a4分配到q2,a5,a6分配到q3,a7,a8分配到q4,线程t1处理q1,t2处理q2,t3处理q3,t4处理q4。

步骤5:工作线程从对应的任务队列中取出步骤4投递的任务,并对任务中的rtp报文进行处理,将rtp报文还原成媒体流。

取出的任务信息里面包含了复用id和rtp报文,根据媒体流的实际打包情况进行rtp包头解析,srtp解密(如果有加密的话),得到rtp包头字段及负载数据(即媒体数据)。

至此,成功的将不同会话的媒体流通过负载均衡分配到不同的线程进行处理,利用多线程技术提高cpu的利用率,提升系统性能。

在不冲突的情况下,本文中上述实施例及实施例中的特征可以相互结合。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。



技术特征:

1.一种高性能接收rtp复用流的方法,针对高并发复用端口接收rtp流的场景,其特征在于,包括以下步骤:

步骤1:客户端向服务端发起媒体协商,确定客户端的媒体复用端口和媒体流路数,以及每一路媒体流对应的复用id;

步骤2:协商完成后,客户端开始监听媒体复用端口,准备接收服务端打包发送的媒体流的udp报文即复用流;

步骤3:客户端接收到媒体流的udp报文后,从中提取出复用id和rtp报文;

步骤4:客户端通过负载均衡找出与复用id关联的任务队列,将复用id和rtp报文封装成任务投递到与复用id关联的任务队列中,一个任务队列绑定一个固定的工作线程;

步骤5:工作线程从对应的任务队列中取出步骤4投递的任务,并对任务中的rtp报文进行处理,将rtp报文还原成媒体流,至此,成功的将不同会话的媒体流通过负载均衡分配到不同的线程进行处理。

2.如权利要求1所述的一种高性能接收rtp复用流的方法,其特征在于:步骤1中,媒体协商的方法为:媒体协商可以通过rtsp、sip及私有协议进行。

3.如权利要求1所述的一种高性能接收rtp复用流的方法,其特征在于:步骤2中,udp报文指的是:经过第一步协商成功后,服务端首先将媒体流打包成rtp报文,再将rtp报文、复用id打包成复用rtp报文,最后将复用rtp报文和复用端口信息打包成udp报文。

4.如权利要求1所述的一种高性能接收rtp复用流的方法,其特征在于:步骤3中,接收udp报文的方法为:采用单线程的方式从复用端口读取媒体流对应的udp报文。

5.如权利要求1所述的一种高性能接收rtp复用流的方法,其特征在于:步骤3中,提取出复用id和rtp报文的方法是:先从udp报文里面提取出复用rtp报文,然后再从复用rtp报文中提取到复用id和rtp报文。

6.如权利要求1所述的一种高性能接收rtp复用流的方法,其特征在于:步骤5中,将rtp报文还原成媒体流的方法:取出的任务信息里面包含了复用id和rtp报文,根据媒体流的实际打包情况对rtp报文进行rtp包头解析,有加密的话进行srtp解密,得到rtp包头字段和负载数据即媒体数据。


技术总结
本发明公开了一种高性能接收RTP复用流的方法,客户端发起媒体协商,确定接收端的媒体复用端口和媒体流路数,以及每一路媒体流对应的复用ID;协商完成后,客户端开始监听复用端口,准备接收媒体流的UDP报文;接收到媒体流的UDP报文后,从中提取出复用ID和RTP报文;通过负载均衡找出与复用ID关联的任务队列,将复用ID和RTP报文封装成任务投递到与复用ID关联的任务队列中;工作线程从对应的任务队列中取出任务,对任务中的RTP报文进行处理,将其还原成媒体流,至此,成功的将不同会话的媒体流通过负载均衡分配到不同的线程进行处理,本发明利用多线程技术同时处理不同媒体流,最大化系统负载能力,保证系统性能。

技术研发人员:程家明;王军明;孔繁东;周志祥
受保护的技术使用者:武汉兴图新科电子股份有限公司
技术研发日:2019.09.16
技术公布日:2019.12.13
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1