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后的压力测试录屏截图:
2.然后是开启cond pull后的压力测试录屏截图: