1 |
yum update -y |
? git用来拉去github的软件包
1 |
yum install git -y |
1 2 3 4 |
yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install openssl openssl-devel yum -y install zlib zlib-devel |
网站:nginx—http://nginx.org/download
? RTMP-----https://github.com/arut/nginx-rtmp-module.git
可以在windows下载然后上传到目录/usr/local下
或者直接使用命令
1 2 3 |
cd /usr/local git clone https://github.com/arut/nginx-rtmp-module.git wget http://nginx.org/download/nginx-1.24.0.tar.gz |
解压安装包
1 |
tar -zxvf nginx-1.24.0.tar.gz |
1 2 3 |
cd nginx-1.24.0 ./configure --add-module=/usr/local/nginx-rtmp-module --with-http_ssl_module --with-http_mp4_module make && make install |
如果报以下错误
启动nginx
1 2 |
/usr/local/nginx/sbin/nginx #启动 然后ps -ef |grep nginx,如下图则启动成功 |
关闭nginx
1 |
/usr/local/nginx/sbin/nginx -s stop |
1 |
vim /usr/local/nginx/conf/nginx.conf |
在server块内添加以下内容,在http块内,与其他location同级
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
location /videos/ { types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } #明确此目录需要支持的视频格式 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET'; add_header 'Access-Control-Allow-Headers' '*'; add_header 'Access-Control-Expose-Headers' '*'; #以上add_header 用来解决跨域问题 alias /usr/local/nginx/videos/; #映射路径 autoindex on; #目录索引 } |
在nginx.conf文件中添加rtmp配置与http模块同级
1 2 3 4 5 6 7 8 9 10 |
rtmp { server { listen 1935; # RTMP协议默认端口,可根据需要修改 chunk_size 5242800; application videos{ play /usr/local/nginx/videos/; meta copy; } } } |
此配置可支持rtmp协议,适用于推拉流场景和需要用到rtmp协议的情景
1 |
yum install yasm -y |
直接yum装,源没有的话换下一个方法
1 |
yum install ffmpeg |
1 2 3 |
yum install epel-release yum install -y https://mirrors.ustc.edu.cn/rpmfusion/free/el/rpmfusion-free-release-8.noarch.rpm yum install -y ffmpeg ffmpeg-devel |
编译安装
1 2 3 4 5 6 |
cd ~ #切换到root主目录 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg //下载ffmpeg cd ffmpeg ./configure --prefix=/usr/local/ffmpeg make make install |
在编译执行./configure --prefix=/usr/local/ffmpeg可能会报错nasm没有或者版本太老
1 |
yum install nasm |
如果没有则手动编译安装
1 2 |
cd /usr/local wget http://123.56.3.143:8888/download/nasm-2.16.03.tar.gz |
解压编译
1 2 3 4 5 |
tar -zxvf nasm-2.16.03.tar.gz cd nasm-2.16.03 ./configure make make install |
重新执行
1 2 3 4 |
./configure --prefix=/usr/local/ffmpeg #编译时间挺久的耐心等待半小时 make make install |
拷贝ffmpeg命令(方便调用)
1 |
cp /usr/local/ffmpeg/bin/* /usr/bin/ |
将/usr/local/ffmpeg/bin/加到/etc/profile 环境变量也行,复制下方命令即可
1 2 |
echo “export PATH=$PATH:/usr/local/ffmpeg/bin” >> /etc/profile source /etc/profile |
1 2 3 4 5 6 7 8 9 |
ffmpeg -i 本地视频地址 -y -c:v libx264 -strict -2 转换视频.mp4
ffmpeg -y -i 本地视频.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 转换视频.ts
ffmpeg -i 本地视频.ts -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts #-segment_time 切片时长,例子为5秒 #前缀-%03d.ts 输出ts格式为 前缀-001.ts、前缀-002.ts, %03d代表3位数
ffmpeg -i 加视频 可以输出各种信息 format部分的duration是时长信息 |
知识拓展
将一个mp4上传到 /usr/local/nginx/videos 目录
1 2 |
cd /usr/local/nginx/videos ffmpeg -i 上传的视频.mp4 -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts |
问题:访问videos目录报404
检查video目录是否在/usr/local/nginx/下
给videos权限 chmod 644 -R /usr/local/nginx/videos
1 2 3 |
mkdir /usr/local/nomaxbin/ 创建脚本目录 touch /usr/local/nomaxbin/nginx.sh 创建脚本文件 vim /usr/local/nomaxbin/nginx.sh 编辑脚本文件 |
nginx.sh内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
#!/bin/sh
# nginx统一管理脚本-add.yjc.2020年3月18日 10:58:58
# defined DES="Nginx服务器" NGNIX_PATH="/usr/local/nginx/sbin/"
# 切换目录 cd $NGNIX_PATH
NGNIX_COUNT=`ps -C nginx --no-header | wc -l` if [ "$1" == "stop" ] || [ "$1" == "shutdown" ]; then # 停止 if [ $NGNIX_COUNT -gt 0 ]; then echo "正在停止..." ./nginx -s stop echo "服务已停止,使用status命令查看状态。" else echo "服务目前处于停止状态,无需再次停止" fi elif [ "$1" == "start" ] || [ "$1" == "" ]; then # 启动 if [ $NGNIX_COUNT -gt 0 ]; then echo "服务正在运行,PID:" cat ../logs/nginx.pid else echo "正在启动..." ./nginx echo "服务已启动,使用status命令查看状态。" fi elif [ "$1" == "restart" ]; then # 重启 if [ $NGNIX_COUNT -gt 0 ]; then echo "正在停止服务..." ./nginx -s stop echo "服务已停止。" fi NGNIX_COUNT=`ps -C nginx --no-header | wc -l` echo "Watting..." while [ $NGNIX_COUNT -gt 0 ] do sleep 2 NGNIX_COUNT=`ps -C nginx --no-header | wc -l` echo "Watting..." done echo "正在启动服务..." ./nginx echo "服务已启动,使用status命令查看状态。" elif [ "$1" == "dellog" ]; then # 重启 if [ $NGNIX_COUNT -gt 0 ]; then echo "正在停止服务..." ./nginx -s stop echo "服务已停止。" fi NGNIX_COUNT=`ps -C nginx --no-header | wc -l` echo "Watting..." while [ $NGNIX_COUNT -gt 0 ] do sleep 2 NGNIX_COUNT=`ps -C nginx --no-header | wc -l` echo "Watting..." done
echo "正在删除日志..." rm -rf ../logs/*.log echo "日志删除完成..."
echo "正在启动服务..." ./nginx echo "服务已启动,使用status命令查看状态。" elif [ "$1" == "log" ]; then # 持续输出日志 tail -f ../logs/access.log elif [ "$1" == "errlog" ]; then # 持续输出日志 tail -f ../logs/error.log elif [ "$1" == "status" ]; then # 状态 if [ $NGNIX_COUNT -gt 0 ]; then echo "服务正在运行,PID:" cat ../logs/nginx.pid else echo "服务处于停止状态" fi elif [ "$1" == "help" ]; then # 重新部署 echo "** "$DES echo "** NGNIX_PATH:"$NGNIX_PATH echo "----------------------------" echo " start:启动" echo " stop/shutdown:停止" echo " restart:重启" echo " log:持续输出控制台访问日志" echo " errlog:持续输出控制台错误日志" echo " status:服务运行状态" echo " help:帮助说明" echo " dellog:删除日志命令" else # error echo "命令错误,请使用help命令查看具体使用说明" fi |
1 |
chmod +x /usr/local/nomaxbin/nginx.sh |
1 2 |
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新环境变量 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 启动 nginx start # 停止 nginx stop nginx shutdown # 重启 nginx restart # 持续输出控制台访问日志 nginx log # 持续输出控制台错误日志 nginx errlog # 服务运行状态 nginx status # 帮助说明 nginx help # 删除日志命令 nginx dellog |
1 |
chmod +x /usr/local/nomaxbin/nginx.sh |
1 2 |
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新环境变量 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# 启动 nginx start # 停止 nginx stop nginx shutdown # 重启 nginx restart # 持续输出控制台访问日志 nginx log # 持续输出控制台错误日志 nginx errlog # 服务运行状态 nginx status # 帮助说明 nginx help # 删除日志命令 nginx dellog |