linux下流媒体压力测试工具的使用

前言

因为领导要求做linux的推拉流时服务器压力测试,于是在网上找了找。一顿操作下来,发现很多软件盗用一款名为srs-bench的开源软件。
在这里插入图片描述

该代码仓库有详细的使用说明,而且可以在issues中找到可能会遇到的问题的解决办法

需要下载该仓库的源码自行在linux上编译


测试环境:

  • centos9和麒麟V10均已编译成功

1.将仓库克隆到本地,这里注意需要下载指定分支

git clone https://github.com/ossrs/srs-bench.git

2.进入文件夹

cd srs-bench/

构建

#先给configure文件可执行权限
chmod 777 configure#构建 
./configure    

不出意外,出问题了
在这里插入图片描述

我们需要修改文件把这个错误忽略

将srs-bench/3rdparty/http-parser-2.1.zip文件里的Makefile里的CFLAGS += -Wall -Wextra -Werror改为CFLAGS += -Wall -Wextra。我市将压缩文件拷出来,解压修改完再压缩成zip,替换回去

再次构建,构建成功

./configure 

在这里插入图片描述

3.编译

make

如果幸运的话,直接就编译成功了

在这里插入图片描述

objs/里面的程序就是我们需要的

#拉1路流
./sb_rtmp_load -c 1 -r rtmp://127.0.0.1/live/test#拉100路流
./sb_rtmp_load -c 100 -r rtmp://127.0.0.1/live/test#推1路流
./sb_rtmp_publish -i test.flv -c 1 -r rtmp://127.0.0.1/live/livestream#推100路流
./sb_rtmp_publish -i test.flv -c 10 -r rtmp://127.0.0.1/live/livestream_{i}

好像必须flv格式的视频才能被推上去

我在编译过程遇到了下面的错误

g++  -o objs/sb_http_load objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
objs/src/core/htl_core_uri.o: In function `ProtocolUrl::Initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:59: undefined reference to `context'
/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:59: undefined reference to `context'
/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:59: undefined reference to `context'
/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:59: undefined reference to `context'
objs/src/core/htl_core_uri.o: In function `RtmpUrl::Initialize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:199: undefined reference to `context'
objs/src/core/htl_core_uri.o:/home/suhui/work/git/srs-bench/src/core/htl_core_uri.cpp:199: more undefined references to `context' follow
collect2: error: ld returned 1 exit status
objs/Makefile:79: recipe for target 'objs/sb_http_load' failed
make[1]: *** [objs/sb_http_load] Error 1
make[1]: Leaving directory '/home/suhui/work/git/srs-bench'
Makefile:31: recipe for target 'all' failed
make: *** [all] Error 2

我在代码仓库的issues中找到了答案

原因是configure生成Makefile不严谨,新版本lld检查问题。我们需要修改某个文件

修改srs-bench/objs/Makefile文件。

搜索# build objs/sb_http_load,将该行以下的所有内容用如下内容替换

# build objs/sb_http_load
sb_http_load: objs/sb_http_load
objs/sb_http_load: objs/src/main/htl_main_http_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o $(LINK)  -o objs/sb_http_load objs/src/main/htl_main_http_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl
# build objs/sb_rtmp_load
sb_rtmp_load: objs/sb_rtmp_load
objs/sb_rtmp_load: objs/src/main/htl_main_rtmp_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o $(LINK)  -o objs/sb_rtmp_load objs/src/main/htl_main_rtmp_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl
# build objs/sb_rtmp_load_fast
sb_rtmp_load_fast: objs/sb_rtmp_load_fast
objs/sb_rtmp_load_fast: objs/src/main/htl_main_rtmp_load_fast.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o $(LINK)  -o objs/sb_rtmp_load_fast objs/src/main/htl_main_rtmp_load_fast.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl
# build objs/sb_rtmp_publish
sb_rtmp_publish: objs/sb_rtmp_publish
objs/sb_rtmp_publish: objs/src/main/htl_main_rtmp_publish.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o $(LINK)  -o objs/sb_rtmp_publish objs/src/main/htl_main_rtmp_publish.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl
# build objs/sb_hls_load
sb_hls_load: objs/sb_hls_load
objs/sb_hls_load: objs/src/main/htl_main_hls_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o $(LINK)  -o objs/sb_hls_load objs/src/main/htl_main_hls_load.o objs/src/core/htl_core_log.o objs/src/core/htl_core_error.o objs/src/core/htl_core_uri.o objs/src/core/htl_core_aggregate_ret.o objs/src/os/htl_os_st.o objs/src/app/htl_app_hls_load.o objs/src/app/htl_app_http_load.o objs/src/app/htl_app_http_client.o objs/src/app/htl_app_rtmp_play.o objs/src/app/htl_app_m3u8_parser.o objs/src/app/htl_app_task_base.o objs/src/app/htl_app_rtmp_load.o objs/src/app/htl_app_rtmp_protocol.o objs/src/app/htl_app_rtmp_publish.o objs/src/app/htl_app_srs_hijack.o objs/st-1.9/obj/libst.a objs/http-parser-2.1/libhttp_parser.a -ldl

