sipp3.6带媒体测试方案

概述
SIP压测工具sipp,免费,开源,功能足够强大,配置灵活,优点多。
本文档介绍sipp工具如何带媒体测试,并介绍如何制作可用的媒体文件(G729和PCMA)。
环境
centos7.9
freeswitch1.10.7
sipp v3.6.2_rc1
制作媒体流文件
sipp支持通过exec调用play_pcap_audio来发送媒体流,但是要求媒体流是pcap格式。
sipp中自带的只有G711a的媒体流文件,只有8秒长度,并且媒体包抖动过大,不好用。
<exec play_pcap_audio="pcap/g711a.pcap"/>
我们可以通过freeswitch + sngrep抓包自己制作两个媒体流文件。
修改freeswitch注册号码的拨号计划,找一个好听的音乐传到sounds目录。
<include>
<context name="default">
<extension name="test" continue="false">
<condition field="destination_number" expression="^3066(\d+)$" break="on-true">
<action application="answer"/>
<action application="playback" data="/usr/local/freeswitch/sounds/haoting.wav" />
</condition>
</extension>
</context>
</include>
打开sngrep抓包(信令+媒体)
sudo sngrep -c -r

通话30秒后挂断电话,在sngrep中保存抓包,选择“(*) .pcap (SIP + RTP)”模式。
将pcap文件下载到本地,使用wireshark打开。
在wireshark中选择“电话”->“RTP”->“RTP流”,选中fs发送的媒体流,点击“play streams”。

试听抓包的媒体流复合要求。
点击“RTP流”页面上的“prepare filter”按钮过滤当前媒体流的数据包。
选择“文件”->“导出特定分组”,保存到文件“sipp-PCMA-30s.pcap”。
一个符合sipp要求的G711的媒体流文件就制作好了。
G729的媒体流文件的制作过程基本一致,只需要在sipua上修改codec为G729,再通过sngrep抓包,和wireshark过滤G729媒体包并保存即可。

