本文主要是介绍Linux流媒体服务器部署流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建...
流媒体服务器部署
部署安装
1.更新系统
yum update -www.chinasem.cny
2.安装依赖组件
- 安装
git
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
总结
这篇关于Linux流媒体服务器部署流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!