高性能流媒体服务器nginx-http-live-module

        nginx-rtmp-module实现了开创性的工作,但是,实际上它的完成度并不高,缺少的功能和缺陷在前面的文章中已有提及。如果要在实际生产环境中使用,必须进行大量的修改。

        nginx-http-flv-module部分解决了一些问题,也由于我本身有些知识和测试环境所限,有些问题的解决周期很长甚至无法解决。不管怎样,nginx-http-flv-module能成长成今天这个样子,离不开contributors(github里的统计不全,其实加我自己一共有6人)的贡献和网友们的测试和反馈。

        nginx-http-flv-module的vhost功能一直不能完美在多进程模式下运行,这个问题从有网友反馈到现在已经有快一年的时间了,期间我在CSDN,OSChina,segmentfault,Google Group,知乎甚至脉脉(还被怼了,说我发广告)都求助过,一直没有反馈,直到最近才彻底解决了这个问题。

        另外,前面的文章分析过nginx-rtmp-module在多进程模式下auto push功能有效率低下的问题,不过考虑到一般情况下publishers要比subscribers少很多,在一般场景下,nginx-rtmp-module可以胜任了。服务器压力测试表明,推流2000基本上是极限,下文会给出压力测试录屏的截图(推流还没完全稳定时,有一小段时间各个CPU的使用率都是100%)。

        nginx-http-flv-module这个名称当初没如何考虑就起了,后来发现跟Nginx本身的ngx_http_flv_module的有点混淆,还有几个网友问过它们有什么区别。上述的一些问题在新的项目nginx-http-live-module中已经解决,这个项目不再开源,有需要的可以通过我的github主页的邮箱跟我联系。nginx-http-flv-module我会继续维护,nginx-http-live-module的有些功能,过一段时间后我会考虑移到nginx-http-flv-module。

        nginx-http-live-module除了nginx-http-flv-module已有的功能以外,还增加了一些功能,解决了一些问题:

1.vhost功能不能完美在多进程模式下运行。

2.auto push功能在多进程模式下效率低下。

3.多进程模式下pull同源合并。

4.支持rtmps,作为服务器已经没有问题了,作为下游服务器时还有些问题没有解决。

        Nginx绝大多数情况下是以多进程方式运行的,得益于Nginx良好的基础设施,nginx-http-live-module才可能解决auto push功能在多进程模式下效率低下的问题,并发量提高了至少4倍。

        好像各大网站都不太支持上传视频,下面给出nginx-http-live-module在多进程模式下使用原生的auto push和cond pull(我自己起的名)的压力测试对比录屏截图。

服务器配置:20个CPU(Intel(R) Xeon(R) CPU E5-2640 v4 @ 2.40GHz),64G内存(16G x 4,DDR4,2400MT/s),操作系统CentOS 7.6。

压力测试工具:srs-bench

压力测试视频:srs-bench自带的视频,视频编码H.264,音频编码AAC,码率240kbps左右。

Nginx配置:20个worker进程,开启CPU绑定,支持SO_REUSEPORT选项,无惊群效应。

1.首先是开启原生的auto push后的压力测试录屏截图:

软硬件基本信息
刚启动后的Nginx信息
推流2000路
推流2000路稳定后的Nginx信息
拉流1000路mystream_999
拉流1000路mystream_999后的Nginx信息
拉流1000路mystream_1999
拉流1000路mystream_1999后的Nginx信息
拉流1000路mystream_999的统计信息
拉流1000路mystream_1999的统计信息
推流2000路和拉流2000路稳定后的Nginx信息

 

2.然后是开启cond pull后的压力测试录屏截图:

软硬件基本信息
刚启动后的Nginx信息
推流8000路
推流8000路稳定后的Nginx信息
rtmp方式拉流1000路mystream_999
拉流1000路mystream_999后的Nginx信息
rtmp方式拉流1000路mystream_1999
拉流1000路mystream_1999后的Nginx信息
rtmp方式拉流1000路mystream_2999
拉流1000路mystream_2999后的Nginx信息
rtmp方式拉流1000路mystream_3999
拉流1000路mystream_3999后的Nginx信息
http-flv方式拉流1000路mystream_4999
拉流1000路mystream_4999后的Nginx信息
http-flv方式拉流1000路mystream_5999
拉流1000路mystream_5999后的Nginx信息
http-flv方式拉流1000路mystream_6999
拉流1000路mystream_6999后的Nginx信息
http-flv方式拉流1000路mystream_7999
拉流1000路mystream_7999后的Nginx信息
推流8000路的统计信息
rtmp方式拉流1000路mystream_999的统计信息
rtmp方式拉流1000路mystream_1999的统计信息
rtmp方式拉流1000路mystream_2999的统计信息
rtmp方式拉流1000路mystream_3999的统计信息
http-flv方式拉流1000路mystream_4999的统计信息
http-flv方式拉流1000路mystream_5999的统计信息
http-flv方式拉流1000路mystream_6999的统计信息
http-flv方式拉流1000路mystream_7999的统计信息
推流8000路和拉流8000路稳定后的Nginx信息(1)
推流8000路和拉流8000路稳定后的Nginx信息(2)
推流8000路和拉流8000路稳定后的Nginx信息(3)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章