freeswitch带媒体压力测试方案

这篇具有很好参考价值的文章主要介绍了freeswitch带媒体压力测试方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

freeswitch 带宽,技术-VOIP,媒体,压力测试,voip,freeswitch

 

概述

原本的计划是使用sipp完成带媒体压力测试,但是实际测试过程中发现sipp的媒体处理功能有问题(也有可能是我使用的姿势不对)。

sipp在带媒体的情况下(600路并发开始),出现大量的不响应和响应延迟,UAC和UAS都有该问题,猜测是sipp内部处理大量媒体的情况下,业务逻辑出现阻塞。

新的方案采用2台fs对接,增加的1台fs模拟UAC和UAS,使用python脚本发起呼叫并控制并发。

环境

centos7.9

freeswitch 1.10.7

python2.7.5

freeswitch压力测试服务器配置,cpu96线程核,内存32G。

freeswitch模拟服务器配置,cpu16线程核,内存32G。

对接方案

2台fs对接带媒体压测方案,见图。

freeswitch 带宽,技术-VOIP,媒体,压力测试,voip,freeswitch

 

fs配置

fs压力测试服务器,IP地址为192.168.1.2,开放3060和5066端口。

压测服务器的呼叫A路从3060端口进入,从5066端口呼出B路。拨号计划如下。

cat sbc-dp.xml

<include>

       <X-PRE-PROCESS cmd="set" data="callout_answer_timeout=60"/>

       <context name="out2in">

              <extension name="sbc-out2in" continue="true">

                     <condition field="${acl(${network_addr} 192.168.1.1/32)}" expression="true"/>

                     <condition field="destination_number" expression="^(\d+)$">

                            <action application="limit" data="hash cps all 500/1 !EXCHANGE_ROUTING_ERROR"/>

                            <action application="limit" data="hash capacity all 5000 !EXCHANGE_ROUTING_ERROR"/>

                            <action application="set" data="effective_caller_id_name=_undef_" />

                            <action application="set" data="effective_caller_id_number=${translate(${caller_id_number} GB-CALLER-IN)}" />

                            <action application="set" data="destination_number=${translate(${destination_number} GB-DEST-IN)}" />

                            <action application="set" data="inherit_codec=true"/>

                            <action application="export" data="absolute_codec_string=G729,PCMA" />

                            <action application="export" data="rtp_codec_negotiation=greedy" />

                            <action application="set" data="sip_copy_custom_headers=false"/>

                            <action application="export" data="passthrough180=true" />

                            <action application="export" data="ringback=${cn-ring}"/>

                            <action application="bridge" data="{sip_invite_call_id=${sip_call_id}

                                   }sofia/external5066/sip:${destination_number}@192.168.1.1:5080"/>

                     </condition>

              </extension>

       </context>

</include>

fs模拟服务器,IP地址为192.168.1.1,开放5080端口,呼入呼出都使用5080端口。

模拟UAS侧的呼叫处理,拨号计划如下。

cat test.xml

<include>

       <context name="public">

              <extension name="sbc-uas" continue="true">

                     <condition field="destination_number" expression="^(\d+)$">

                            <action application="set" data="inherit_codec=true"/>

                            <action application="export" data="absolute_codec_string=PCMA" />

                            <action application="export" data="rtp_codec_negotiation=greedy" />

                            <action application="pre_answer" />

                            <action application="sleep" data="500" />

                            <action application="answer" />

                            <action application="playback" data="/usr/local/freeswitch/sounds/ponce-preludio-in-e-major" />

                     </condition>

              </extension>

       </context>

</include>

其中的playback放音文件要准备多个格式的文件,防止UAS侧因为转码而消耗cpu。

ll /usr/local/freeswitch/sounds/

-rw-r--r--. 1 root root  140220 4月   6 11:20 ponce-preludio-in-e-major.G729

-rw-r--r--. 1 root root 1121760 4月   6 11:20 ponce-preludio-in-e-major.PCMA

-rw-r--r--. 1 root root 2243628 10月 12 14:09 ponce-preludio-in-e-major.wav

模拟UAC侧的呼叫发起由python脚本实现,见下一章。

python脚本

python脚本中使用fs的esl接口对接,通过循环调用fs的originate接口发起呼叫,通过参数方式设置cps、duration、capacity等信息,通过配置文件方式设置主被叫号码。

cat test-media.py

# coding=utf-8

#!/usr/bin/python2

