nginx + rtmp 搭建流媒体服务器
2015-07-19 18:08
471 查看
NginxRTMP功能研究
分类:1.RTMP协议介绍
RTMP(RealTimeMessagingProtocol)实时消息传送协议是AdobeSystems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。它有三种变种:1)工作在TCP之上的明文协议,使用端口1935;2)RTMPT2.RTMPserver
2.1当前的流媒体server
现在主要有两种rtmpserver,商业的和开源的。商业的比开源的支持的功能多,个人根据需要选择吧商业的有FMSWowza开源RTMPserver1.red5java有名2.crtmpserverc++支持多种rtmp协议,移动设备以及IPTV相关网络协议2.2Wowza功能
FMS是Adobe公司的产品,license非常昂贵。下面就wowza这个商业软件讲下流媒体Server,不仅仅是RTMPServer,在达到生产环境所需要的功能。wowza最突出的特定是多终端适应性,这个在如今多媒体融合的网络环境下有很强的实用意义。究其原理并无深入研究。国内尚为视讯是其代理公司。WowzaMediaServer是一款高性能、多线程的流媒体服务器软件。专为多种终端设备提供音视频内容播放服务,支持iOS、windows、Android、BlackMerry等系统的终端设备,以HTTP、RTSP/RTP、RTMP传输协议的流播放,还支持利用机顶盒进行播放的IPTV。通过对WowzaMediaServer的深度定制开发,尚为网络视听管理系统实现了对网络音视频内容的采集、编码、编辑、转码、审核、播出与监控等完整的生命周期管理,突出了以下能力:1)3.Nginx-basedRTMPserver
3.1Nginxrtmp功能点
1.支持音视频直播2.支持flv/mp4视频格式,输入可以是文件或者HTTP流3.支持两种流的分发模式pushandpull4.可以将直播流录制成flv文件5.H264/AAC编码6.支持在线转码OnlinetranscodingwithFFmpeg7.支持HLS(HTTPLiveStreaming)需要libavformat(>=8.53.31.100)fromffmpeg(ffmpeg.org)8.HTTPcallbacks(publish/play/record/updateetc)9.支持外部程序(exec)10.HTTPcontrolmoduleforrecordingaudio/videoanddroppingclients11.先进内存控制技术,可以在使用少量内存的情况下完成流畅的直播功能。12.可以和以下协同工作。FMSserver(Wirecast,FMS,Wowza,)Player(JWPlayer,FlowPlayer,StrobeMediaPlayback,)外部程序(ffmpeg,avconv,rtmpdump,flvstreamer)13.StatisticsinXML/XSLinmachine-&human-readableform14.支持跨平台Linux/FreeBSD/MacOS项目地址3.2编译nginxrtmp模块
编译安装,和其他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
3.3配置以及功能介绍
RTMP直播的一般格式是rtmp://youdomain.com/app/name,其中app的名字对于application的名字,1.下列是直播的配置,app是live。applicationlive{
liveon;
}2.配置支持访问控制,你可以指定允许发布的IP以及允许收看的IP:
applicationlive{
liveon;
allowpublish127.0.0.1;
denypublishall;
allowplayall;3.支持Multi-workerstreaming工作方式,需要指令rtmp_auto_pushon支持,这样nginx有多个worker的情况下,可以将流分发到多个进程进行处理,充分利用服务器资源。
rtmp_auto_pushon;
rtmp{
server{
listen1935;
chunk_size4000;
#TVmode:onepublisher,manysubscribers
applicationmytv{
liveon;
}
}
}4.流转码的功能,下面的例子使用了exec这种使用外部程序ffmpeg的功能.Ffmpeg是一个强大的媒体处理工具,几乎可以做任意有关video/audio的处理。更多ffmpeg与RTMP流媒体连接用法可以参考以下链接。
#Transcoding(ffmpegneeded)
applicationbig{
liveon;
#Multipleexeclinescanbespecified.
exec/usr/bin/ffmpeg-re-irtmp://localhost:1935/$app/$name-vcodecflv-acodeccopy-s32x32-fflvrtmp://localhost:1935/small/${name};
}
applicationsmall{
liveon;
#Videowithreducedresolutioncomesherefromffmpeg
}5.Push和pull模式,用在多个server协助的情况下,输出流可以push,输入流可以pull。
applicationmypush{
liveon;
#Everystreampublishedhere
#isautomaticallypushedto
#thesetwomachines
pushrtmp1.example.com;
pushrtmp2.example.com:1934;
}
applicationmypull{
liveon;
#Pullallstreamsfromremotemachine
#andplaylocally
pullrtmp://rtmp3.example.compageUrl=www.example.com/index.html;
}
3.4用nginx-rtmp-module搭建直播环境
1.需要准备视频源,这个可以使用ffmpeg模拟,或者通过FMS采集。使用ffmpeg比较方便,例如ffmpeg-re-i/root/test123.flv-fflvrtmp://192.168.100.135/myapp/test,这样一条命令就可以发布一个直播源。2.配置nginx-rtmp,完成相关功能配置,可以参考以上描述。3.搭建客户端测试环境,本文测试播放器使用的是jwplayermax_streams
syntax:max_streamsvaluecontext:rtmp,serverSetsmaximumnumberofRTMPstreams.Datastreamsaremultiplexedintoasingledatastream.Differentchannelsareusedforsendingcommands,audio,videoetc.Defaultvalueis32whichisusuallyokformanycases.exec
Syntax:execcommandarg*Context:rtmp,server,applicationSpecifiesexternalcommandwithargumentstobeexecutedoneverystreampublished.Whenpublishingstopstheprocessisterminated.Fullpathtobinaryshouldbespecifiedasthefirstargument.Therearenoassumptionsaboutwhatthisprocessshoulddo.Howeverthisfeatureisusefulwithffmpegforstreamtranscoding.FFmpegissupposedtoconnecttonginx-rtmpasaclientandoutputtranscodedstreambacktonginx-rtmpaspublisher.Substitutionsofform$var/${var}canbeusedwithincommandline:·$name-streamname·$app-applicationname·$addr-clientaddress·$flashver-clientflashversion·$swfurl-clientswfurl·$tcurl-clienttcurl·$pageurl-clientpageurlThefollowingffmpegcalltranscodesincomingstreamtoHLS-readystream(H264/AAC).FFmpegshouldbecompiledwithlibx264&libfaacsupportforthisexampletowork.3.5Nginxrtmp对于HLS支持
HTTPLiveStreaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTimeX和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的extendedM3U(m3u8)playlist文件,用于寻找可用的媒体流。HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用内容分发网络来传输媒体流。此协议详细内容请参考apple官方网站:相关文章推荐
- nginx禁止目录php执行权限
- nginx使用介绍 说明
- 伪装隐藏Nginx,PHP版本号提升服务器安全性
- nginx 笔记 第一章
- 编译nginx的源码安装subs_filter模块
- 用redhat7.0源码包安装zabbix以及配置实现
- Nginx负载均衡配置实例详解
- 快速部署Python应用:Nginx+uWSGI配置详解
- 快速部署Python应用:Nginx+uWSGI配置详解
- nginx+iis实现负载均衡
- CentOS7 安装LNMP(Linux+Nginx+MySQL+PHP)
- nginx php fpm多实例配置
- nginx ssl服务器配置
- VMware虚拟机中的CentOS安装Nginx后本机无法访问的解决办法
- Linux操作系统上 PHP+Nginx环境搭建
- python + django + bootstrap + uWSGI + nginx 环境搭建
- nginx实现负载均衡和健康检查
- Nginx 301重定向域名
- Debian7下初次尝试Nginx+Uwsgi部署Django开发环境
- nginx web服务器详解1(转)