Centos7.x 搭建RTSP流处理环境
服务器环境
- 服务器 centos 7 目前版本
CentOS Linux release 7.6.1810
下载地址
安装nginx & nginx-rtmp-module
-
下载依赖pcre 目前版本
pcre-8.38
下载地址 使用pcre2 nginx会编译失败 -
下载依赖zlib 目前版本
zlib-1.2.11
下载地址 -
下载openssl 目前版本
openssl-1.0.2s
下载地址 -
下载nginx-rtmp-module
git clone https://github.com/arut/nginx-rtmp-module.git
-
安装gcc g++
yum install gcc yum install gcc-c++
-
安装pcre
-
解压pcre
tar -zxvf pcre-8.38.tar.gz
-
进入解压后的文件夹
cd pcre-8.38
-
编译前配置
./configure
-
编译
make
-
安装
make install
-
-
安装zlib
-
解压zlib
tar -zxvf zlib-1.2.11.tar.gz
-
进入解压后的文件夹
cd zlib-1.2.11
-
编译前配置
./configure
-
编译
make
-
安装
make install
-
-
安装openssl
-
解压openssl
tar -zxvf openssl-1.0.2s.tar.gz
-
进入解压后的文件夹
cd openssl-1.0.2s
-
编译前配置
./configure
-
编译
make
-
安装
make install
-
-
安装nginx
-
解压nginx
tar -zxvf nginx-1.17.0.tar.gz
-
进入解压后的文件夹
cd nginx-1.17.0
-
编译前配置
# 配置解释 ./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.38 # pcre路径 如有不同需要修改 --with-zlib=/root/zlib-1.2.11 # zlib路径 如有不同需修改 --with-openssl=/root/openssl-1.0.2s # openssl路径 如有不同需修改 --add-module=/root/nginx-rtmp-module # nginx-rtmp-module路径 如有不同需要修改 # 运行时去掉换行 ./configure --prefix=/usr/local/nginx --with-pcre=/root/pcre-8.38 --with-zlib=/root/zlib-1.2.11 --with-openssl=/root/openssl-1.0.2s --add-module=/root/nginx-rtmp-module
-
编译
make
-
安装
make install
-
-
/etc/init.d
目录下创建 nginx 文件touch /etc/init.d/nginx
-
编辑nginx文件
-
vim 打开
vim /etc/init.d/nginx
-
复制以下内容
#!/bin/bash #Startup script for the nginx Web Server #chkconfig: 2345 85 15 nginx=/usr/local/nginx/sbin/nginx conf=/usr/local/nginx/conf/nginx.conf case $1 in start) echo -n "Starting Nginx" $nginx -c $conf echo " done." ;; stop) echo -n "Stopping Nginx" killall -9 nginx echo " done." ;; test) $nginx -t -c $conf echo "Success." ;; reload) echo -n "Reloading Nginx" ps auxww | grep nginx | grep master | awk '{print $2}' | xargs kill -HUP echo " done." ;; restart) $nginx -s reload echo "reload done." ;; *) echo "Usage: $0 {start|restart|reload|stop|test|show}" ;; esac
-
保存并退出
-
-
编辑nginx配置文件
-
打开配置文件
vim /usr/local/nginx/conf/nginx.conf
-
添加以下配置
rtmp { #rtmp 协议 server { listen 9999; #端口号 application live{ live on; record off; } application hls{ #输出路径 live on; hls on; hls_path nginx-rtmp-module/hls; hls_cleanup off; } } }
-
保存并退出
-
-
启动nginx
service nginx start
-
安装ffmpeg
-
yum升级
sudo yum install epel-release -y sudo yum update -y
-
安装第三方源
sudo rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
-
安装ffmpeg
sudo yum install ffmpeg ffmpeg-devel -y
-
-
rtsp 转 rtmp 流
# 命令解释 ffmpeg -i "rtsp://admin:admin@192.168.1.208:46599/cam/realmonitor?channel=1&subtype=0" #摄像头地址 -f flv -r 15 -an "rtmp://192.168.1.240:9999/hls/demo" #输出地址 要和ningx一致 demo可以自定义 # 运行时需要去除换行 # 命令行启动 ffmpeg -i "rtsp://admin:admin@192.168.1.208:46599/cam/realmonitor?channel=1&subtype=0" -f flv -r 15 -an "rtmp://192.168.1.240:9999/hls/demo" >> ./log/ffmpeg.out # 后台启动 建议写成shell脚本 nohup ffmpeg -i "rtsp://admin:admin@192.168.1.208:46599/cam/realmonitor?channel=1&subtype=0" -f flv -r 15 -an "rtmp://192.168.1.240:9999/hls/demo" >> ./log/ffmpeg.out 2>&1 &
-
问题
-
无法访问端口 可能是防火墙开启中 可以关闭防火墙
# 关闭防火墙命令: systemctl stop firewalld # 开启防火墙 systemctl start firewalld # 关闭开机自启动 systemctl disable firewalld.service # 开启开机启动 systemctl enable firewalld.service
-
ffmpeg解码时掉线不会重连 目前尚未解决
-
花屏,需要下载ffmpeg源码然后修改并重新编译
在ffmpeg源码udp.c中:将#define UDP_MAX_PKT_SIZE 65536
修改为#define UDP_MAX_PKT_SIZE 655360
,或者更大值
-