简介
因使用大华摄像头,需要在系统中实时播放视频,因此通过自己搭建一个流媒体服务器,将rtsp流转为flv格式,前端再使用flv.js实现在线播放功能。
目录
一、下载nginx
1、更新相关依赖
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
2、下载nginx
cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.19.3.tar.gz
tar -zxvf nginx-1.19.3.tar.gz
二、下载nginx-http-flv-module
下载地址
直接下载最新的代码上传到服务器/usr/local/
下
三、配置环境支持http2.0
注:配置http2.0是为了解决同源策略的限制,同一源下只能同时创建6个请求,播放6路视频。若无此需求,可跳过第一步,直接使用http即可。
1、更新openssl版本
openssl version
openssl版本在1.0.2以上则不需要更新,否则需要升级版本,如下是升级为1.1.1n
cd /usr/local/
mkdir openssl
cd openssl
wget https://www.openssl.org/source/openssl-1.1.1n.tar.gz
tar -zxvf openssl-1.1.1n.tar.gz
cd openssl-1.1.1n
./config
make && make install
备份原有的openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
添加新的软链接
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl/ /usr/include/openssl
echo "/usr/local/lib64" >> /etc/ld.so.conf
ldconfig -v
2、编译nginx
cd /usr/local/nginx-1.19.3
./configure --with-http_ssl_module --with-openssl=/usr/local/openssl/openssl-1.1.1n --with-http_v2_module --add-module=/usr/local/nginx-http-flv-module
其中--with-openssl
是openssl的路径,--add-module
是nginx-http-flv-module的路径
make -j4
make install
3、生成https测试证书
cd /usr/local/nginx
mkdir certs
cd /certs
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
4、配置nginx.conf
完整配置文件如下
worker_processes 1;
error_log logs/error.log error;
#如果此模块被编译为动态模块并且要使用与 RTMP 相关的功能时,
#必须指定下面的配置项并且它必须位于 events 配置项之前,
#否则 NGINX 启动时不会加载此模块或者加载失败
#load_module modules/ngx_http_flv_live_module.so;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
server {
listen 18071;
location /live {
flv_live on;
chunked_transfer_encoding on;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
add_header 'Cache-Control' 'no-cache';
}
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp; # hls方式m3u8访问的文件路径
}
#stat json格式
location /stat {
rtmp_stat all;
rtmp_stat_format json;
}
# location /stat {
# rtmp_stat all;
# rtmp_stat_stylesheet stat.xsl;
# }
# location /stat.xsl {
# root /usr/local/nginx-http-flv-module; #指定 stat.xsl 的位置
# }
}
server {
listen 18181 ssl http2;
server_name www.gongl.com;
ssl_certificate "/usr/local/nginx/certs/server.crt"; # server公钥证书的路径
ssl_certificate_key "/usr/local/nginx/certs/server.key"; # server私钥的路径
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location /{
proxy_pass http://192.168.3.122:18071/;
}
}
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;
rtmp {
out_queue 4096;
out_cork 8;
max_streams 128;
timeout 15s;
drop_idle_publisher 15s;
log_interval 5s; #log 模块在 access.log 中记录日志的间隔时间,对调试非常有用
log_size 1m; #log 模块用来记录日志的缓冲区大小
server {
listen 18072;
server_name localhost;
application transition{
live on;
gop_cache off;
#播放之前调用(可通过nginx直接配置鉴权或定义到项目中去鉴权)
on_play http://192.168.3.13:18061/flv/on_play;
#断开之后调用
# on_play_done http://192.168.3.13:18061/flv/on_play_done;
}
}
指定配置文件启动
../sbin/nginx -s stop
../sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注:若存在连接的http,通过reload重载nginx无法断开之前的http连接。当修改了配置文件,使用stop停止nginx之后再重新启动
四、安装ffmpeg
cd /usr/local
mkdir ffmpeg