Nginx-rtmp实现直播媒体实时流效果

0. 前言

  这段时间在搭建一个IPCamera项目服务器。视频点对点通话,客户端会查看设备端的音视频实时流。为了省流量,是通过P2P进行穿透。但是由于NAT设备的原因和IPV4的枯竭。有些设备是无法进行点对点传输实时流。所以需要进行服务器转发。这里为了快速实现原型,同时参考现在主流的流媒体协议。发现很多使用的是RTMP协议。

  下图是总体设计图,为了整合多平台,会自建RTMP流媒体服务器和使用云厂商SaaS的RTMP流媒体服务。但是由于有时候会传输一些非流媒体数据,需要传输一些二进制文件,所以会需要自定义媒体转发服务。

  以下是我实际项目中,用到的架构实现流程图。

Nginx-rtmp实现直播媒体实时流效果

?

1. 编译Nginx

  RTMP流媒体服务器,现成的开源方案有很多,有SRS,Red5,wowoza,FMS等,我这里使用的是Nginx的rtmp插件实现实时流转发。

  下载 nginx-rtmp-module  https://github.com/arut/nginx-rtmp-module

  重新编译nginx

?

2. 配置Nginx.conf

  基本的nginx配置,这里就不进行介绍了,需要了解的可以参考我其他博客,里面有介绍。这里只介绍rtmp段的定义。

?

3. HTTP异步通知回调

   Nginx-rtmp-module插件实现了针对RTMP协议的一些命令做了事件通知。这里我通过一个简单的SpringBoot项目,快速搭建一个HTTP服务来接收RTMP的回调。

?

4. 运行效果

  (1) 启动nginx和SpringBoot

  (2) 以下是SpringBoot打印信息(各位可以简单分析一下这些日志的)

?

(3) 客户端进行推流,这里的推流软件,我是使用这个 http://www.iavcast.com/html/ruanjian/iavcast.html

Nginx-rtmp实现直播媒体实时流效果

  (4) 移动端,我使用微信小程序里的 腾讯视频云  这个小程序里面有RTMP测试

Nginx-rtmp实现直播媒体实时流效果

  (5) nginx-rtmp 日志

?

5. RTMP鉴权方式

   一般商用的话,为了防止被其他人使用和安全性考虑,所以需要对RTMP进行鉴权处理。鉴权如果有特殊性的,可以通过修改nginx-rtmp-module的源代码,然后进行修改,其实就是增加个auth函数,这个函数可以查询数据库之类的,然后决定返回0成功还是-1表示失败。

  除了上面说到的方式,还可以通过简单的方式,就是上面提到的HTTP回调。如果HTTP回调返回的HTTP状态码是2xx的,表示成功。如果是返回5xx的状态码,那么表示失败。那样的话,服务器就是断开RTMP连接。

  就是在 rtmp://rtmp.wunaozai.com/rtmp_live/room?username=username&password=password

  至于实现,这里暂时还没有,其实就是在SpringBoot项目中对每个请求,判断一下参数即可。如果后面有机会就详细写一下,关联Redis数据库,实现房间号功能。但是可能不会写了,因为实际上不难。就是整个流程跑通还是比较多代码要写的,在博客里贴太多代码有点不好。博客最主要的还是提供思路。实际实现就应该在项目中实现了。

6. 其他

  这里是一些配置说明和示例

 

?

总结

以上所述是小编给大家介绍的Nginx-rtmp实现直播媒体实时流效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.cnblogs.com/wunaozai/p/9427730.html



相关文章
推荐文章
热门文章

微信公众号推荐

相关推荐