#add by zr 20230404

#大并发场景下的语音媒体流压力测试

#根据配置的号码,批量并发拨测

import ESL

import time

import sys

#USAGE: python test-media.py cps duration calltotal

#PS: python test-media.py 10 30 100

cps = int(sys.argv[1])

duration = int(sys.argv[2])

calltotal = int(sys.argv[3])

callinterval = float(1)/cps

print('cps=%d, duration=%d, calltotal=%d, callinterval=%f' % (cps, duration, calltotal, callinterval))

con = ESL.ESLconnection('localhost', '8021', 'ClueCon')

if con.connected():

    pass

    # con.events('plain', 'CHANNEL_CREATE')

    #con.events('plain', 'CHANNEL_ANSWER')

    #con.events('plain', 'CHANNEL_HANGUP')

else:

    print("ESLconnection failed")

    exit()

fo = open('./test_multi.ini', 'r')

while calltotal > 0:

    line = fo.readline().strip()

    if not line:

        print('line is null')

        fo.seek(0)

        time.sleep(callinterval)

        continue

    if line.startswith('#'):

        print('line is ###')

        time.sleep(callinterval)

        continue

    calltotal = calltotal - 1

   

    caller, callee = line.split(' ')

    print('line=%s, %s' % (caller, callee))

    callstr =   ("originate {origination_caller_id_number=%s}"

                "[absolute_codec_string=^^:G729:PCMA]"

                "[execute_on_answer='sched_hangup +%d']sofia/external/%s@192.168.1.2:3060 "

                "&echo()"

                % (caller, duration, callee))

    print('callstr=%s' % (callstr))

    con.bgapi(callstr)

    time.sleep(callinterval)

fo.close()

con.disconnect()

配置文件如下。

cat test_multi.ini

#caller callee

10000 20000

10001 20001

10002 20002

测试

使用python脚本发起呼叫测试。

脚本参数含义为,每秒发起1通,接通后10秒挂断,总共发起2通呼叫。

python test-media.py 1 10 2

cps=1, duration=10, calltotal=2, callinterval=1.000000

line is ###

line=10000, 20000

callstr=originate {origination_caller_id_number=10000}[absolute_codec_string=^^:G729:PCMA][execute_on_answer='sched_hangup +10']sofia/external/20000@192.168.1.2:3060 &echo()

line=10001, 20001

callstr=originate {origination_caller_id_number=10001}[absolute_codec_string=^^:G729:PCMA][execute_on_answer='sched_hangup +10']sofia/external/20001@192.168.1.2:3060 &echo()

总结

通过修改UAC侧的python脚本中的“absolute_codec_string”变量,和UAS侧的dialplan中的“absolute_codec_string”变量,可以对不同的媒体流方式进行压力测试。

脚本命令使用“python test-media.py 44 50 44000”,即每秒发起44通呼叫,接通50秒后挂断,总共发起44000通呼叫。

SBC的AB路媒体为PCMA-PCMA,压测结果如下。

82sps,4100session,cpu4.5%,A路带宽占用162Mbps,B路带宽占用162Mbps。

SBC的AB路媒体为G729-G729,压测结果如下。

82sps,4100session,cpu5.5%,A路带宽占用59Mbps,B路带宽占用59Mbps。

SBC的AB路媒体为G729-PCMA,转码场景压测结果如下。

42sps,2096session,cpu37%,A路带宽占用31Mbps,B路带宽占用85Mbps。

62sps,3176session,cpu60%,A路带宽占用46Mbps,B路带宽占用129Mbps。

80sps,4000session,cpu86%,A路带宽占用58Mbps,B路带宽占用160Mbps。

空空如常

求真得真文章来源地址https://www.toymoban.com/news/detail-728614.html

