Linux烤机脚本测试io,sipp测试脚本用于媒体测试

前言

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

测试脚本

测试思路说明

如果对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:Ubuntu: sudo apt install ffmpeg

MacOS: brew install ffmpeg

SIP服务器:为了方便,使用kamailio作为SIP服务器,并且开启任意注册支持(任意帐号及密码都可以注册)

bash支持!

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

生成测试avi文件

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

ffmpeg -i src.mkv -c:v libx264 -g 250 -s 640x480 -r 30 -b:v 768k -profile:v baseline -x264-params "nal-hrd=cbr" -c:a pcm_alaw -ac 1 -ar 8k 640_480_gop250.avi

1

ffmpeg-isrc.mkv-c:vlibx264-g250-s640x480-r30-b:v768k-profile:vbaseline-x264-params"nal-hrd=cbr"-c:apcm_alaw-ac1-ar8k640_480_gop250.avi

上面就是转行为一个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数量!提供直接通过运行带参数的形式来修改:

usage: ./run.sh [OPTION]

-l

-s

-c

-m

-h show usage

./run.sh -l 192.168.78.6 -s 192.168.78.8:5060 -c account.csv -m 2000

1

2

3

4

5

6

7

8

usage:./run.sh[OPTION]

-l

-s

-c

-m

-hshowusage

./run.sh-l192.168.78.6-s192.168.78.8:5060-caccount.csv-m2000

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

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

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

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

运行说明

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

存在的问题

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SIPp可以使用XML脚本来描述SIP会话。盲转是一种SIP功能,允许用户在不知道目标URI的情况下将呼叫转移到其他URI。下面是一个基本的SIPp盲转脚本示例: ```xml <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE scenario SYSTEM "sipp.dtd"> <!-- 定义变量 --> <scenario name="Blind Transfer" description="Blind Transfer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <send retrans="500" trcount="1"> <![CDATA[ INVITE sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bK12345 From: sip:[email protected];tag=12345 To: sip:[email protected] Call-ID: [email protected] CSeq: 1 INVITE Contact: sip:[email protected]:5060 Content-Type: application/sdp Content-Length: 0 ]]> </send> <!-- 等待100 Trying响应 --> <recv response="100" optional="true"> </recv> <!-- 等待200 OK响应 --> <recv response="200"> <!-- 提取From标头 --> <check_from uri="sip:[email protected]" /> <!-- 提取To标头 --> <check_to uri="sip:[email protected]" /> <!-- 提取Contact标头 --> <check_contact /> <!-- 提取SDP信息 --> <check_body content="audio" /> </recv> <!-- 发送盲转请求 --> <send retrans="500" trcount="1"> <![CDATA[ REFER sip:[email protected] SIP/2.0 Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bK12346 From: sip:[email protected];tag=12345 To: sip:[email protected] Call-ID: [email protected] CSeq: 2 REFER Contact: sip:[email protected]:5060 Refer-To: <sip:[email protected]> ]]> </send> <!-- 等待202 Accepted响应 --> <recv response="202"> </recv> <!-- 等待BYE请求 --> <recv request="BYE"> <!-- 提取From标头 --> <check_from uri="sip:[email protected]" /> <!-- 提取To标头 --> <check_to uri="sip:[email protected]" /> </recv> <!-- 发送200 OK响应 --> <send> <![CDATA[ SIP/2.0 200 OK Via: SIP/2.0/UDP 192.168.1.2:5060;branch=z9hG4bK12347 From: sip:[email protected];tag=12345 To: sip:[email protected] Call-ID: [email protected] CSeq: 3 BYE Contact: sip:[email protected]:5060 Content-Length: 0 ]]> </send> </scenario> ``` 如上所示,该脚本首先发送一个INVITE请求,等待100 Trying响应和200 OK响应。然后,发送一个REFER请求,将呼叫转移给URI为`<sip:[email protected]>`的用户。最后,等待BYE请求和200 OK响应。在发送和接收消息时,可以使用`<check_*>`元素从SIP消息中提取信息,以便进行后续处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值