Nginx RTMP 功能研究
Nginx-RTMP功能调研
3.4用nginx-rtmp-module搭建直播环境...8
1. RTMP协议介绍
RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
它有三种变种:
1)工作在TCP之上的明文协议,使用端口1935;
3)RTMPS类似RTMPT,但使用的是HTTPS连接;
RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。
图1 RTMP交互图
更多协议的细节可以参见《rtmp specification 1.0》
2. RTMP server
2.1当前的流媒体server
现在主要有两种rtmp server,商业的和开源的。商业的比开源的支持的功能多,个人根据需要选择吧
商业的有FMS Wowza
开源RTMP server
1. red5 java 有名
2. crtmpserver c++ 支持多种rtmp协议,移动设备以及IPTV相关网络协议 http://www.rtmpd.com/ Erlyvideo erlong 有开源和商业版本 https//github.com/erlyvideo/erlyvideo h
3. aXeVideo haXe 一个实验性的,轻量级的服务器 http://code.google.com/p/haxevideo/
4. FluorineFx .Net To be defined http://www/fluorinefx.com
5. nginx-rtmp c nginx模块 支持rtmp和HLS https://github.com/arut/nginx-rtmp-module
2.2 Wowza功能
FMS是Adobe公司的产品,license非常昂贵。下面就wowza这个商业软件讲下流媒体Server,不仅仅是RTMP Server,在达到生产环境所需要的功能。wowza最突出的特定是多终端适应性,这个在如今多媒体融合的网络环境下有很强的实用意义。究其原理并无深入研究。国内尚为视讯是其代理公司。
Wowza Media Server是一款高性能、多线程的流媒体服务器软件。专为多种终端设备提供音视频内容播放服务,支持iOS、windows、Android、BlackMerry等系统的终端设备,以HTTP、RTSP/ RTP、RTMP传输协议的流播放,还支持利用机顶盒进行播放的IPTV。
通过对Wowza Media Server的深度定制开发,尚为网络视听管理系统实现了对网络音视频内容的采集、编码、编辑、转码、审核、播出与监控等完整的生命周期管理,突出了以下能力:
1) 自动化内容收录
对网络视频的录制,采用服务器端录制模式,满足从28Kbps到10Mbps码流范围的H.264编码流的自动化定时收录。
2) 快速在线编辑
云计算架构设计,服务器端处理。所有编辑任务都处在云端,对编辑机无要求,任务处理快捷简单。
对视频的处理包括切条、合并、去除广告、添加logo等操作。
支持同一素材多格式文件的一次性编辑处理,提高工作效率。
3) 云式转码
采用云转码技术开发的音视频文件转码、实时流转码,实现了不同格式、码率、分辨率、帧数等参数的自由转换,满足不同终端的播放需求。
4) 多终端发布支持
结合Wowza Media Server支持多协议多终端的特性,尚为网络视听系统一个平台即可支持多终端设备的视频访问,无论用任何设备都可访问所需的视频内容。
在对多终端内容统一管理的基础之上,还可实现了多终端视频的断点续播功能。用户的播放在一个终端上播放暂停后,用户的信息、节目信息以及断点信息立刻传送给其它终端,实现了不同终端间的断点续播。
5) 稳定的安全保障
全LINUX架构,保障系统的安全性。
自动支持负载均衡部署,可满足大并发用户的数据响应处理。
扩展性好,可随需增减流媒体服务器来变更系统承载的并发用户数。
除此之外,个人认为完善的DRM版权管理对于视频直播分发是非常重要的功能,服务器状态实时监控是对运营的高效稳定也有非常最要的功能。
3. Nginx-basedRTMP server
3.1 Nginx rtmp 功能点
1. 支持音视频直播
2. 支持flv/mp4视频格式,输入可以是文件或者HTTP流
3. 支持两种流的分发模式 pushand pull
4. 可以将直播流录制成flv文件
5. H264/AAC编码
6. 支持在线转码 Onlinetranscoding with FFmpeg
7. 支持HLS (HTTP LiveStreaming)需要 libavformat (>= 8. 53.31.100) from ffmpeg (ffmpeg.org)
8. HTTPcallbacks (publish/play/record/update etc)
9. 支持外部程序(exec)
10. HTTPcontrol module for recording audio/video and dropping clients
11. 先进内存控制技术,可以在使用少量内存的情况下完成流畅的直播功能。
12 . 可以和以下协同工作。FMS server(Wirecast, FMS, Wowza,)Player(JWPlayer, FlowPlayer, StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer )
13. Statistics in XML/XSL in machine- & human- readable form
14. 支持跨平台 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的支持。
3.2 编译nginx rtmp模块
编译安装,和其他nginx模块一样
./configure--add-module=/path/to/nginx-rtmp-module
对于HLS的支持,需要额外的一个模块 .
./configure--add-module=/path/to/nginx-rtmp-module--add-module=/path/to/nginx-rtmp-module/hls