欢迎光临
我们一直在努力

Nginx rtmp协议的流媒体服务器

rtmp(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
它有三种变种:

  1. 工作在TCP之上的明文协议,使用端口1935;
  2. RTMPT封装在HTTP请求之中,可穿越防火墙;
  3. RTMPS类似RTMPT,但使用的是HTTPS连接;

RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。

Nginx rtmp协议的流媒体服务器

现在主要有两种rtmp server,商业的和开源的。商业的比开源的支持的功能多

商业的有FMS Wowza

FMS是Adobe公司的产品,license非常昂贵。下面就wowza这个商业软件讲下流媒体Server,不仅仅是RTMP Server,在达到生产环境所需要的功能。wowza最突出的特定是多终端适应性,这个在如今多媒体融合的网络环境下有很强的实用意义。究其原理并无深入研究。

Wowza Media Server是一款高性能、多线程的流媒体服务器软件。专为多种终端设备提供音视频内容播放服务,支持iOS、windows、Android、BlackMerry等系统的终端设备,以HTTP、RTSP/ RTP、RTMP传输协议的流播放,还支持利用机顶盒进行播放的IPTV。

开源RTMP server

  1. red5 java  有名
  2. crtmpserver c++ 支持多种rtmp协议,移动设备以及IPTV相关网络协议; Erlyvideo  erlong有开源和商业版本
  3. aXeVideo haXe 一个实验性的,轻量级的服务器
  4. FluorineFx .Net To be defined
  5. nginx-rtmp c nginx模块,支持rtmp和HLS

Nginx rtmp功能点

  • 支持音视频直播
  • 支持flv/mp4视频格式,输入可以是文件或者HTTP流
  • 支持两种流的分发模式 pushand pull
  • 可以将直播流录制成flv文件
  • H264/AAC编码
  • 支持在线转码 Online transcoding with FFmpeg
  • 支持HLS (HTTP LiveStreaming)需要 libavformat (>= 8. 53.31.100) from ffmpeg (ffmpeg.org)
  • HTTP callbacks (publish/play/record/update etc)
  • 支持外部程序(exec)
  • HTTP control module for recording audio/video and dropping clients
  • 先进内存控制技术,可以在使用少量内存的情况下完成流畅的直播功能。
  • 可以和以下协同工作。FMS server(Wirecast, FMS, Wowza,)Player(JWPlayer, FlowPlayer, StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer )
  • Statistics in XML/XSL in machine- & human- readable form
  • 支持跨平台 Linux/FreeBSD/MacOS

项目地址:https://github.com/arut/nginx-rtmp-module
nginx-rtmp-module Directives:https://github.com/arut/nginx-rtmp-module/wiki/Directives

总的来说Nginx-rtmp是个比较轻量的项目,可以满足直播的采集,编码和分发工作,该项目丰富的完善了nginx对视频的支持,特别的nginx-rtmp实现了对HLS的支持。

Nginx下rtmp模块安装

基于CentOS7《OneinStack》环境下Nginx RMPT安装

安装ffmpeg可以选择静态包,自编译或者rpmfusion.org的yum源。具体参照http://ffmpeg.org/download.html#build-linux
此处选择rpmfusion.org的yum源方式安装

  1. cd oneinstack/src
  2. yum -y install git
  3. yum localinstall  -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
  4. yum -y install ffmpeg ffmpeg-devel
  5. wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
  6. git clone git://github.com/arut/nginx-rtmp-module.git
  7. tar xzf nginx_mod_h264_streaming-2.2.7.tar.gz
  8. sed -i '158,161s@^@//@g' nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c
  9. tar xzf nginx-1.22.0.tar.gz
  10. tar xzf openssl-1.1.1q.tar.gz
  11. tar xzf pcre-8.45.tar.gz
  12. cd nginx-1.22.0
  13. make clean
  14. ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_ssl_module --with-stream --with-stream_ssl_preread_module --with-stream_ssl_module --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-http_mp4_module --with-openssl=../openssl-1.1.1q --with-pcre=../pcre-8.45 --with-pcre-jit --with-ld-opt=-ljemalloc --add-module=../nginx_mod_h264_streaming-2.2.7 --add-module=../nginx-rtmp-module
  15. sed -i 's@-Wno-unused-parameter -Werror -g@-Wno-unused-parameter -g@' objs/Makefile
  16. make
  17. if [ -e "objs/nginx" ];then
  18.         /bin/mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx$(date +%m%d)
  19.         /bin/cp objs/nginx /usr/local/nginx/sbin/nginx
  20.         service nginx restart
  21. fi

配置Nginx视频点播

RTMP直播的一般格式是rtmp://www.xpn.cc/app/name,其中app的名字对于application的名字

  1. rtmp {  #保存所有rtmp配置的块
  2.     server {  #声明一个rtmp实例
  3.         listen 1935;  #给Nginx添加一个监听端口以接收rtmp连接
  4.         chunk_size 4096;  #流整合的最大的块大小。默认值为4096。这个值设置的越大CPU负载就越小。这个值不能低于128
  5.         application mp4 {  #app的名字为mp4
  6.                 live on;  #切换直播模式,即一对多广播
  7.                 play /home/wwwroot/www.xpn.cc/mp4;  #播放指定mp4文件目录
  8.                 }
  9.         }
  10. }
 收藏 (0) 打赏

您可以选择一种方式赞助本站

支付宝扫一扫赞助

微信钱包扫描赞助

除特别注明外,本站所有文章均基于CC-BY-NC-SA 4.0原创,转载请注明出处。
文章名称:《Nginx rtmp协议的流媒体服务器》
文章链接:https://www.xpn.cc/245/fy.html
分享到: 更多 (0)

热门推荐

评论 抢沙发

登录

忘记密码 ?