首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流

《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2.2  FFmpeg向网络推流”介绍了轻量级流媒体服务器MediaMTX,虽然MediaMTX使用很简单,可是不能满足复杂的业务需求,故而实际应用中需要引入专业的流媒体服务器。 nginx-rtmp是开源WEB服务器Nginx可增强的第三方rtmp模块,该模块封装了rtmp服务器,可以提供简单的rtmp流媒体服务器功能。由于Nginx本身是个高性能的WEB服务器,支持代理分发多种协议的数据,因此通过Nginx集成RTMP服务器也是个可行的方案。Nginx默认没开启rtmp模块,需要在编译nginx时添加rtmp模块,还要修改配置文件才能开启rtmp服务。 因为nginx+rtmp在Windows环境的编译过程非常麻烦,不但要考虑各种依赖包的版本兼容问题,还要注意MSYS与Visual Studio命令行的切换问题,所以这里只讲述如何在Linux环境给Ngixn集成rtmp模块,详细的集成步骤说明如下。

01

Go语言实现的流媒体服务器开发框架

市面上的流媒体服务器不可谓不多,从本人的第一份工作起,就一直接触和研究了形形色色的流媒体服务器,从最早的FCS(全称Flash Communication Server),后来改名为FMS(全称Flash Media Server),到Red5(java语言开发),到CrtmpServer(C++开发),让我对流媒体服务器的基本原理有了深刻的认识。当时本人痴迷C#,于是乎在业余时间对crtmpServer的代码进行移植,用C#仿照着写了一遍取名为csharprtmp,并且适当的增强了一些功能,于是对rtmp协议了如指掌。后来Adobe推出了RTMFP协议,是一种p2p协议,十分节省带宽。我就又开始研究一款名为OpenRTMFP的开源项目,后来该项目改名为MonaServer。我在起基础上进行了扩展,实现了一些例如录制flv,shareObject等原本FMS有的功能。后开发出了HTML5直播技术(现在命名为Jessibuca,尚未开源),采用的传输协议就是WebSocket传输裸的视频流的方式,属于私有协议。而Server当时就使用的MonaServer。但当时遇到一个问题,C++的内存泄漏问题,这个一直没有很好的解决。遂决定放弃使用MonaServer转而使用srs,而srs要用一个很简单的go写的小程序将http-flv转换成WebSocket的Flv来适配我的Jessibuca,感觉最好能直接修改srs来实现这个功能。对srs的源码研究了一小段时间后放弃了,因为C++代码过于难写,容易出现bug。后来转而使用golang写的gortmp作为server,同样对其进行了扩展,而且进展十分顺利,golang的开发效率令人惊叹,而且其协程的特性很完美的处理了流媒体服务器的并发的场景。所以使用golang写的流媒体服务器项目很多,github上随便一搜就有很多,比如livego、joy4等。期间还接触到一位使用Node.js实现的流媒体服务器Node Media Server,我也和作者交流了许多,收益良多。

02
领券