流媒体开发系列文章
文章目录
- 流媒体开发系列文章
- 前言
- 一、环境准备?
- 二、拉流测试过程
- 三、推流测试过程
- 三、延时测试
- 总结
前言
目前、比较有名的流媒体服务器有ZLMediaKit、srs、live555、eadydarwin等。因为srs是单线程服务、对于多核服务器的支持需要通过部署多个服务来充分利用多核特性,本文主要介绍一种通用的简单的可利用多核特性的流媒体服务器是ZLMediaKit,另外一方面其支持多种流媒体协议 rtsp、rtmp、httpflv、hls、fmp4、webrtc等,而且支持视频的直播、录制等功能。
流媒体服务器是流媒体应用的核心系统,是运营商向用户提供视频服务的关键平台。流媒体服务器的主要功能是对流媒体内容进行采集、缓存、调度和传输播放。流媒体应用系统的主要性能体现都取决于媒体服务器的性能和服务质量。因此,流媒体服务器是流媒体应用系统的基础,也是最主要的组成部分。
一、环境准备?
测试日期:2023/1/25
代码版本:git hash: 44f4e9acd434e5549276332aa454be18844db3a8
cpu: Intel® Core™ i7-10510U CPU @ 1.80GHz
操作系统:CentOS release 7.5(Final)
内存:6GB
网卡:127.0.0.1
测试码流: 1min.14000kbps.1080p.flv
编译器:gcc (GCC) 7.5
zlmediakit编译类型:Release(目标)
malloc库:ptmalloc(未开启jemalloc)
config.ini配置文件修改(主要开启合并写、按需转协议)
软件安装
1、zlmediakit 编译安装,参考安装运行zlm流程
2、nload (yum install nload)或者dstat(yum install dstat) dstat -N eth0/lo 30
3、perf(yum install perf)
4、1min.flv视频文件 h264+aac
二、拉流测试过程
推流命令
ffmpeg -stream_loop -1 -re -i /opt/data/code/ZLMediaKit/Download/1min.flv -acodec copy -vcodec copy -f flv rtmp://127.0.0.1/live/test
加大文件描述符个数
ulimit -n 102400
#启动1万个rtmp拉流
./test_bench_pull -c 1000 -i rtmp://127.0.0.1/live/test
查看建立的连接
netstat -anp|grep MediaServer|grep ESTABLISHED|wc -l
2.1 当对配置文件不做任何修改时,即mergeWriteMS=300,protocol_demand=1时
当路数增加到2000路时,发现运行一会就会出现send timeout,应该时系统调度不过来导致的。目前简单测试的话,能够稳定在1500左右,此时mediaserver 的cpu利用率已经200+%,test_bench_pull 150%+, load已经接近cpu个数的两倍了,性能达到了瓶颈。
top信息:
100路:
500路:
1000路
1500路:
2000路:已经不稳定了会出现路数降低,send timeout的问题。
nload信息:
100路
14000100=14Mbps100=1.4Gbps
500路
14000500=14Mbps1005=1.4Gbps5=7Gbps
1000路
13Gbps
1500路:
2000路:
27Gbps
三、推流测试过程
当路数增加到1000路时,发现运行一会就会出现send timeout,应该时系统调度不过来导致的。目前简单测试的话,能够稳定在700左右,此时mediaserver 的cpu利用率已经200+%,test_bench_pull 50%+, load已经接近cpu个数的两倍了,性能达到了瓶颈。
推流命令
ffmpeg -stream_loop -1 -re -i /opt/data/code/ZLMediaKit/Download/1min.flv -acodec copy -vcodec copy -f flv rtmp://127.0.0.1/live/test
加大文件描述符个数
ulimit -n 102400
#启动1万个rtmp推流
./test_bench_push -i rtmp://127.0.0.1/live/test -c 100 -o rtmp://127.0.0.1/live/push
查看建立的连接
netstat -anp|grep MediaServer|grep ESTABLISHED|wc -l
推流100路:
top
100路:
500路:
1000路:
nload
100路:
500路:
1000路:
三、延时测试
合并写延时改成0时(默认为0)即为最低延时模式; 大家测试延时时,可以使用webrtc播放来测试。
环境准备
网络环境:window push -》虚拟机linux server-》window play(同一台机器上运行)
操作系统:linux
服务器:启动参数 -t 1 ,单线程启动(避免线程之间切换)
测试方法
打开浏览器,打开在线秒表网页 https://miaobiao.51240.com/
设置OBS,截取浏览器秒表部分图像,开始推流给MediaServer
打开ffplay(nobuffer),播放对应的rtsp或rtmp url
使用截图工具,定格画面,并对比网页与ffplay播放器画面在线秒表时间差
obs设置:
推流地址:rtmp://192.168.31.49/live/test
拉流地址:rtmp://192.168.31.49/live/test
用vlc播放 延时2-3s,图1
用ffplay播放 延时<1s 图2 (ffplay -fflags nobuffer -i rtmp://192.168.31.49/live/test)
图1
图2:
其中srs中表示rtmp的延时可以做到0.8s
总结
目前在虚拟机上测试,基于本电脑运行了太多软件,实际应该比我测试的数据要高。通过本文的基本测试,推流1080p视频文件,按照14kpbs的码率进行推送,得出来部分性能路数以及播放时延效果。
通过本文的学习,希望对你有所帮助。