windows下搭建nginx-rtmp服务器
windows下搭建nginx-rtmp服务器
最近因为接触直播相关的技术工作,使用的也是基于高并发和高性能的nginx,首先需要做的当然是搭建一个nginx服务器。
对于linux上nginx服务器的搭建此处就不再赘述,按照操作指引来的话一般都能顺理成章搭建起来。
对于linux操作不熟练的手残党来说,当然是希望能在windows下也能用上这一套。刚开始在windows下搭建环境的时候遇到了很多问题,后面逐个解决花费不少功夫,怕以后忘了,就把我在windows下编译nginx和搭建RTMP直播服务器的过程记录下来,权当做个备忘。
准备工作
安装MinGW
在这些准备工作之前,你的电脑上至少安装有一款IDE,我的是VS2008。
首先安装MinGW,后面的nginx编译需要先在msys环境下进行。
安装方式可以有在线安装和离线安装两种方式,离线安装的话过程很繁琐,需要自己下载各种包解压、配置路径等等操作,所以此处采用无脑式的在线安装进行说明。
由于MinGW的很多资源包都是在sourceforge上下载的,国内虽然能访问,但是速度奇慢,在线安装过程中经常会出现下载组件失败,强烈建议翻墙安装。到MinGW找到MinGW安装引导程序mingw-get-setup.exe的链接地址并下载,下载的文件不到100KB。执行安装工具,开始选择安装路径时要注意,不要将MinGW安装到带有空格或者中文路径的目录下!!。
默认情况下,在下载完成后会在桌面生成一个MinGW Installer快捷图标,如果没有,也可以去MinGW安装目录中找到,
$MinGW安装目录\libexec\mingw-get\guimain.exe
。接下来运行安装之后的快捷图标,选择要在线安装的组件,此处只需选择Basic Setup下msys及gcc相关组件就行了。
然后,选择Installation菜单中Apply Changes进行在线下载和安装,整个过程可能会持续十几分钟。
当然后续有需要可以再利用这个安装界面进行组件的更改或者删除
如果安装过程中出现组件下载失败的情况,直接确定继续往下,安装程序会在所有的依赖包下载完成之后进行解压安装,执行完成后,在不关闭安装界面的前提下,回到上面的第二个步骤再来一遍,一直到没有安装错误。至此,MinGW的成功安装后,勾选的项目会变成浅绿色填充。
MinGW的安装目录下也会有msys的目录,进入该目录里面,会看到有个批处理文件msys.bat
,可以把它创建到桌面作为快捷方式,双击进去就进入msys环境了。使用上和linux终端类似,不过是个精简版的,命令没有linux下的全,可以使用mingw-get命令进行在线安装某些包,比如,要安装gdb,直接输入命令mingw-get install gdb
。
MinGW正常安装的话,一般会自动将路径加入到环境变量。如果在使用中出现问题,检查下是不是因为路径设置的原因,手动将$MinGW安装目录\bin
和$MinGW安装目录\msys\1.0\bin
加入到windows的PATH环境变量。
安装Mercurial
Mercurial是一个版本管理工具,后面我们需要用它下载windows下的nginx源码。
到Mercurial下载windows版并安装。
安装时最好将安装目录选择在没有空格和中文目录的路径下。安装完成后,在cmd中执行命令
hg
,如果有以下显示则表示安装成功了。
安装strawberryperl
Strawberry Perl是Windows环境的Perl环境,包含了运行和开发Perl应用程序所需的全部内容,它的目的是尽可能接近UNIX系统上的Perl环境,后面在编译nginx及其依赖库的时候需要用到。
- 到Strawberry Perl下载并安装windows下的安装程序,选择安装路径时最好选择在没有空格和中文目录的路径下。
安装nasm
NASM全称The Netwide Assembler,是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性,至于为什么要安装这货,后面再说。
- 到NASM下载安装程序安装即可。
- 安装完成后,将其安装路径加入到PATH环境变量。
下载nginx相关的源码包
搭建nginx-rtmp服务器需要下载nginx源码和nginx-rtmp-module源码。以及nginx依赖的组件。 后面将要在msys下进行配置,不像linux下直接可以使用yum install xxx-devel的形式安装依赖的组件包头。所以需要将nginx相关的源码包悉数下载好,注意是源码包,因为nginx编译时需要引用这些依赖库的开发标头。
- nginx
linux下的nginx源码包可以直接去nginx网站下载,但是上面的源码包只有linux的,源码的os文件夹下仅有unix平台的。而windows只有编译好的文件。这里就需要使用Mercurial下载带有win32平台的nginx源码包。
在cmd中执行命令hg clone http://hg.nginx.org/nginx nginx-win32-src
下载最新的nginx代码,耐心等待源码down到本地,也可以下载指定的版本,具体参考hg help
。 - nginx-rtmp-module
作为nginx外接的扩展模块,将用作后面搭建RTMP直播环境的一部分
使用Git或者SVN等工具或者直接去GitHub上下载nginx-rtmp-module - pcre
- zlib
- openssl
以下是我使用的几个源码包的版本:
nginx-release-1.31.1 tag
nginx-rtmp-module-1.1.11.tar.gz
pcre-8.40.tar.gz
zlib-1.2.11.tar.gz
openssl-1.0.2l.tar.gz- nginx
编译nginx
将上述下载好的五个源码包拷贝到msys目录下
$MinGW安装目录\msys\1.0\home\$USERNAME\
。打开msys批处理文件,分别解压之前下载的源码包。
进入nginx源码目录。新建一个configuration-nginx.bat文件,里面内容如下,后面的将几个依赖包加入的配置代码根据实际情况填写不同路径。
auto/configure --with-cc=cl --builddir=objs --prefix= \
--conf-path=conf/nginx.conf --pid-path=logs/nginx.pid \
--http-log-path=logs/access.log --error-log-path=logs/error.log \
--sbin-path=nginx.exe --http-client-body-temp-path=temp/client_body_temp \
--http-proxy-temp-path=temp/proxy_temp \
--http-fastcgi-temp-path=temp/fastcgi_temp \
--with-cc-opt=-DFD_SETSIZE=1024 \
--with-select_module \
--with-debug \
--with-http_ssl_module \
--with-pcre=../pcre-8.40 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.0.2l \
--add-module=../nginx-rtmp-module-1.1.11此时执行该批处理文件,稍稍等待几秒钟,会出现nginx配置完成的信息。
这里会发现有一个异样的提示,auto/cc/msvc: line 117: [: : integer expression expected ,只要修改文件$nginx源码目录\auto\cc\msvc
即可,在echo " + cl version: $NGX_MSVC_VER"
的前面加入一行NGX_MSVC_VER=15.00
,当然不修改也不会影响后续的编译。
如果需要指定后续编译nginx时禁用优化,则将其中的CFLAGS="$CFLAGS -O2"
修改为CFLAGS="$CFLAGS -Od"
。
到这里为止,msys的使命就完成了。打开Visual Studio 2008 命令提示,在命令提示符中进入到nginx源码目录,执行命令
nmake /f objs\MakeFile
,会发现编译报错。
此时,之前安装的NASM就该登场了。
打开文件$nginx源码目录\auto\lib\openssl\makefile.msvc
,将其中的
ms\do_ms
修改为
ms\do_nasm
然后,删除openssl源码目录中的out32和tmp32两个临时目录,重新启动Visual Studio 2008 命令提示,再次执行前面的第五步就可以了。成功编译之后,最终会有以下打印信息,并且在nginx源码目录的objs目录中可以看到最终生成的nginx.exe文件。
nginx-rtmp环境搭建
可以在msys的根目录
/
下新建一个nginx目录,然后将生成的nginx.exe,nginx源码目录下的conf目录以及docs目录下的html目录都拷贝到当前目录,并手动新建logs和temp两个目录,形成最终的目录结构。随后修改conf/nginx.conf,关于如何配置和修改不在本文范畴内,so,略过~。
在当前nginx目录中,启动windows命令行,运行start /b nginx.exe -c conf\nginx.conf
这样nginx服务就在后台启动了。在浏览器中输入地址进入到nginx服务的主页,如果可以看到如下内容,说明整个环境已经OK,接下来可以使用推流和拉流看看实际效果了。最后使用命令nginx.exe -s stop
优雅地终止nginx服务。
效果测试
接下来的效果测试,对环境稍微做了一点点改动,使用nginx-rtmp-module中提供的JWPlayer的Play页面进行拉流或者Record页面进行推流。
首先是在nginx/html/目录下新建一个文件夹 nginx-rtmp-module,将之前解压的nginx-rtmp-module-1.1.11目录下的stat.xsl文件以及test文件夹拷贝到新建的目录nginx-rtmp-module下。
修改nginx/html/nginx-rtmp-module/test/nginx.conf文件,关闭nginx的守护和master-worker模式,由于本机有SVN占据了80端口,所以修改http的服务端口为8080,同时将nginx服务的访问目录修改为刚才nginx-rtmp-module中指向的index文件。再加入RTMP模块的配置,最终的配置文件内容如下:
worker_processes 1;
daemon off;
master_process off; error_log logs/error.log info; events {
worker_connections 1024;
} rtmp {
server {
listen 1935; application live {
live on;
}
}
} http {
server {
listen 8080; location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
} location /stat.xsl {
root html/nginx-rtmp-module/;
} location /control {
rtmp_control all;
} location /rtmp-publisher {
root html/nginx-rtmp-module/test;
} location / {
root html/nginx-rtmp-module/test/www;
}
}
}
配置拉流名字,修改nginx/html/nginx-rtmp-module/test/www/index.html文件,将
file: "rtmp://localhost/myapp?carg=1/mystream?sarg=2"
修改为file: "rtmp://localhost/live?carg=1/test?sarg=2"
以保持和上面的配置文件一致。配置推流名称,修改nginx/html/nginx-rtmp-module/test/www/record.html文件,将开始的
'streamer': 'rtmp://localhost/myapp',
修改为'streamer': 'rtmp://localhost/live'
以保持和上面的配置文件一致。在msys下进入nginx目录,执行
nginx.exe -c html/nginx-rtmp-module/test/nginx.conf &
nginx服务会在后台运行。推流,推流的手段有很多,此处使用ffmpeg将本地的文件流化并推到nginx服务。
ffmpeg -re -i "F:\TDDownload\BBC记录片\BBC理查德哈蒙德:看不见的世界BD中字-cd1.mkv" -vcodec copy -f flv rtmp://192.168.100.2/live/test
拉流,拉流方式也很多,浏览器中打开nginx服务的主页面192.168.100.2:8080,可以看到出现的视频播放窗口,点击Play即可拉流,此时的流地址就是上面配置好的
rtmp://192.168.100.2/live/test
,也可在SRS播放器页面输入流地址rtmp://192.168.100.2/live/test
拉流,还可利用ffplay rtmp://192.168.100.2/live/test
拉流。打开nginx服务的统计页面192.168.100.2:8080/stat也可以看到当前的服务运行状态。
使用JWPlayer的Record页面采集摄像头和麦的数据推流到nginx服务,在SRS播放器页面拉流,由于前面配置的Record页面推流的名字是mystream,所以此处输入
rtmp://192.168.100.2/live/mystream
。
最后说明
本来还试着在移动端试试播放效果,不过JWPlayer貌似是不支持直接在html页面进行rtmp直播,不过可以下载一个app(易推流)进行rtmp的直播测试。
有关nginx-rtmp服务器的搭建过程到此就算全部完成了,在此过程中当然也不全是靠我自己的摸索,也参考了前辈或同行的经验,在此感谢那些曾经的贡献者,参考资料如下:
http://blog.csdn.net/felixking/article/details/51981794
http://nginx.org/en/docs/howto_build_on_win32.html
windows下搭建nginx-rtmp服务器的更多相关文章
- Windows下搭建Nginx图片服务器
在项目最开始,上传图片的时候,服务器先保存原图再使用ImageMagick生成上传图片缩略图,这种方法有很多缺点,例如生成的缩略图的大小是固定的,不能动态请求指定大小的缩略图. 虽然有非常多的图片云存 ...
- windows下搭建nginx+php开发环境
windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...
- Windows下搭建本地SVN服务器【转】
转自:http://www.linuxidc.com/Linux/2015-01/111563.htm 本文介绍Windows下搭建本地SVN服务器的方法,网上资料比较少也比较旧,大都介绍的是旧版本S ...
- Ubuntu18.04下配置Nginx+RTMP服务器,实现点播/直播/录制功能
2019.3.22更新 最新的nginx-1.15.9可与openssl1.1.1兼容了 以下原文: 这个东西我眼馋挺久了,最近终于试玩了一下,感觉很好玩,在搭建的过程在也遇到一些坑,这里总结一下 安 ...
- windows下搭建nginx+php+laravel开发环境(转)
1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: 1) 下载 nginx1.14.0(版本根据自 ...
- Windows下搭建HTTP/HTTPS服务器及测试过程
1 安装Apache http://www.apachehaus.com/cgi-bin/download.plx 选择合适的版本下载 本次下载的是 Apache 2.4.x VC14 Apache版 ...
- windows下搭建nginx负载均衡
学习笔记,第一次记录避免忘记 首先介绍一下本地环境是windows2008 R2-64位. 1. 到nginx官网上下载最新稳定版的安装包,http://nginx.org/en/download. ...
- Windows 搭建 nginx rtmp服务器
1.环境开发环境:windows开发工具:ffmpeg.nginx.nginx-rmtp-module.vlc media player播放器 2.准备文件官方ffmpeg下载地址:http://ww ...
- windows下搭建nginx服务器及实现nginx支持https配置流程
最近刚接触到了tomcat结合nginx做网站的负载均衡.之前对tomcat搭配nginx实现负载均衡也写过,在上一篇的博客中,最近遇到的问题是要在http的基础上支持https.也就是支持加密的请求 ...
- Mac搭建nginx+rtmp服务器
nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择,本人在网上整理了安装流程,分享给大家并且作备忘. 一.安装Homebrow 已经安装了brow的可以直接跳过这 ...
随机推荐
- ZOJ 3521 Fairy Wars oj错误题目,计算几何,尺取法,排序二叉树,并查集 难度:2
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521 ATTENTION:如果用long long 减小误差,这道题只能用 ...
- 3: 组件间的依赖管理 Managing Dependencies Between Components Using the Prism Library 5.0 for WPF(英汉对照版)
Applications based on the Prism Library are composite applications that potentially consist of many ...
- JSON数组字典解析
遇到这样的字典数组字符串 priceRange = "[{\"id\":149075584861800,\"price\":9.9,\"nu ...
- 迁移到阿里云后,NTKO控件报存word 报文件存取错误,请检查网络传输。
解决办法:安装如下组件即可!
- 第1课:接口测试和jmeter总结
接口测试 1. 接口的分类:webService和http api接口 1) webService接口:是按照soap协议通过http传输,请求报文和返回报文都是xml格式,一般要借助工具来测试接口: ...
- 【Java实战】DecimalFormat对数值格式化的舍入问题——RoundingMode
转自http://blog.csdn.net/alanzyy/article/details/8465098 背景: 在对数值做一些计算的时候,往往我们需要控制计算结果的精度,所以会使用到Dec ...
- 【剑指offer】丑数,C++实现
原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1. 题目 2. 思路 空间换时间的方法.由于题目要求按序查找丑数,可以采用辅助容器vector按序存储丑 ...
- ubuntu16.04中使用搜狗输入法Qt5无法输入中文解决方式
1.安装fcitx-frontend-qt5 sudo apt-get install fcitx-frontend-qt5 2.将libfcitxplatforminputcontextplugin ...
- 使用Linq动态排序
Linq排序很方便,如果能动态创建Expression再排序就更方便了. 正序还是倒序排列 var order = typeof(Enumerable).GetMember(direction == ...
- org.hibernate.hql.QueryExecutionRequestException:org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations【异常】
springData学习资料 [http://blog.csdn.net/lw_power/article/details/51296353] [JPA报错]org.springframework.w ...