到了这里,关于freeswitch带媒体压力测试方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第一部分-基础篇-第一章:PSTN与VOIP(下篇)

      学习资料来源《FreeSWITCH权威指南》-作者杜金房这本书。我是2022年6月毕业的,偶然的机会接触到FreeSWITCH,但是目前在南京从事java后端开发,FreeSWITCH纯属个人爱好,进行笔记整理。也一直希望有机会可以参与FreeSWITCH相关工作开发,如有需要,请联系我18956043585,先说声谢

    2024年02月06日
    浏览(53)
  • IP网络电话与voip网络电话两者之间有什么差异

    概括来说,网络电话是指以IP为网络层协议的计算机网络中进行话音通讯的系统,它采用的技术统称为VoIP(Voiceover IP),即借助网络实现语音的传送。而从技术上来说,IP网络电话则是以IP为标志的网络分组化和以多媒体为目标的网络业务综合化两大主流技术融合的结果。 随着网

    2024年02月06日
    浏览(46)
  • 猿创征文|【FreeSwitch开发实践】使用sipp对FreeSwitch进行压力测试

    ✨ 博客主页:小小马车夫的主页 ✨ 所属专栏:FreeSwitch开发实践 ✨ 专栏介绍:主要介绍博主在实际项目中使用FreeSwitch开发外呼类项目的一些经验心得,主要涉及FreeSwitch的基本安装编译、基本配置、ESL、WSS、录音、自定义模块、media bug、语音播放、MRCP及对接AI机器人等内容

    2024年02月03日
    浏览(41)
  • Ubuntu下载kamailio源码并配置实现VoIP服务器(一条龙服务,从无到有的搭建)

    1、安装Kamailio依赖包 打开终端,并运行以下命令以安装 Kamailio 的依赖软件包: sudo apt update sudo apt install bison flex libssl-dev libxml2-dev libcurl4-openssl-dev libpcre3-dev libjson-c-dev libyaml-dev libsystemd-dev pkg-config 2、下载github并从github下载源码 1 )下载 github sudo apt update sudo apt install git 2 )下

    2024年02月04日
    浏览(50)
  • 顶顶通呼叫中心中间件机器人压力测试配置(mod_cti基于FreeSWITCH)

    介绍 顶顶通呼叫中心中间件机器人压力测试(mod_cit基于FreeSWITCH) 一、配置acl.conf 打开ccadmin-》点击配置文件-》点击acl.conf-》我这里是已经配置好了的,这里的192.168.31.145是我自己的内网IP,你们还需要自行修改 二、配置线路 打开ccadmin-点击线路-》配置拨号串: sofia/external/${

    2024年01月24日
    浏览(43)
  • 如何用P2P技术为SRS媒体服务器节省带宽成本

        直播流的重要性在当今社会已无需多言,动辄上百万人同时在线的直播场景也已屡见不鲜。随着越来越多的观众收看直播,如何有效降低带宽成本,提升播放体验已成为各大视频厂商和创业者共同面对的技术难题。假设有 10,000 名观众观看相同 1Mbps 比特率流的直播场景

    2024年02月22日
    浏览(38)
  • 使用jmeter的HLS插件进行流媒体的压力测试

    目录 一、准备 二、使用步骤 1.添加HLS插件 2. 示例 最近项目中开始做国标的项目,需要进行视频流的压力测试,在前端界面基本上最多也就是16宫格,想要测试更多的视频流,就需要使用jmeter中的HLS Plugins来进行压力测试(能自己写脚本的更好),下面就是本人进行视频流测

    2024年02月11日
    浏览(40)
  • FreeSWITCH添加自定义endpoint之媒体交互

    操作系统 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9   之前写过FreeSWITCH添加自定义endpoint的文章: https://www.cnblogs.com/MikeZhang/p/fsAddEndpoint20230528.html 今天记录下endpoint媒体交互的过程并提供示例代码及相关资源下载,本文涉及示例代码和资源可从如下渠道获取: 关注微信公众号(聊聊

    2024年02月14日
    浏览(31)
  • 虹科 | 解决方案 | 机械免拆压力测试方案

    对于发动机的气门卡滞或气门开闭时刻错误、活塞环磨损、喷油嘴泄漏/堵塞等故障,往往需要解体发动机或拆卸部件才能发现;而对于某些轻微的故障,即使解体了发动机后也经常难于肉眼判别 虹科Pico提供的WPS500压力测试方案,可以动态测试汽车系统的压力波形,在不解体

    2024年02月05日
    浏览(54)
  • 电子产品如何设计和实施上下电压力测试方案?

    目录 一、引言 二、测试方案步骤 三、设计方案介绍 3.1 设计思路 3.2 实现方法说明 3.2.1 测试板原理框图 3.2.2 跳变沿检测法 3.2.2.1 接线方式 3.2.2.2 检测流程 3.2.2.3 参考代码  3.2.3 字符串匹配法 3.2.3.1 接线方式 3.2.3.2 检测流程 3.2.3.3 实现代码 3.2.4 继电器控制法 3.2.4.1 接线方式

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包