具体实施方式
在本发明实施例中,首先解析接收的网络数据会话启动协议SIP协议的请求INVITE的响应OK数据包,以获得用户地址信息,若是需要监听的语音数据,则将用户地址信息对应的包含语音数据的RTP包存储到接收缓存中;若接收缓存存储满RTP包,对RTP包进行排序,然后提取RTP包中的语音数据,将接收缓存置为播放缓存,并播放RTP包中的语音数据,并将播放缓存置为接收缓存;语音数据播放完成后,则将播放缓存置为接收缓存,用以接收RTP包,对RTP包进行排序和提取语音数据,将接收缓存置为播放缓存,通过交替接收和播放语音数据,从而实现对VoIP语音的实时监听。
首先介绍本发明实施例的VoIP语音实时监听的方法,如图1所示,具体步骤如下:
步骤11、分配接收缓存和播放缓存,然后执行步骤12;
步骤12、接收网络数据,然后执行步骤13;
步骤13、判断接收的网络数据是否是SIP协议的OK数据包,若是,解析OK数据包,并提取用户地址信息,然后,执行步骤14,否则,丢弃网络数据;
在本发明实施例中可将用户地址信息设置为:用户名、用户IP地址和端口号。
步骤14、根据上述用户地址信息判断所接收的VoIP语音数据是否需要监听,若是,执行步骤15,否则,执行步骤12,继续接收网络数据;
步骤15、获取上述用户地址信息对应的包含语音数据的RTP包,并存储至接收缓存中,然后执行步骤16;
步骤16、判断接收缓存是否存储满RTP包,若是,执行步骤17,否则,执行步骤15,继续接收包含语音数据的RTP包;
步骤17、对RTP包进行排序和提取语音数据,将接收缓存置为播放缓存,播放RTP包中的语音数据,将播放缓存置为接收缓存,接收包含语音数据的RTP包,然后执行步骤18;
步骤18、播放语音数据,然后执行步骤19;
步骤19、判断语音数据是否播放完成,若是,执行步骤20,否则,执行步骤18,继续播放语音数据;
步骤20、将播放缓存置为接收缓存,接收包含语音数据的RTP包;对RTP包进行排序和提取语音数据,然后将接收缓存置为播放缓存,播放语音数据,然后继续接收网络数据,执行步骤12。
由上述步骤可知,在本发明实施例中使用接收缓存接收包含语音数据的RTP包,通过播放缓存将接收的语音数据进行播放,并且通过对接收缓存和播放缓存的交替使用,使用户可对VoIP语音数据进行实时监控。
下面将分别介绍在本发明实施例VoIP语音数据实时监听方法中具体步骤。首先,介绍本发明实施例接收缓存存储接收到的包含语音数据的RTP包的流程图,如图2所示,具体步骤如下:
步骤21、接收网络数据,然后执行步骤22;
步骤22、判断接收的网络数据是否是SIP协议包,若是,则执行步骤23,否则,执行步骤21;
步骤23、判断SIP协议包是否是应答Invite(请求)的OK(响应)数据包,若是,执行步骤24,否则,丢弃网络数据,然后执行步骤21;
上述的判断方法可设置为:通过将接收的数据包的特征码和位置与预先设置的特征码和位置进行匹配,在SIP协议中,特征码是指SIP协议中能标识包的字符,例如可包括:OK、ring、trying等,而上述的位置是指特征码在数据包的从第几个字节开始到第几个字节结束的位置。
步骤24、从OK数据包中解析出发送该数据包的用户名或用户ID,IP地址和端口号,然后执行步骤25;
步骤25、根据过滤规则判断网络数据是否是要监听的VoIP语音数据,若是,执行步骤26,否则,执行步骤21;
上述的过滤规则是,通过判断获取的用户名或用户ID、IP地址和端口号是否为需要监听的用户名或用户ID、IP地址和端口号。
步骤26、从OK数据包中取出通信双方的IP地址和端口号,然后执行步骤27;
步骤27、接收IP地址和端口号对应的RTP包,然后执行步骤28;
步骤28、初始化40字节的RTP包的信息头,在RTP包的信息头中添加接收时间、RTP包长和接收序号,然后执行步骤29;
RTP包的长度包括:Ethernet(以太网络)头,14字节,IP头,20字节,UDP(用户数据报协议)头,8字节,RTP头,12字节和RTP数据。保存RTP包长,便于取RTP包,保存接收序号便于RTP包的排序,而接收时间可在语音播放时用。
步骤29、把信息头和接收到的RTP包一起存储到接收缓存中,继续接收上述IP地址和端口号对应的RTP包,然后执行步骤21。
在存储RTP包的时候,先在RTP包的信息头中存储接收时间(例如:某年某月某日)、RTP包的长度、RTP包的序号,然后再把RTP包的信息头与接收到的RTP数据包一起存储到接收缓存中去。
按照上述步骤存储下一个接收到的RTP包,并将接收到的RTP包按照FIFO(先进先出)的方式存储。
为了能够实现图2中的步骤,下面对上述步骤中使用到的SIP协议的解析流程作一介绍。该方法的主要思路是:预先配置语音控制协议的特征码和所在位置,并与所接收的UDP数据包中相应位置的特征码进行匹配,如果匹配成功,则继续从该UDP数据包中提取通信双方的用户名、IP地址和端口号,并将用户名、IP地址和端口号与监听的过滤规则相匹配,如果与过滤规则匹配,则通知接收IP地址和端口号对应的RTP包。如图3所示,为本发明实施例SIP协议解析的流程图,具体步骤如下:
步骤31、接收网络数据包,然后执行步骤32;
步骤32、判断是否是UDP数据包,若是,执行步骤33,否则,执行步骤31;
UDP数据包包括:UDP头和UDP的数据部分;
步骤33、判断UDP数据包的校验和是否正确,若是,执行步骤34,否则,丢弃网络数据,然后执行步骤31;
UDP数据包的校验的方法是计算16位的二进制和,首先将校验和字段(16位)置0,将每个16位的反码相加,若是奇数字节即最后未到16字节,则以0补充,结果存在校验和字段中,因接收端包含了之前的校验和,若传输中没有任何差错,则接收端计算的校验和该为全1,否则有错。
步骤34、从UDP数据包的数据部分开始,读入14字节,然后执行步骤35;
步骤35、从14字节中,查找是否有200OK字符串,若有,执行步骤36,否则,丢弃网络数据,然后执行步骤31;
步骤36、读入UDP数据包的剩余部分,查找是否有INVITE字符串,若有,提取网络数据的特征码和用户名或用户ID,执行步骤37,否则,丢弃网络数据,然后执行步骤31;
步骤37、根据过滤规则判断特征码和用户名或用户ID是否为需要监听的VoIP语音数据,若是,执行步骤38,否则,丢弃网络数据,然后执行步骤31;
步骤38、从UDP数据包的剩余部分提取通信双方的IP地址和端口号,然后执行步骤39;
步骤39、根据IP地址和端口号判断是否与监听的过滤规则相匹配,若是,执行步骤39,否则,丢弃网络数据,然后执行步骤31;
步骤40、开始接收IP地址和端口号对应的包含语音数据的RTP包,然后执行步骤31。
本发明实施例采用的VoIP协议解析技术,主要针对基于SIP协议的VoIP语音数据。如果需要对其它非SIP标准通信协议的语音数据进行监听,可预先设置相应新的协议解析方法。
由上述步骤可知,在SIP协议解析过程中,由于只用分析SIP协议中INVITE的OK数据包,降低网络数据的处理量,有效的提高了实时监听的效率。
通过图2和图3的介绍,可使用户将需要监听的包含语音数据的RTP包存储到接收缓存中,由图1描述的步骤可知,若接收缓存存储满RTP包,就将接收缓存置为播放缓存,将RTP包中的语音数据提取出来,并调用相应的编码解码器将语音数据还原为原始的语音数据,然后将解码后的语音数据播放出来。
下面就介绍如何播放语音数据,如图4所示,为本发明实施例语音播放流程图,具体步骤如下:
步骤41、从播放缓存中读入包含语音数据的RTP包,然后执行步骤42;
步骤42、读入RTP数据包的信息头,从信息头中提取RTP包的长度和音频编码解码的类型,然后执行步骤43;
RTP数据包的信息头是指在RTP数据包前加一段内存,记录获取RTP包的时间,RTP包的长度以及RTP包的排序;
步骤43、根据获得的RTP数据包的长度和音频编码解码的类型,读入语音数据并解码,然后执行步骤44;
本步骤中的读入语音数据并解码的过程:首先提取出播放缓存中第一个RTP包的语音数据长度,根据音频编码解码器的编号,确定所用的音频编码解码器,再从播放缓存中提取出语音数据,调用相应的语音编码解码器,把播放缓存中的语音数据解码为原始的语音数据,然后按照上面的步骤把下一段语音数据解码为原始的语音数据。
步骤44、判断接收缓存中是否还有语音数据,若有,则执行步骤41,否则,执行步骤45;
步骤45、把解码后的原始语音数据存储到临时PCM(脉冲编码调制)文件中,然后执行步骤46;
步骤46、把PCM文件加上WAV(微软开发的一种声音文件格式)文件头,调用WAV播放器播放语音数据。
本发明实施例可适用一些常用的音频编码解码类型,例如g.729,g.711,g.723等。如果被监听的VoIP语音数据为新的音频编码解码类型,只需要在本发明实施例中添加新的语音编码解码类型即可,使本发明实施例具有较好的扩展性。
通过上述流程,可将接收的语音数据经过解码后,通过播放器播放语音数据内容,为了实现对VoIP语音数据的实时监听,在本发明实施例中接收缓存和播放缓交替接收和播放语音数据,下面介绍本发明实施例双缓存接收播放的流程,如图5所示,具体步骤如下:
步骤51、通过接收缓存存储接收到的包含语音数据的RTP数据包,将播放缓存闲置,然后执行步骤52;
步骤52、判断接收缓存是否存储满RTP数据包,若是,执行步骤53,否则,执行步骤51;
判断接收缓存是否存储满RTP数据包的方法是:接收缓存的大小固定的,对存储到接收缓存的数据包进行累计,超过接收缓存的大小,就认为已经存储满。
步骤53、把接收到的RTP数据包进行排序,并把RTP数据包中的语音数据按照发送的顺序提取出来,然后执行步骤54;
步骤54、将接收缓存置为播放缓存,并将播放缓存置为接收缓存,然后执行步骤55;
上述的顺序提取,就是按照RTP数据包存储时执行的先进先出顺序来提取。
步骤55、播放从播放缓存中提取语音数据,然后执行步骤56;
步骤56、判断语音数据是否播放完成,若是,执行步骤57,否则,执行步骤55,继续播放语音数据;
步骤57、把播放缓存清空,把接收到的RTP数据包进行排序,并把RTP数据包中的语音数据按照发送的顺序提取出来,将播放缓存置为接收缓存,接收RTP数据包,将接收缓缓存置为播放缓存,然后执行步骤54,直到通话结束为止;
播放缓存播放完语音消息后,先把播放缓存清空,并使其接收特定IP地址和端口号的RTP包,然后对接收缓存中的数据进行处理,把接收缓存中的RTP包根据RTP包中的序号进行排序,并根据排序的结果把RTP包中的语音数据和相关信息(语音数据长度和音频编码解码类型)放到接收缓存的相应位置。最后把接收缓存交给语音播放模块进行处理。
为了能够使接收的RTP包按照发送方发送的顺序排序,在上述步骤对RTP包进行了排序,如图6所示,为本发明实施例RTP包排序流程图,具体步骤如下:
步骤61、读取RTP包;
步骤62、查找Sequence Number(序列号)最小的包;然后执行步骤62;
步骤63、把RTP包中的语音数据、标记语音数据大小的short类型的数据和标记语音编码类型的char类型的数据按照FIFO的方式写到一个缓存中,然后执行步骤64;
步骤64、对已提取语音数据的RTP包做标记,然后执行步骤65;
步骤65、按照序列号递增1的方式继续提取并保存语音数据,然后执行步骤66;
步骤66、判断序列号是不是上一个序列号顺序递增1的序列号,若是,继续写入,执行步骤63,否则,标记此序列号,执行步骤67;
步骤67、在未标记的RTP数据包中查找序列号顺序递增的包,然后执行步骤68;
步骤68、在未提取语音数据的RTP包中查找标记的序列号,如果找到,则转到步骤63,否则,则转到步骤62、63、64,然后在执行步骤69;
步骤69、判断是否还有未提取语音数据的RTP包,若是,执行步骤63,否则,提取语音数据结束。
由上述步骤可知,接收缓存接收包含语音数据的RTP包,播放缓存播放语音数据,交替接收和播放包换语音数据的RTP包,使用户可以实时监听语音数据。
由于上述的方法实施例都可以通过装置来实现,所以,本发明还提供了几个装置实施例。
首先,介绍本发明实施例VoIP语音数据实时监听系统,系统组成如图7所示,图中系统包括:镜像交换机、旁路服务器和监听客户端,其中,
镜像交换机,用于把被监听的网络数据镜像到旁路服务器。
由于被监听网络的数据流量比较大,可在上述镜像交换机中设置一过滤装置,即采用端口号和特征码过滤的方法,过滤掉一部分不需要的网络数据,然后把与被监听内容相关的数据送到旁路服务器;
旁路服务器,可设置一VoIP语音数据实时监听装置,用以解析SIP协议INVITE的OK数据包,从OK数据包中提取出通信双方的用户名或用户ID、通信双方的IP地址和端口号。如果上述用户地址信息符合过滤的规则,就接收通信双方的IP地址和端口号对应的包含语音数据的RTP包。等接收缓存存储满后,对RTP包进行排序和提取语音数据,将接收缓存置为播放缓存,将播放缓存置为接收缓存,继续接收RTP包,并调用相应的编码解码器,把语音数据还原为原始的语音数据,直接通过声卡播放出来。在播放语音数据的同时,可通过录音模块将通话双方的语音录制为语音文件,存储到相应的服务器中,供以后查询。
上述的VoIP语音数据实时监听的装置可包括:接收缓存,缓存切换单元,以及语音播放单元,如图8所示,为本发明实施例的VoIP语音数据实时监听的装置,具体结构如下:
(1)接收缓存,用于保存接收到的包含语音数据的数据包;
(2)缓存转换单元,用于在所述接收缓存中存储了符合预定数量包含所述语音数据的数据包后,将所述接收缓存置为播放缓存;以及用于在所述播放缓存中的所述语音数据播放完毕后,将所述播放缓存设置为接收缓存;
(3)语音播放单元,用于播放所述播放缓存中的包含语音数据的数据包。
可选的,在上述VoIP语音数据实时监听装置中,还可包括
判断模块一,用于判断所述接收缓存是否存储满所述包含语音数据的数据包,若是,发出通知,否则,通知所述接收缓存继续接收所述包含语音数据的数据包;
判断模块二,用于判断是否播放完所述播放缓存中的所述包含语音数据的数据包,若是,发出通知,否则,通知所述语音播放单元继续播放所述包含语音数据的数据包。
可选的,在上述VoIP语音数据实时监听装置中,还可包括:
数据包判断模块,用于判断网络数据是否是会话启动协议SIP的请求INVITE的响应OK数据包,若是发出通知,否则,丢弃网络数据;
数据解析模块:用于根据所述判断模块一的通知,从所述OK数据包中提取用户地址信息;
监听判断模块,用于根据所述用户地址信息判断网络数据是否需要监听,若是,发出通知所述接收缓存接收所述用户地址信息对应的包含语音数据的实时传输协议RTP包,否则,通知继续接收所述网络数据。
可选的,在上述VoIP语音数据实时监听装置中,还可包括:
排序、提取模块:用于对所述数据包按照发送的顺序排序,并从所述数据包中中提取出所述语音数据。
可选的,在上述VoIP语音数据实时监听装置中,还可包括:
录音模块,用于对在所述播放缓存模块播放的所述语音数据进行录音。
在本发明实施例中,在接收到网络数据后,通过数据包判断模块判断网络数据是否是会话启动协议SIP的请求INVITE的响应OK数据包,若是,则通知数据解析模块从上述OK数据包中提取用户地址信息,然后,监听判断模块,根据上述用户地址信息判断网络数据是否是需要监听,若是,则通知接收缓存接收上述用户地址信息对应的包含语音数据的实时传输协议RTP包,通过判断模块一判断接收缓存是否存储满实时传输协议RTP包,若是,则通知排序、提取模块,对实时传输协议RTP包进行排序并提取出语音数据,然后,通知缓存切换单元,将接收缓存置为所述播放缓存,通过判断模块二判断语音数据是否播放完成,若是,则通知排序、提取模块,对实时传输协议RTP包进行排序并提取出语音数据,然后,通知将所述播放缓存置为接收缓存。在播放语音数据时,可通过录音模块,对在所述播放缓存模块播放的所述语音数据进行录音,供以后查询。
由上述实施例可知,通过接收缓存接收包含语音数据的RTP包,播放缓存播放语音数据,交替接收和播放接收的语音数据,使用户可以实时监听语音数据,并且在VoIP语音数据实时监听装置中设置录音模块,可将语音数据进行保存供以后查询使用。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。