一、nginx在Linux下的安装
nginx官网地址:http://nginx.org/
nginx源码地址:https://nginx.org/en/download.html
nginx版本区别:
Nginx官网提供了三个类型的版本
1、Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
2、Stable version:最新稳定版,生产环境上建议使用的版本
3、Legacy versions:遗留的老版本的稳定版
nginx-http-flv模块下载地址:
https://github.com/winshining/nginx-http-flv-module
nginx-rtmp-module模块下载地址:
https://github.com/arut/nginx-rtmp-module.git
1.nginx安装
1.1检查安装nginx的依赖性
因为Nginx官方提供的是C源码,要自己进行编译,所以需要自己拥有编译所依赖的环境和库才可正常编译。
nginx的模块需要第三方库的支持,检查是否安装下列库:zlib、zlib-devel、openssl、openssl-devel、prce、prce-devel。
[root@ myPackage] rpm -qa |grep zlib
[root@ myPackage] rpm -qa |grep openssl
[root@ myPackage] rpm -qa |grep pcre
[root@ myPackage] rpm -qa |grep gcc
[root@ myPackage] rpm -qa |grep autoconf
[root@ myPackage] rpm -qa |grep automake
1.1.1【一键式安装】【安装nginx依赖包】
直接使用yum命令安装
[root@ myPackage]yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
Nginx依赖于pcre、zlib、openssl,在编译前配置时如果有问题,可以使用yum方式安装三个包(pcre-devel、zlib-devel、openssl-devel)
1.1.2 逐个安装依赖
【1.1】安装gcc
[root@ myPackage]yum -y install gcc automake autoconf libtool make
【1.2】安装g++
[root@ myPackage]yum install gcc gcc-c++
【1.3】安装PCRE库
这是一个表达式库,Nginx中的http模块则使用到了该库来解析正则表达式,所以安装它,自己选择一个路径,我这里选择了/usr/local/src
执行命令:
[root@ myPackage]cd /usr/local/src
[root@ myPackage]wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
[root@ myPackage]tar -zxvf pcre-8.37.tar.gz
[root@ myPackage]cd pcre-8.34
[root@ myPackage]./configure
[root@ myPackage]make
[root@ myPackage]make install
【1.4】安装zlib库
zlib库用于压缩和解压缩,方式众多,Nginx也使用到了zlib,所以继续安装它,路径同样/usr/local/src
执行命令:
[root@ myPackage]wget http://zlib.net/zlib-1.2.11.tar.gz
[root@ myPackage]tar -zxvf zlib-1.2.11.tar.gz
[root@ myPackage]cd zlib-1.2.11
[root@ myPackage]./configure
[root@ myPackage] make
[root@ myPackage] make install
【1.5】安装openssl
[root@ myPackage] yum -y install openssl-deve
2. nginx安装
进入linux常用目录下如(opt/myPackage)
在nginx官网下载安装包或从其他平台导入安装包
下载:
[root@ myPackage] wget http://nginx.org/download/nginx-1.12.0.tar.gz
解压:
[root@ myPackage] tar -zxvf nginx-1.12.0.tar.gz
编辑:
[root@ myPackage] cd nginx-1.12.0
[root@ nginx-1.12.0] ./configure --prefix=/usr/local/nginx
#----------------安装配置信息-----------
nginx path prefix: "/usr/local/nginx" #安装路径
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules "
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
编译及安装:
[root@ nginx-1.12.0] make && make install
如果安装有问题,输入make clean命令,解决问题问题后再执行make && make install
【检验安装是否成功】
[root@ nginx-1.12.0] cd /usr/local/nginx/sbin #进入nginx安装路径
[root@ sbin]# ./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
二、nginx-rtmp-module模块的安装
1.nginx-rtmp-module模块的安装
进入nginx源码包所在目录:
[root@ sbin]cd /opt/myPackage
下载模块:
[root@ myPackage] wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
解压:
[root@ myPackage]unzip nginx-rtmp-moudle-master.zip
添加rtmp模块:
[root@ myPackage] cd nginx-1.12.0
[root@ nginx-1.12.0]./configure --add-module=/opt/myPackage/nginx-rtmp-module-master
编译安装:
[root@ nginx-1.12.0]make && make install
启动nginx:
[root@ nginx-1.12.0]./usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2.修改nginx.conf配置文件
2.1增加rtmp块
[root@ nginx-1.12.0] vi /usr/local/nginx/cinf/nginx.cof
------------------------
rtmp { #保存所有 RTMP 配置的块
server { #声明一个 RTMP 实例
listen 1935; #服务端口--默认监听的端口,以接收rtmp连接
chunk_size 4096; #数据传输块的大小--默认
#设置直播的application名称是 live
application live{ #rtmp推流请求路径,创建一个 RTMP 应用
live on; #切换直播模式,即一对多广播
}
#设置推流的应用名称
application hls{
live on; #开启直播
hls on; #在 application 切换 HLS
hls_path /usr/local/nginx/html/hls;#设置 HLS 播放列表和分段目录。这一目录必须在 NGINX 启动前就已存在
hls_fragment 3s; #设置 HLS 分段长度。默认为 5 秒钟
hls_playlist_length 30; #设置 HLS 播放列表长度。默认为 30 秒钟
}
}
2.2 server增加location模块
server { #server块:配置虚拟主机的相关参数,一个http中可以有多个server。
listen 8080; #监听端口
server_name localhost; #监听地址
location /live{ #location块:配置请求的路由,以及各种页面的处理情况
flv_live on;
chunked_transfer_encoding on;
#以下配置跨域
add_header 'Access-Control-Allow-Origin' 'https://www.aaa.com' always;
add_header 'Access-Control-Allow-Credentials' 'true';
# 为预检请求加的header
add_header 'Access-Control-Allow-Methods' 'GET, POST, PUT, DELETE';
#为预检请求加的header
add_header 'Access-Control-Allow-Headers' '*';
}
location /hls{
add_header 'Access-Control-Allow-Origin' 'https://www.bbb.com'; #配置跨域
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias html/hls; #推流存放的地址
expires -1;
}
#下面两个是加上去的,用来配置直播的http访问 #具体的意思可以在github的文档中查看
location /stat {
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl { #注意这里的路径不能错误,直接写绝对路径就可以
root /usr/local/nginx/nginx-rtmp-module-master; #stat.xsl所在目录位置,该文件可复制
}
}
检验查看流信息:
在浏览器输入url: http:// + 服务器ip +: + 端口号 + /stat
例如:http://192.168.220.128:8080/stat
三、ffmpeg安装及推流
ffmpeg下载地址:https://ffmpeg.org/download.html
ffmpeg-windows下载:https://ffmpeg.zeranoe.com/builds/
ffmpeg-linux版本下载:https://johnvansickle.com/ffmpeg
1.ffmpeg安装
下载ffmpeg-release-amd64-static.tar.xz免安装包到/opt/myPackage目录,输入如下命令
[root@ myPackage] wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-release-amd64-static.tar.xz
[root@ myPackage] xz -d ffmpeg-release-amd64-static.tar.xz
[root@ myPackage] tar -xvf ffmpeg-release-amd64-static.tar
当然,如果想要ffmpeg命令全局可用,可以在bin目录加个链接。比如,分别执行如下命令,即可在:/usr/bin目录下创建ffmpeg和ffprobe软链接。
[root@ myPackage] cd /usr/bin
[root@ bin] ln -s /opt/myPackage/ffmpeg-4.2.2-amd64-static/ffmpeg ffmpeg
[root@ bin] ln -s /opt/myPackage/ffmpeg-4.2.2-amd64-static/ffprobe ffprobe
任意位置输入ffmpeg验证
2.ffmpeg推流
2.1 ffmpeg推送hls流
启动nginx,并输入推流命令:
[root@ sbin] ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec libx264 -acodec aac -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10:8001/hls/test
-i :后跟推流视频地址
-stream_loop -1 :表示循环推流
-vcodec libx264 :视频H264编码格式
-acodec aac :音频HAAC编码格式
-b:v 500k :视频码率 -b:a 32k :音频码率
rtmp://172.21.0.10/hls/test:rtmp协议传输hls流;172.21.0.10:8001为rtmp模块监听IP(端口1935为默认端口省略);hls为application配置号,是rtmp推流请求路径;test可以随便取名,但作为收流的一个凭证
播放地址:http://172.21.0.10:8080/hls/test.m3u8
172.21.0.10:ngixnx服务器ip,
8080:监听监听端口
hls:location模块配置的文件路径 location /hls{…} t
est.m3u8:ffmpeg推流的最后命名及hls流索引文件类型
**注意:**视频编码格式和音频编码格式最好直接设置参数 -vcodec copy -acodec copy;否则会大大占用系统的CPU
2.2 ffmpeg推送http+flv流
2.2.1当rtmp模块监听端口是默认的1935时,输入推流命令
ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec copy -acodec copy -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10/myapp/flv
播放地址配置
http://172.21.0.10:8080/live?app=myapp&stream=flv
live为application配置号
flv可以随便取名,但是最后stream字段值必须与其一直,否则无法播放
2.2.2当rtmp模块监听端口不是默认的1935时,输入推流命令需要带上端口号
ffmpeg -re -stream_loop -1 -i /usr/local/jianghu.mp4 -vcodec copy -acodec copy -b:v 500k -b:a 32k -f flv rtmp://172.21.0.10:8001/myapp/flv
播放地址配置:
http://172.21.0.10:8080/live?port=8001&app=myapp&stream=flv
最后VLC拉流
VLC -->“媒体”–>“打开网络串流”–> http://172.21.0.10:8089/hls/test.m3u8
当然hls流和http+flv是可以同时推送和拉取的。至此hls流和http+flv推流的简易方法就介绍完了。
本文详细介绍了如何在Linux环境下安装nginx和nginx-rtmp-module,以及如何使用ffmpeg进行hls和http+flv直播流的推送。包括检查和安装依赖、编译安装nginx、添加rtmp模块配置、安装ffmpeg以及推流命令的使用。

673

被折叠的 条评论
为什么被折叠?



