Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)

1. 下载nginx-rtmp-module

  1. 进入下载地址:https://github.com/arut/nginx-rtmp-module,并下载压缩包,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第1张图片

1、下载完成后,在windows系统下解压,然后将解压后的文件夹上传到linux系统下,我把它放在/root/soft-install/nginx,如下图:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第2张图片

2. 安装nginx

1、下载地址:http://nginx.org/en/download.html,选择需要的版本下载即可,如下图:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第3张图片

2、这里我下载的是nginx-1.16.1,下载后上传到Linux系统目录,我把它放在/root/soft-install/nginx,如下图:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第4张图片

3、在安装nginx前首先要确认系统中安装了gcc、pcre-devel、zlib-devel、openssl-devel,运行命令:yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel,结果如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第5张图片

4、进入/root/soft-install/nginx目录,并解压,依次执行命令为:

cd /root/soft-install/nginx

tar -xvf nginx-1.16.1.tar.gz

5、编译安装nginx,并指定上面下载的rtmp模块路径,命令为:

(1)安装依赖包,依次执行以下两条命令:

yum -y install libxml2 libxml2-dev
yum -y install libxslt-devel

如果出现:Cannot prepare internal mirrorlist: No URLs in mirrorlist

则依次执行以下两条命令:

sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*

sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*

(2)编译安装nginx,并指定上面下载的rtmp模块路径,执行命令:

./configure --add-module=../nginx-rtmp-module-master --with-http_ssl_module --with-http_ssl_module --with-http_xslt_module --with-http_flv_module --with-debug --with-http_gzip_static_module

执行成功如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第6张图片

6、运行cd conf,进入nginx配置文件目录,修改nginx.conf文件,共需要添加两处配置,

(1)第一步在文件末尾加上下面配置信息:

#文件末尾追加

rtmp {

server {

listen 1935; #监听的端口

chunk_size 4000;

# rtmp推流请求路径

application hls {

live on;

hls on;

hls_path /usr/tmp/hls;

hls_fragment 10s;

}

}

}

(2)在http->server节点下增加推流目录的访问权限配置:

location /hls {
            alias /usr/tmp/hls; #该目录对应rtmp 配置中的hls_path即可
			autoindex on;  # 开启目录文件列表
            autoindex_exact_size on;  # 显示出文件的确切大小,单位是bytes
            autoindex_localtime on;  # 显示的文件时间为文件的服务器时间
            charset utf-8,gbk;  # 避免中文乱码
        }

7、执行命令:cd .. && make && make install,执行成功如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第7张图片

8、执行命令:cd /usr/local/nginx跳转至nginx的安装目录,然后执行命令:./sbin/nginx -t测试配置文件是否有问题,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第8张图片

9、执行命令:./sbin/nginx,启动nginx,执行该命令无错误显示的话默认是没有任何信息显示的,如下图:

10、在浏览器中输入linux的ip地址检查nginx启动页面是否可访问,正常访问成功如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第9张图片

2.1 nginx无法访问页面问题解决方法:

1、执行命令:ps -ef | grep nginx,查看nginx是否成功运行了,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第10张图片

2、运行命令:lsof -i:80(或者netstat -lnt | grep 80)检查nginx是否已启动监听端口(nginx默认端口为80,如果你自己想改成其他的,则检查端口时相应的更改),正常情况如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第11张图片

3、执行命令:firewall-cmd --add-port=80/tcp --permanent将80端口加入防火墙(nginx默认端口为80,如果你自己想改成其他的,则添加端口时相应的更改),然后执行命令:systemctl restart firewalld重启防火墙,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第12张图片

4、查看nginx的端口方法,执行命令:cd /usr/local/nginx/conf/,打开nginx.conf,nginx端口配置位置如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第13张图片

5、按照以上步骤做完,你的nginx应该也已经启动了,如果没有启动,那就全部重新来过。

2.2 配置查询流拉取人数(可选)

1、在nginx配置中增加如下配置:放在http->server节点下

