Linux流媒体服务器部署流程
目录
- 流媒体服务器部署
- 部署安装
- 1.更新系统
- 2.安装依赖组件
- 3.解压
- 4.编译安装(添加RTMP和openssl模块)
- 5.检查是否安装成功
- 6.修改nginx配置文件
- 安装ffmpeg
- 安装依赖
- 方法一
- 方法二(Centos适用)
- 方法三
- ffmpeg相关使用命令
- 测试
- Nginx统一管理命令
- 1.创建nginx.sh
- 2.赋予执行权限
- 3.配置环境变量
- 4.执行命令
- 2.赋予执行权限
- 3.配置环境变量
- 4.执行命令
- 总结
流媒体服务器部署
部署安装
1.更新系统
yum update -www.devze.comy
2.安装依赖组件
- 安装
git
git用来拉去github的软件包
yum install git -y
- 安装一系列编译环境
yum -y install gcc-c++ yum -y install pcre pcre-devel yum -y install openssl openssl-devel yum -y install zlib zlib-devel
- 安装
rtmp模块和nginx
网站:nginx—http://nginx.org/download
RTMP-----https://github.com/arut/nginx-rtmp-module.git
可以在Windows下载然后上传到目录/usr/local下
或者直接使用命令
cd /usr/local git clone https://github.com/arut/nginx-rtmp-module.git wget http://nginx.org/download/nginx-1.24.0.tar.gz
3.解压
解压安装包
tar -zxvf nginx-1.24.0.tar.gz
4.编译安装(添加RTMP和openssl模块)
cd nginx-1.24.0 ./configure --add-module=/usr/local/nginx-rtmp-module --with-http_ssl_module --with-http_mp4_module make && make install
如果报以下错误

- 检查:依赖组件是否有安装报错的
- 上述.configure中rtmp模块路径是否正确
5.检查是否安装成功
启动nginx
/usr/local/nginx/sbin/nginx #启动 然后ps -ef |grep nginx,如下图则启动成功

关闭nginx
/usr/local/nginx/sbin/nginx -javascripts stop
6.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
在server块内添加以下内容,在http块内,与其他location同级
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; #目录索引OZIOS
}

在nginx.conf文件中添加rtmp配置与http模块同级
rtmp {
server {
listen 1935; # RTMP协议默认端口,可根据需要修改
chunk_size 5242800;
application videos{
play /usr/local/nginx/videos/;
meta copy;
}
}
}

此配置可支持rtmp协议,适用于推拉流场景和需要用到rtmp协议的情景
安装ffmpeg
安装依赖
yum install yasm -y
方法一
直接yum装,源没有的话换下一个方法
yum install ffmpeg
方法二(centos适用)
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
- 这个镜像是中国科技大学的开源软件镜像站,相对安全
- epel-release(EPEL),是Fedora社区打造,为基于红帽、centos等企业级发行版linux提供的高质量软件包的一个项目,等于扩展了一个软件仓库
- rpmfusion-free-release-8.noarch.rpm 中的8对应的是版本号 比如这个适用centos8
方法三
编译安装
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没有或者版本太老
yum install nasm
如果没有则手动编译安装
cd /usr/local wget http://123.56.3.143:8888/download/nasm-2.16.03.tar.gz
解压编译
tar -zxvf nasm-2.16.03.tar.gz cd nasm-2.16.03 ./configure make make install
重新执行
./configure --prefix=/usr/local/ffmpeg #编译时间挺久的耐心等待半小时 make make install
拷贝ffmpeg命令(方便调用)
cp /usr/local/ffmpeg/bin/* /usr/bin/
将/usr/local/ffmpeg/bin/加到/etc/profile 环境变量也行,复制下方命令即可
echo “export PATH=$PATH:/usr/local/ffmpeg/bin” >> /etc/profile source /etc/profile
ffmpeg相关使用命令
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是时长信息
知识拓展
- HLS 是苹果公司推出的一种流媒体传输协议。它的工作原理是将整个流分成一个个小的基于 HTTP 的文件来下载,每次只下载一部分。这样的设计使得它能够很好地适应不同的网络状况,比如在网络带宽波动时,依然可以比较流畅地播放视频。
- m3u8 + ts分片采用了HLS协议,即m3u8为索引文件,ts为小分片,m3u8是众多ts格式视频URL的集合,
- 苹果自带浏览器可直接访问m3u8格式文件,而无需第三方播放器,可用来判断流媒体服务器是否搭建成功
测试
将一个mp4上传到 /usr/local/nginx/videos 目录
cd /usr/local/nginx/videos ffmpeg -i 上传的视频.mp4 -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts
- 方法一:浏览器访问
serverIP/videos点击.m3u8格式结尾的视频看是否能下载 - 方法二:苹果浏览器直接访问这个
serverIP/videos/视频索引.m3u8观察是否能播放 - 方法三:VLC第三方播放器 点击左上角----媒体----打开网络窜流-----网络----输入URL
serverIP/videos/视频索引.m3u8
问题:访问videos目录报404
检查video目录是否在/usr/local/nginx/下
给videos权限 chmod 644 -R /usr/local/nginx/videos
Nginx统一管理命令
1.创建nginx.sh
mkdir /usr/local/nomaxbin/ 创建脚本目录 touch /usr/local/nomaxbin/nginx.sh 创建脚本文件 vim /usr/local/nomaxbin/nginx.sh 编辑脚本文件
nginx.sh内容如下
#!/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_COUNOZiOST -gt 0 ]
do
sleep 2
NGNIX_COUNT=`pythonps -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
2.赋予执行权限
chmod +x /usr/local/nomaxbin/nginx.sh
3.配置环境变量
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新环境变量
4.执行命令
# 启动 nginx start # 停止 nginx stop nginx shutdown # 重启 nginx restart # 持续输出控制台访问日志 nginx log # 持续输出控制台错误日志 nginx errlog # 服务运行状态 nginx status # 帮助说明 nginx help # 删除日志命令 nginx dellog
2.赋予执行权限
chmod +x /usr/local/nomaxbin/nginx.sh
3.配置环境变量
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新环境变量
4.执行命令
# 启动 nginx start # 停止 nginx stop nginx shutdown # 重启 nginx restart # 持续输出控制台访问日志 nginx log # 持续输出控制台错误日志 nginx errlog # 服务运行状态 nginx status # 帮助说明 nginx help # 删除日志命令 nginx dellog
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
加载中,请稍侯......
精彩评论