保存之后再次make即可成功


码字不易,如果这篇博客对你有帮助,麻烦点赞收藏,非常感谢!有不对的地方

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/158989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568开发板在工控工业物联网网关方面的应用

在数字化转型的浪潮中&#xff0c;工控物联网关产品扮演着重要的角色。这些产品通过连接工业设备和网络&#xff0c;为数据传输和分析提供了便利。而迅为RK3568核心板作为一款高性能的芯片&#xff0c;为工控物联网关产品的性能提升和功能扩展提供了强大的支持。 迅为RK3568核心…

基于JAVA+SpringBoot+VUE+微信小程序的前后端分离咖啡小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会的快速发展和…

2023年约特干故城夜间演艺《万方乐奏有于阗》完美谢幕

11月19日&#xff0c;记者走进约特干故城看到演员在欢乐地跳着刀郎舞和古典舞&#xff0c;庆祝今年以来夜间演艺《万方乐奏有于阗》演出200场完美谢幕。 11月19日在约特干故城&#xff0c;演员正在表演迎宾乐舞。阿卜力克木依卜拉依木摄 当天晚上&#xff0c;城楼上旌旗猎猎&am…

Java-接口

接口 接口 接口就是公共的行为规范,只要实现时符合标准就可以通用. 接口可以看成是: 多个类的公共规范,是一种引用数据类型. 使用关键字interface实现接口. 接口是不能被实例化的. 接口中的成员变量默认是 public static final 接口中只能有抽象方法,当中的方法不写,也是pu…

C语言中的多线程调用

功能 开启一个线程&#xff0c;不断打印传进去的参数&#xff0c;并且每次打印后自增1 代码 #include<windows.h> #include<pthread.h> #include<stdio.h>void* print(void *a) {int *ic(int*)a;float *fc(float*)(asizeof(int)*2);double *dc(double*)(as…

拆解现货黄金隔夜利息计算公式

在讨论现货黄金投资手续费的时候&#xff0c;隔夜利息是经常被忽略的一个方面&#xff0c;但它是投资者不得不考虑的成本因素&#xff0c;特别是在中长线交易的情况下。隔夜利息是根据投资者的持仓数量和交易方向所计算出的利息&#xff0c;如果投资者需要持仓过夜&#xff0c;…

9.3 Windows驱动开发:内核解析PE结构节表

在笔者上一篇文章《内核解析PE结构导出表》介绍了如何解析内存导出表结构&#xff0c;本章将继续延申实现解析PE结构的PE头&#xff0c;PE节表等数据&#xff0c;总体而言内核中解析PE结构与应用层没什么不同&#xff0c;在上一篇文章中LyShark封装实现了KernelMapFile()内存映…

Transformer的一点理解,附一个简单例子理解attention中的QKV

Transformer用于目标检测的开山之作DETR&#xff0c;论文作者在附录最后放了一段简单的代码便于理解DETR模型。 DETR的backbone用的是resnet-50去掉了最后的AdaptiveAvgPool2d和Linear这两层。 self.backbone nn.Sequential(*list(resnet50(pretrainedTrue).children())[:-2…

