sipp测试脚本用于媒体测试

前言

sipp是一款用于测试SIP的命令行工具,普通情况下,我们主要用来测试的是SIP信令,而要测试媒体,其提供对PCAP抓包的读取以及发送功能支持,但是在多次实验的情况下,其每次也只能单独发送音频流/视频流。并且要循环时间较长的会比较麻烦。后来通过配合使用ffmpeg自带的发包功能,可以实现直接读取mp4/mkv/avi文件并实现同时发送音视频报文的功能!

测试脚本

相关的脚本已经提交到GitHub!https://github.com/elkpi/sipp_media

测试思路说明

如果对sipp有所了解,就知道sipp只是一个SIP协议测试框架,所有的信令都是写入到xml的测试脚本,因此非常的方便!普通媒体协商下,可以实现接收流的功能,也就是在SDP中指定相关的媒体信息。sipp支持在接收到报文后调用脚本的功能!

因此思路为,将接收到的SDP传递给shell脚本,shell脚本解析SDP的对端IP:PORT,之后调用ffmpeg读取avi媒体文件向远端打流!具体脚本实现为play.sh

提交的仓库中的脚本是一个被叫的流程!如果需要实现主动呼叫,本质也是可以的,就是解析200OK的SDP再去调用ffmpeg来打流!

使用说明

环境要求

  • 系统:Linux/MacOS;由于Windows不方便使用bash以及sipp,因此没有Windows支持!
  • SIPp:
    • Ubuntu: sudo apt install sip-tester 安装sipp,当然也可思议自编译
    • MacOS:brew install sipp
  • ffmpeg:
  • SIP服务器:为了方便,使用kamailio作为SIP服务器,并且开启任意注册支持(任意帐号及密码都可以注册)
  • bash支持!

以上就是环境的简单要求!

生成测试avi文件

如果有所了解,那么就会知道,除了脚本之外,最重要的还是这个媒体文件!可以直接使用ffmpeg来生成!并且由于一些测试的需求,最好是按自己的要求来定制GOP/音频编码等,因为如果涉及到视频的转码,对于打流的设备要求比较高,加上如果需要同时多条流一起打,压力会更大!因此,我个人建议是实现把需求的媒体文件做好!如下一个ffmpeg转换的示例:

上面就是转行为一个GOP为250,分辨率大小为640×480,帧率为30,并且为cbr固定码率为768k的视频。音频则为PCMA!这里要特别说一下,其实对于一些音频格式,比如MP3/AAC都是有比较高的压缩率的(相对于G711这类的),而SIP测试中大量用的是G711,因此直接存储G711这种省去部分转码压力,但是音频发包不同于视频发包,不好直接拷贝,最终还是要过一个filter,因此尽量降低音频转码的压力!而选用AVI这个容器格式,是因为AVI对封装要求较低。如果使用MP4这类格式,是不支持G711的(有一大部分的播放器可能解码不出来,因为header没有对应G711的值)

配置说明

给出的仓库脚本中是不带SIP注册认证的,如果需要认证,自己要再修改下!

account.csv:这个文件是SIP注册帐号列表,目前我只写了一个帐号,如果需要多个帐号进行测试,可以用shell生成帐号列表!

list.txt:ffmpeg播放列表,也就是把上文中的媒体文件写进来,如果需要长时间烤机,则多写几行!比如一个大的视频文件是1小时,写个10行可以测试10小时!

run.sh:运行的脚本,需要修改脚本中LOCAL为打流测试的地址;SRV为注册服务器的地址;CSV则是注册帐号列表!M为执行test calls数量!提供直接通过运行带参数的形式来修改:

通过单独带参数来修改对应的一些字段!

play.sh:用于执行ffmpeg打流的脚本文件。支持G711以及G722,如果有其余的编码支持,可以修订下脚本!

reg.xml:sipp注册的配置,根据自己需求做一些修订!

media.xml:invite被叫响应SDP以及调用play.sh的配置!也是根据自己的需求,做一些修订!

运行说明

上文配置管理已经有说过了,可以直接执行run.sh!

存在的问题

如果执行压力测试,运行好几路进行测试,由于是shell执行,存在sipp崩溃的问题,以及ffmpeg可能没有被正常杀掉的情况(BYE没有收到,导致可能遗留一些打流ffmpeg子进程)

转载请注明: 转载自elkPi.com

本文链接地址: sipp测试脚本用于媒体测试

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll to top