location /stat {
                rtmp_stat all;
                allow 127.0.0.1;
        }
        
        location /nclients {  
            proxy_pass http://127.0.0.1/stat;  
            xslt_stylesheet /usr/local/nginx/html/nclients.xsl app='$arg_app' name='$arg_name';  
            #add_header Refresh "3; $request_uri";  
        }

2、在/usr/local/nginx/html/目录下新建文件nclients.xsl,并录入以下内容:








3、重启nginx。

4、在ffmpeg安装成功后,并进行推流,然后再网页中输入地址:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第14张图片

说明:

application下的name(即hls)指的是应用名称,对应nginx配置的rtmp中的hls

stream下的name(即3a0f53c551d946b6b48b9a54c2509b07)指的是推流名称

client节点信息即当前拉流的客户端信息

5、完整的nginx配置文件nginx.conf内容如下:


#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;
}


http {
    include       mime.types;
    default_type  application/octet-stream;    

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }	
	
		location /hls {
            alias  html/hls;
            index  index.html index.htm;
			
			if ($request_method = 'OPTIONS') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				#
				# Custom headers and headers various browsers *should* be OK with but aren't
				#
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				#
				# Tell client that this pre-flight info is valid for 20 days
				#
				add_header 'Access-Control-Max-Age' 1728000;
				add_header 'Content-Type' 'text/plain; charset=utf-8';
				add_header 'Content-Length' 0;
				return 200;
			}
			if ($request_method = 'POST') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			}
			if ($request_method = 'GET') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			}
        }
    
        location /stat {
                rtmp_stat all;
                allow 127.0.0.1;
        }
		
		location /nclients {  
			proxy_pass http://127.0.0.1/stat;  
			xslt_stylesheet /usr/local/nginx/html/nclients.xsl app='$arg_app' name='$arg_name';  
			#add_header Refresh "3; $request_uri";  
		}
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }        
    }


    server
    {
		listen 9999;
		add_header Access-Control-Allow-Origin *;

		#HLS配置开始,这个配置为了客户端能够以http协议获取HLS的拉流
        location /hls {
            add_header Access-Control-Allow-Origin *;
            types {  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }
            alias html/hls;  #跟上面的hls_path路径对应
            expires -1; 
            
			if ($request_method = 'OPTIONS') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				#
				# Custom headers and headers various browsers *should* be OK with but aren't
				#
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				#
				# Tell client that this pre-flight info is valid for 20 days
				#
				add_header 'Access-Control-Max-Age' 1728000;
				add_header 'Content-Type' 'text/plain; charset=utf-8';
				add_header 'Content-Length' 0;
				return 200;
			}
			if ($request_method = 'POST') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			}
			if ($request_method = 'GET') {
				add_header 'Access-Control-Allow-Origin' '*';
				add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
				add_header 'Access-Control-Allow-Headers' 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
				add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
			}
        } 
    }
}

rtmp {
	server {		
		listen 1935;  #监听的端口  
		chunk_size 4000;
		# rtmp推流请求路径 
		application hls {   
			live on;
			hls on;
			hls_path /usr/local/nginx/html/hls; 
			hls_fragment 10s;
			hls_playlist_length 300;
		}
	}
}

3. 安装ffmpeg

1、打开官网地址,进入下载页:https://ffmpeg.org/download.html#build-linux,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第15张图片

2、点击跳转后,点击最新版本进行下载(这里下载的是免安装版,一般情况已够用),如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第16张图片

3、官网下载贼慢,慢慢等吧。

4、下载完,将下载后的文件上传到linux目录下,执行解压命令:

tar -xvf ffmpeg-release-amd64-static.tar.xz,如下图所示:

5、解压完后,进入到解压后的目录,可以看到已经有ffmpeg执行文件了,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第17张图片

6、执行推流命令,试试看推流效果吧,ffmpeg命令请自行上网查,我推送的为ffmpeg目录下的一个mp4文件,命令为:./ffmpeg -i 1.mp4 -f flv rtmp://192.168.2.246:1935/hls/001,执行结果如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第18张图片

7、使用vlc播放器打开推流地址进行查看推流视频,如下图所示:

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第19张图片

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)_第20张图片

你可能感兴趣的:(教程,linux,nginx,rtmp,ffmpeg)