LabVIEW如何获取波形图上游标所在位置的数值

LabVIEW如何获取波形图上游标所在位置的数值 获取游标所在位置数值的一种方法是利用波形图的游标列表属性。 在VI的程序框图中&#xff0c;右键单击波形图并选择创建引用 &#xff0c;然后将创建的引用节点放在程序框图上。 在程序框图上放置一个属性节点&#xff0c;并将其…

聚焦数字化项目管理——2023年PMI项目管理大会亮点回顾

11月18日-19日&#xff0c;由PMI&#xff08;中国&#xff09;主办的2023年PMI项目管理大会在上海浦东嘉里大酒店圆满召开。本次大会以“数智时代&#xff0c;汇创未来”为主题&#xff0c;聚焦数智时代大背景下的项目管理行业发展和人才培养&#xff0c;吸引了海内外千余名项目…

基于Android校园交流uniAPP+vue 微信小程序v7e1

本系统结合现今XX校园交流APP的功能模块以及设计方式进行分析&#xff0c;使用Android平台和Ssm框架进行开发设计&#xff0c;具体研究内容如下&#xff1a; (1) 系统管理员主要对用户管理、类型管理、娱乐天地管理、投诉举报管理、学习平台、我的收藏管理、系统管理等功能进…

wvp-gb28181-pro打包

生成可执行jar cd wvp-GB28181-pro mvn package复制错误已复制 生成war cd wvp-GB28181-pro mvn package -P war 生成的包的路径 wvp-GB28181-pro\target

海康威视监控相机的SDK与opencv调用(非工业相机)

1.研究内容 本篇主要对海康威视的监控相机的SDK回调进行研究&#xff0c;并于opencv结合&#xff0c;保存图像,以供后续其他处理&#xff0c;开发语言为C 2.步骤及方法 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境&#xff0c;下载对应的SDK&#xff0c;需要注意的是…

身份证号码校验

根据《新版外国人永久居留身份证适配性改造要点》&#xff0c;公司需要把代码中对身份证的校验进行优化 就文档内容可以看到需要优化的要点是&#xff1a; 新版永居证号码以 9 开头 受理地区代码出生日期顺序码校验码&#xff1b;&#xff08;共18位&#xff09; eg&#xff…

渗透工具---BurpSuite 插件开发之HelloWorld

本文主要记录如何利用burp官方的新版API即MontoyaApi 写helloworld&#xff08;上一篇的demo使用旧版api写的&#xff0c;这篇及后续开发将采用新版api&#xff09; 先看效果图 更多详细内容见下方 这里有更详细更全面的代码内容 以及配置相关的内容 https://mp.weixin.qq.co…

HarmonyOS ArkTS 基础组件的使用(四)

1 组件介绍 组件&#xff08;Component&#xff09;是界面搭建与显示的最小单位&#xff0c;HarmonyOS ArkUI声明式开发范式为开发者提供了丰富多样的UI组件&#xff0c;我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类&#xff1a;…

为什么要学习 Linux?

为什么要学习 Linux&#xff1f; 用 Linus 本人的话来说&#xff0c;用户不需要接触到操作系统。操作系统的功能是给应用程序提供API&#xff0c;因而&#xff0c;只有开发人员才需要学习操作系统。 最近很多小伙伴找我&#xff0c;说想要一些Linux的资料&#xff0c;然后我根…

【Unity细节】如何调节标签图标的大小(select icon)—标签图标太大遮住了物体

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

C/C++结构体给函数传参

C语言中结构体给函数传参有两种方法&#xff1a; 1.值传递&#xff08;修改形参不改变原值&#xff09; void fun(STUDENT student){……} int main(){fun(student); }2.引用传递&#xff08;传的是地址&#xff0c;修改形参会改变原值&#xff09; void fun(STUDENT * stud…

FPGA语法相关知识合集

一.相关概念 1.四种结构说明语句 2.initial 与 always 的异同点 3.task 与 function 的3个不同点 4.task的语法结构(定义及调用) 5.function的语法结构(定义及调用) 6.function 的一个必须有和一个必须没有&#xff0c;使用规则 7.自动&#xff08;递归&#xff09;函数…