一 概要说明
使用nginx搭建流媒体直播平台,目的就是要支持rtmp协议,实现用户使用rtmp(rtmp://192.168.201.128/myapp)协议推送流到服务器。然后其他用户点播该用户推送的视频流信息。既然是rtmp协议,所以客户端可以是flash程序,也可以OBS(Open Broadcaster Software)这种比较大众化的直播客户端。个人是比较喜欢使用OBS的,老实说我其实也是flash和flex开发者,开发个多款WEB视频程序和视频会议系统。java水平也是很高的。欢迎打脸,我这种人就不怎么谦虚,因为我觉太谦虚就虚伪了.
再世面上有很多流媒体服务器。有商业的也有开源,比如常用FMS,Red5,wowza.crtmpserver,等,如果是做小型视频会议,我个人强烈推荐Red5。Red5有很开放的api,对于开发实时性要求比较高的很方便。开发工具和开发java的人上手也很快。
二 环境准备
1 准备一台linux的操作系统,我的Centos5。windows 再nignx上自己编译模块很麻烦的,所以我就在Centos上测试。我的系统信息如下:
Linux localhost 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 athlon i386 GNU/Linux
2 准备软件包
nginx-1.4.7.tar.gz
nginx-rtmp-module-1.1.7.tar.gz
三 开始安装
1 安装nginx所需要的依赖包。注意不同系统或者模块需要的依赖包是不一样的。我这里值安装最基本的就行了。
[root@localhost html]# yum install -y gcc gcc-c++ [root@localhost html]# yum install –y openssl-devel pcre-devel zlib-devel注意:最好不要用默认的yum源。都统一换成阿里云的yum源。
2 先解压包,这不没什么难度吧。然后执行ningx配置文件。执行没问题后,执行编译,安装
[root@localhost local]# tar -zvxf nginx-1.4.7.tar.gz [root@localhost local]# wget https://github.com/arut/nginx-rtmp-module/archive/v1.1.7.tar.gz [root@localhost local]# tar nginx-rtmp-module-1.1.7.tar.gz [root@localhost local]# tar -zxvf nginx-rtmp-module-1.1.7.tar.gz [root@localhost local]# cd /usr/local/nginx-1.4.7 ./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-rtmp-module-1.1.7 [root@localhost nginx-1.4.7]# make && make install
输出日志我就不贴出来了。编译完成后。就该修改nginx的配置文件,让nginx支持rtmp协议。3 修改配置文件后内容如下(改配置文件可以参考):
[root@localhost test]# pwd
/usr/local/nginx-rtmp-module-1.1.7/test[root@localhost test]# ll total 56 -rwxrwxr-x 1 root root 49 Mar 24 2015 dump.sh -rwxrwxr-x 1 root root 84 Mar 24 2015 ffstream.sh -rw-rw-r-- 1 root root 1245 Mar 24 2015 nginx.conf -rwxrwxr-x 1 root root 59 Mar 24 2015 play.sh -rw-rw-r-- 1 root root 499 Mar 24 2015 README.md drwxrwxr-x 2 root root 4096 Mar 24 2015 rtmp-pu为了方便我把我的ngin的配置文件完整的贴出来:
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } rtmp { server { listen 1935; application myapp { live on; #record keyframes; #record_path /tmp; #record_max_size 128K; #record_interval 30s; #record_suffix .this.is.flv; #on_publish http://localhost:8080/publish; #on_play http://localhost:8080/play; #on_record_done http://localhost:8080/record_done; } } } http { include mime.types; default_type application/octet-stream; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } #error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
四 启动服务器,测试1 执行nginx/sbin/nginx 启动服务。你应该能够看到服务器也启用1935端口,就表示nginx已经支持rtmp推送流了。
[root@localhost conf]# netstat -antpl Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN 11908/nginx tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2674/portmap tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 11908/nginx tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2965/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2989/sendmail: acce tcp 0 0 0.0.0.0:765 0.0.0.0:* LISTEN 2703/rpc.statd tcp 0 0 192.168.201.128:1935 192.168.201.1:55561 ESTABLISHED 11950/nginx: worker tcp 0 1934 192.168.201.128:1935 192.168.201.1:55575 ESTABLISHED 11950/nginx: worker tcp 0 0 :::22 :::* LISTEN 2950/sshd tcp 0 0 ::ffff:192.168.201.128:22 ::ffff:192.168.201.1:56019 ESTABLISHED 12197/sshd: root@no tcp 0 592 ::ffff:192.168.201.128:22 ::ffff:192.168.201.1:53081 ESTABLISHED 3268/1
2 拷贝你/usr/local/nginx-rtmp-module-1.1.7/test/www 目录下的所有文件放到nginx的html下。这个是rtmp模块提供的测试案例。就是一个flash客户端推送流和一个播放流的案例;看起来如下:[root@localhost www]# cd /usr/local/nginx/html/ [root@localhost html]# ll total 60 -rw-r--r-- 1 root root 537 Feb 5 18:54 50x.html -rw-r--r-- 1 root root 15145 Feb 5 19:05 bg.jpg -rw-r--r-- 1 root root 511 Feb 5 19:06 index.html drwxr-xr-x 2 root root 4096 Feb 5 19:05 jwplayer drwxr-xr-x 2 root root 4096 Feb 5 19:05 jwplayer_old -rw-r--r-- 1 root root 1460 Feb 5 19:07 record.html
五 测试,1 打开浏览器输入地址:http://192.168.201.128/record.html 这是个推送流的测试地址。打开会提示你允许使用你摄像头。允许就行了。如下
2 打开另外一个浏览器,输入http://192.168.201.128/index.html 这个测试播放地址效果如下:
六 总结。
你可以用OBS来发布到nginx.也是可以的。总的来说这种方式还不错的,但是如果要实时性高,多人视频就不太适用。
参考文献:nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
需要安装包和的朋友,可以给mail 845885222#qq.com