带媒体脚本
在sipp.3.6.2/docs目录下有常用的默认脚本,参考“sipp\docs\uac_pcap.xml”修改自己的带媒体脚本。
在收到200 OK应答之后,播放“sipp-PCMA-30s.pcap”文件。
vi uac-test-pcap.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE scenario SYSTEM "sipp.dtd">
<scenario name="Basic Sipstone UAC">
<send retrans="500">
<![CDATA[
INVITE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>
Call-ID: [call_id]
CSeq: 1 INVITE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Type: application/sdp
Content-Length: [len]
v=0
o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
s=-
c=IN IP[media_ip_type] [media_ip]
t=0 0
m=audio [media_port] RTP/AVP 8 18
a=rtpmap:8 PCMA/8000
a=rtpmap:18 G729/8000
a=ptime:20
]]>
</send>
<recv response="100" optional="true">
</recv>
<recv response="183" optional="true">
</recv>
<recv response="180" optional="true">
</recv>
<recv response="200" rtd="true">
</recv>
<send>
<![CDATA[
ACK sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 1 ACK
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<nop>
<action>
<exec play_pcap_audio="./sipp-PCMA-30s.pcap"/>
</action>
</nop>
<pause milliseconds="30000"/>
<send retrans="500">
<![CDATA[
BYE sip:[field1]@[remote_ip]:[remote_port] SIP/2.0
Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
From: [field0] <sip:[field0]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
To: [field1] <sip:[field1]@[remote_ip]:[remote_port]>[peer_tag_param]
Call-ID: [call_id]
CSeq: 2 BYE
Contact: sip:sipp@[local_ip]:[local_port]
Max-Forwards: 70
Subject: Performance Test
Content-Length: 0
]]>
</send>
<recv response="200" crlf="true">
</recv>
<ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
<CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
</scenario>
UAS脚本不需要修改,略过
测试
服务端uas,带参数“-rtp_echo”使得UAS自动echo媒体流。
sudo sipp -i 10.55.55.138 -p 5555 -sf uas-test.xml -rtp_echo
客户端uac,从uac的显示中可以看到是有正常发包。
sudo sipp -i 10.55.55.138 -p 6666 -inf call-test.csv -sf uac-test-pcap.xml 10.55.55.137:3060 -rp 1000 -r 25 -l 8192 -m 9999

总结
sipp的github地址:https://github.com/SIPp/sipp
后续会有更多的压测方案和脚本慢慢写。
空空如常
求真得真
sipp3.6带媒体测试方案的更多相关文章
- 从Google开源RE2库学习到的C++测试方案
最近因为科研需求,一直在研究Google的开源RE2库(正则表达式识别库),库源码体积庞大,用C++写的,对于我这个以前专供Java的人来说真的是一件很痛苦的事,每天只能啃一点点.今天研究了下里面用到 ...
- VS自带WCF测试客户端简单介绍
在目前的二次开发项目中,一些信息是放在客户那里的,只给你一个服务地址,不知道具体有什么方法,每次想调用一个服务不知道能不能实现目前的需求,只能测试.写个测试程序真的划不来,占用时间不说,而且你忙了一上 ...
- Apache自带压力测试工具ab用法简介
ab命令原理 ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL进行访问.它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx.lighthttp ...
- Android MediaCodec硬编兼容性测试方案
作者:阿宝 更新:2016-08-15 来源:彩色世界(https://blog.hz601.org/2016/08/15/android-mediacodec-hardcode-compatibil ...
- HttpDNS的坑以及一个针对安卓不太完善的测试方案
背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...
- 从轻测到上线,WeTest与《一起来捉妖》测试方案大公开
从2016年Pokémon GO引发的AR游戏热潮开始,国内就一直在期待新的一款具备代表性的AR游戏的头部作品. 4月11日的腾讯首款AR探索手游<一起来捉妖>不仅为国内市场注入了新的活力 ...
- Memory及其controller芯片整体测试方案(下篇)
{ 第三部分 } DDR总线的设计.调试和验证 在计算机架构中,DDR作为程序运算的动态存储器,面对如高性能计算.图形计算.移动计算.工业应用等领域的要求,发展出DDR4,以及用于图形计算的G ...
- Memory及其controller芯片整体测试方案(上篇)
如果你最近想买手机,没准儿你一看价格会被吓到手机什么时候偷偷涨价啦! 其实对于手机涨价,手机制造商也是有苦难言,其中一个显著的原因是存储器芯片价格的上涨↗↗↗ >>> 存储器memo ...
- 移动弱网测试方案Network Emulator for Windows Toolkit
移动app在测试时,有时需要考虑弱网的情形下,app的表现,那么怎么营造这样子的环境呢? 一.首先需要控制网络,有两种方式其一使用网络损伤仪进行,其二采用软件方式.硬件采购费用太贵,因此使用win平台 ...
- 使用VS自带WCF测试客户端
打开VS自带WCF测试客户端 打开VS2015 开发人员命令提示 输入:wcftestclient,回车 提取wcftestclient 当然,可以看到VS2015 开发人员命令提示知道,当前路径在C ...
随机推荐
- [ABC280F] Pay or Receive
Problem Statement There are $N$ towns numbered $1,\ldots,N$ and $M$ roads numbered $1,\ldots,M$. Roa ...
- 通过 VS Code 优雅地编辑 Pod 内的代码(非 NodePort)
目录 1. 概述 2. NodePort 方式 3. Ingress 方式 4. 救命稻草 5. 其他 1. 概述 今天聊点啥呢,话说,你有没有想过怎样用 VS Code 连上 K8s 集群内的某个 ...
- Mybatis-Flex之QueryWrapper
1.完整DQL语句 /** * 使用QueryWrapper构建超复杂SQL语句 */ @Test public void testQueryWrapper1() { QueryWrapper wra ...
- CompletableFuture入门
CompletableFuture入门 1.Future vs CompletableFuture 1.1 准备工作 先定义一个工具类 import java.nio.file.Files; impo ...
- Educational Codeforces Round 160 (Rated for Div. 2) 题解A~D
Educational Codeforces Round 160 (Rated for Div. 2) A. Rating Increase 纯暴力,分割字符串,如果n1<n2就输出,如果遍历完 ...
- Pikachu漏洞靶场 URL重定向
URL重定向 点击 我就是我,放荡不羁的我 可以发现url是这样的: http://192.168.171.30/pikachu/vul/urlredirect/urlredirect.php?url ...
- 确定了-C#是2023年度的编程语言!
大家好,我是沙漠尽头的狼.在朋友圈看到桂素伟大佬发的喜讯截图,站长赶紧翻译向大家报喜,确定了-C#是2023年度的编程语言! 在TIOBE指数的历史上,C#首次获得了年度编程语言的奖项.祝贺!二十多年 ...
- P1967 [NOIP2013 提高组] 货车运输 做题记录
套路题了. 根据和角公式 \(\mathrm{\sin (\alpha + \beta) = \sin \alpha \cos \beta + \cos \alpha \cos \beta, \cos ...
- B 树和 B+ 树及其实现
B 树 B 树和一般的二叉树有许多相似的地方,二者都是为了加快查找的速度,不同之处在于 B 树是为了解决大量的数据而产生的,更加适合读取相对大的数据块的存储系统.B 树的每个节点一般不会存储实际的数据 ...
- 从传统行业到半导体行业开发(YMS,DMS,EAP,EDA)
一线开发人: 今天半导体YMS 项目快要收尾了,我的心情有点高兴,多年来我一直保持着写作的习惯,总是想写一些什么,今天但是又不知道从何说起.自己从传统的行业转向左半导体行业开发.从电*机如软件开发到电 ...