本发明涉及voip话机领域,具体涉及一种voip开发调试的codec解包实现方法及装置。
背景技术:
在voip开发调试中对声音的问题的排查,最直观的是能直接听到声音。但是在开发中,经常只能抓到通话中的数据包,而数据包是经过编码的,有的还有加密。这对开发和测试来说是一个很大问题,无法判定当时的声音质量。
目前,一般通过wireshark对抓到的包进行解析,但其只能解析pcmu、pcma等简单codec。而目前语音通话很多不只是这些codec。另外,很多抓包文件是经过加密的,而现有的wireshark对此也是无法实现解密的。
技术实现要素:
本发明的目的在于提供一种用于voip开发调试的codec解包实现方法及装置,其能够解析多种语音codec。
为实现上述目的,本发明采用的技术方案是:
一种用于voip开发调试的codec解包实现方法,其包括以下步骤:
步骤1、抓取pcap文件并进行解析,以获取sdp包,若sdp包获取成功,进入步骤2,若获取sdp包失败,进入步骤3;
步骤2、从sdp包中获取解包输入信息,并判断解包输入信息是否完整,若解包输入信息完整,进入步骤4;若解包输入信息不完整,则从log文件中获取缺失的解包输入信息,以完整解包输入信息,并进入步骤4;
解包输入信息包括通话两端的ip地址、端口、codec信息、是否加密,若加密时,解包输入信息还包括加密密钥;
步骤3、通过识别rtp包的包头获取部分解包输入信息,然后根据log文件中获取缺失的解包输入信息,以完整解包输入信息,然后进入步骤4;
步骤4、当解包输入信息完整时,根据解包输入信息判断rtp包是否加密,若rtp包没有加密,进入步骤5;若rtp包有加密,则根据解包输入信息中的加密密钥对rtp包进行解密,解密完成后进入步骤5;
步骤5、根据解包输入信息中的codec信息查找对应的codec模块,利用该codec模块进行codec解码,生成可播放的wav文件。
本发明还提供了另一技术方案:
一种用于voip开发调试的codec解包实现装置,其包括pcap解析模块、srtp解密模块和codec解码模块,
所述pcap解析模块,用于读取pcap文件,并对pcap文件进行逐层分析,获取sdp包,用于获取解包输入信息;若获取sdp包失败,则通过识别rtp包的包头获取部分解包输入信息,并结合log文件来获取缺失的解包输入信息;
所述srtp解密模块,用于根据解包输入信息中的加密密钥对rtp包进行解密;
所述codec解码模块,设有两种以上的codec模块;用于根据解包输入信息中的codec信息查找codec解码模块中对应的codec模块,并利用该codec模块进行codec解码,生成wav文件。
采用上述方案后,本发明在进行codec解码时,会根据解包输入信息中的codec信息查找相应的codec模块,不同类型的codec对应不同的codec模块,从而实现多种语音codec的解析。而且根据设置灵活方便,在使用过程中易于添加新增codec模块。此外,本发明可以方便开发人员快速解析出pcap包;针对技术支持、没有现场的情况下,利用话机的抓包文件(pcap文件)和log文件,能再现通话场景。
附图说明
图1为本发明结构框图;
图2为本发明流程图。
具体实施方式
图1为本发明用于voip开发调试的codec解包实现装装置的结构框图,如图1所示,用于voip开发调试的codec解包实现装置包括pcap解析模块、srtp解密模块和codec解码模块。
其中,pcap解析模块,用于读取pcap文件,并对pcap文件进行逐层分析,获取sdp包,用于获取解包输入信息;若获取sdp包失败,则通过识别rtp包的包头获取部分解包输入信息,并结合log文件来获取缺失的解包输入信息。
其中,rtp包通过解析pcap文件识别获取,具体通过下述流程识别出rtp包:
按照网络包的格式,逐层识别出是否为以太网帧、是否为ip包、是否为udp包;
udp载荷长度是否大于12字节;
udp载荷前两个比特是否为0x10,即rtp头的版本号是否为2;
rtp流负载类型是否不改变;
rtp流的sequencenumber是否递增;
rtp包的ssrc值是否为定值。
srtp解密模块,用于根据解包输入信息中的加密密钥对rtp包进行解密。
codec解码模块,设有两种以上的codec模块;用于根据解包输入信息中的codec信息查找codec解码模块中对应的codec模块,并利用该codec模块进行codec解码,生成wav文件。
图2为本发明用于voip开发调试的codec解包实现方法的流程图,如图2所示,用于voip开发调试的codec解包实现方法的流程图具体包括以下步骤:
步骤1、抓取pcap文件并进行解析,以获取sdp包,若sdp包获取成功,进入步骤2,若获取sdp包失败,进入步骤3。
步骤2、从sdp包中获取解包输入信息,并判断解包输入信息是否完整,若解包输入信息完整,进入步骤4;若解包输入信息不完整,则从log文件中获取缺失的解包输入信息,以完整解包输入信息,并进入步骤4。
其中,解包输入信息包括通话两端的ip地址、端口、codec信息、是否加密,若加密时,解包输入信息还包括加密密钥;codec信息包括codec名称、payloadtype(负载类型)、采样率、比特率和ptime(媒体打包时长)。
步骤3、通过识别rtp包的包头获取部分解包输入信息,然后根据log文件中获取缺失的解包输入信息,以完整解包输入信息,然后进入步骤4。
步骤4、当解包输入信息完整时,根据解包输入信息判断rtp包是否加密,若rtp包没有加密,进入步骤5;若rtp包有加密,则根据解包输入信息中的加密密钥对rtp包进行解密,解密完成后进入步骤5。
步骤5、根据解包输入信息中的codec信息查找对应的codec模块,利用该codec模块进行codec解码,生成可播放的wav文件。
本发明的关键在于,本发明在进行codec解码时,会根据解包输入信息中的codec信息查找相应的codec模块,不同类型的codec对应不同的codec模块,从而实现多种语音codec的解析。而且根据设置灵活方便,在使用过程中易于添加新增codec模块。此外,本发明可以方便开发人员快速解析出pcap包;针对技术支持、没有现场的情况下,利用话机的抓包文件(pcap文件)和log文件,能再现通话场景。
以上所述,仅是本发明实施例而已,并非对本发明的技术范围作任何限制,故凡是依据本发明的技术实质对以上实施例所作的任何细微修改、等同变化与修饰,均仍属于本发明技术方案的范围内。