<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

简介: 一 概要说明使用nginx搭建流媒体直播平台,目的就是要支持rtmp协议,实现用户使用rtmp(rtmp://192.168.201.128/myapp)协议推送流到服务器。

一 概要说明

使用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





目录
相关文章
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
负载均衡: LVS(Layer 4), HAProxy(Layer 4、 7),Nginx(Layer 7) 虚拟化: LXC、KVM、Xen HA:Keepalived、Heartbeat 分布式缓存...
735 0
|
Web App开发 前端开发 测试技术
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
一、迁移步骤 1.首先安装最新版本gitlab(gitlab7.2安装) 2.停止旧版本gitlab服务 3.将旧的项目文件完整导入新的gitlab   bundle exec rake gitlab:import:r...
684 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
 Connection reset by peer的常见原因: 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭;    如果知道实际连接服务器的并发客户数没有超过服务器的承载量,看下有没有网络流量异常。
826 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
【CRM五策略】           对客户进行分类,不是根据规模,而是根据和你的关系,越细腻越好;           不定期更新客户资料,信息越全面越好;           主动对客户进行关怀,拿出你的诚意和...
618 0
|
数据库
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
CentOS 6.5安装配置ldap 时间:2015-07-14 00:54来源:blog.51cto.com 作者:“ly36843运维” 博客 举报 点击:274次 一.
872 0
|
Web App开发 Java Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
关于reduce边join,其最重要的是使用MultipleInputs.addInputPath这个api对不同的表使用不同的Map,然后在每个Map里做一下该表的标识,最后到了Reduce端再根据标识区分对应的表! ...
738 0
|
Web App开发 监控 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
最近在监控中发现HiveServer2连接到zookeeper里的连接持续上涨,很奇怪,虽然知道HiveServer2支持并发连接,使用ZooKeeper来管理Hive表的读写锁,但我们的环境并不需要这些,我们已经关闭并发功能,以下是线上的配置,甚至把这些值都改成final了。
708 0
|
Web App开发 前端开发 Apache
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
修改的ranger ui的admin用户登录密码时,需要在ranger的配置里把admin_password改成一样的,否则hdfs的namenode在使用admin时启动不起来,异常如下: Traceback (mos...
1040 0
|
Web App开发 前端开发