Linux流媒體服務(wù)器部署流程
流媒體服務(wù)器部署
部署安裝
1.更新系統(tǒng)
yum update -y
2.安裝依賴組件
- 安裝
git
? git用來拉去github的軟件包
yum install git -y
- 安裝一系列編譯環(huán)境
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
網(wǎng)站: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
如果報(bào)以下錯(cuò)誤

- 檢查:依賴組件是否有安裝報(bào)錯(cuò)的
- 上述.configure中rtmp模塊路徑是否正確
5.檢查是否安裝成功
啟動(dòng)nginx
/usr/local/nginx/sbin/nginx #啟動(dòng) 然后ps -ef |grep nginx,如下圖則啟動(dòng)成功

關(guān)閉nginx
/usr/local/nginx/sbin/nginx -s stop
6.修改nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
在server塊內(nèi)添加以下內(nèi)容,在http塊內(nèi),與其他location同級(jí)
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模塊同級(jí)
rtmp {
server {
listen 1935; # RTMP協(xié)議默認(rèn)端口,可根據(jù)需要修改
chunk_size 5242800;
application videos{
play /usr/local/nginx/videos/;
meta copy;
}
}
}
此配置可支持rtmp協(xié)議,適用于推拉流場(chǎng)景和需要用到rtmp協(xié)議的情景
安裝ffmpeg
安裝依賴
yum install yasm -y
方法一
直接yum裝,源沒有的話換下一個(gè)方法
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
- 這個(gè)鏡像是中國科技大學(xué)的開源軟件鏡像站,相對(duì)安全
- epel-release(EPEL),是Fedora社區(qū)打造,為基于紅帽、centos等企業(yè)級(jí)發(fā)行版linux提供的高質(zhì)量軟件包的一個(gè)項(xiàng)目,等于擴(kuò)展了一個(gè)軟件倉庫
- rpmfusion-free-release-8.noarch.rpm 中的8對(duì)應(yīng)的是版本號(hào) 比如這個(gè)適用centos8
方法三
編譯安裝
cd ~ #切換到root主目錄 git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg //下載ffmpeg cd ffmpeg ./configure --prefix=/usr/local/ffmpeg make make install
在編譯執(zhí)行./configure --prefix=/usr/local/ffmpeg可能會(huì)報(bào)錯(cuò)nasm沒有或者版本太老
yum install nasm
如果沒有則手動(dòng)編譯安裝
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
重新執(zhí)行
./configure --prefix=/usr/local/ffmpeg #編譯時(shí)間挺久的耐心等待半小時(shí) make make install
拷貝ffmpeg命令(方便調(diào)用)
cp /usr/local/ffmpeg/bin/* /usr/bin/
將/usr/local/ffmpeg/bin/加到/etc/profile 環(huán)境變量也行,復(fù)制下方命令即可
echo “export PATH=$PATH:/usr/local/ffmpeg/bin” >> /etc/profile source /etc/profile
ffmpeg相關(guān)使用命令
ffmpeg -i 本地視頻地址 -y -c:v libx264 -strict -2 轉(zhuǎn)換視頻.mp4 ffmpeg -y -i 本地視頻.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 轉(zhuǎn)換視頻.ts ffmpeg -i 本地視頻.ts -c copy -map 0 -f segment -segment_list 視頻索引.m3u8 -segment_time 5 前綴-%03d.ts #-segment_time 切片時(shí)長(zhǎng),例子為5秒 #前綴-%03d.ts 輸出ts格式為 前綴-001.ts、前綴-002.ts, %03d代表3位數(shù) ffmpeg -i 加視頻 可以輸出各種信息 format部分的duration是時(shí)長(zhǎng)信息
知識(shí)拓展
- HLS 是蘋果公司推出的一種流媒體傳輸協(xié)議。它的工作原理是將整個(gè)流分成一個(gè)個(gè)小的基于 HTTP 的文件來下載,每次只下載一部分。這樣的設(shè)計(jì)使得它能夠很好地適應(yīng)不同的網(wǎng)絡(luò)狀況,比如在網(wǎng)絡(luò)帶寬波動(dòng)時(shí),依然可以比較流暢地播放視頻。
- m3u8 + ts分片采用了HLS協(xié)議,即m3u8為索引文件,ts為小分片,m3u8是眾多ts格式視頻URL的集合,
- 蘋果自帶瀏覽器可直接訪問m3u8格式文件,而無需第三方播放器,可用來判斷流媒體服務(wù)器是否搭建成功
測(cè)試
將一個(gè)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點(diǎn)擊.m3u8格式結(jié)尾的視頻看是否能下載 - 方法二:蘋果瀏覽器直接訪問這個(gè)
serverIP/videos/視頻索引.m3u8觀察是否能播放 - 方法三:VLC第三方播放器 點(diǎn)擊左上角----媒體----打開網(wǎng)絡(luò)竄流-----網(wǎng)絡(luò)----輸入U(xiǎn)RL
serverIP/videos/視頻索引.m3u8
問題:訪問videos目錄報(bào)404
檢查video目錄是否在/usr/local/nginx/下
給videos權(quán)限 chmod 644 -R /usr/local/nginx/videos
Nginx統(tǒng)一管理命令
1.創(chuàng)建nginx.sh
mkdir /usr/local/nomaxbin/ 創(chuàng)建腳本目錄 touch /usr/local/nomaxbin/nginx.sh 創(chuàng)建腳本文件 vim /usr/local/nomaxbin/nginx.sh 編輯腳本文件
nginx.sh內(nèi)容如下
#!/bin/sh
# nginx統(tǒng)一管理腳本-add.yjc.2020年3月18日 10:58:58
# defined
DES="Nginx服務(wù)器"
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 "服務(wù)已停止,使用status命令查看狀態(tài)。"
else
echo "服務(wù)目前處于停止?fàn)顟B(tài),無需再次停止"
fi
elif [ "$1" == "start" ] || [ "$1" == "" ]; then
# 啟動(dòng)
if [ $NGNIX_COUNT -gt 0 ]; then
echo "服務(wù)正在運(yùn)行,PID:"
cat ../logs/nginx.pid
else
echo "正在啟動(dòng)..."
./nginx
echo "服務(wù)已啟動(dòng),使用status命令查看狀態(tài)。"
fi
elif [ "$1" == "restart" ]; then
# 重啟
if [ $NGNIX_COUNT -gt 0 ]; then
echo "正在停止服務(wù)..."
./nginx -s stop
echo "服務(wù)已停止。"
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 "正在啟動(dòng)服務(wù)..."
./nginx
echo "服務(wù)已啟動(dòng),使用status命令查看狀態(tài)。"
elif [ "$1" == "dellog" ]; then
# 重啟
if [ $NGNIX_COUNT -gt 0 ]; then
echo "正在停止服務(wù)..."
./nginx -s stop
echo "服務(wù)已停止。"
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 "正在啟動(dòng)服務(wù)..."
./nginx
echo "服務(wù)已啟動(dòng),使用status命令查看狀態(tài)。"
elif [ "$1" == "log" ]; then
# 持續(xù)輸出日志
tail -f ../logs/access.log
elif [ "$1" == "errlog" ]; then
# 持續(xù)輸出日志
tail -f ../logs/error.log
elif [ "$1" == "status" ]; then
# 狀態(tài)
if [ $NGNIX_COUNT -gt 0 ]; then
echo "服務(wù)正在運(yùn)行,PID:"
cat ../logs/nginx.pid
else
echo "服務(wù)處于停止?fàn)顟B(tài)"
fi
elif [ "$1" == "help" ]; then
# 重新部署
echo "** "$DES
echo "** NGNIX_PATH:"$NGNIX_PATH
echo "----------------------------"
echo " start:?jiǎn)?dòng)"
echo " stop/shutdown:停止"
echo " restart:重啟"
echo " log:持續(xù)輸出控制臺(tái)訪問日志"
echo " errlog:持續(xù)輸出控制臺(tái)錯(cuò)誤日志"
echo " status:服務(wù)運(yùn)行狀態(tài)"
echo " help:幫助說明"
echo " dellog:刪除日志命令"
else
# error
echo "命令錯(cuò)誤,請(qǐng)使用help命令查看具體使用說明"
fi2.賦予執(zhí)行權(quán)限
chmod +x /usr/local/nomaxbin/nginx.sh
3.配置環(huán)境變量
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新環(huán)境變量
4.執(zhí)行命令
# 啟動(dòng) nginx start # 停止 nginx stop nginx shutdown # 重啟 nginx restart # 持續(xù)輸出控制臺(tái)訪問日志 nginx log # 持續(xù)輸出控制臺(tái)錯(cuò)誤日志 nginx errlog # 服務(wù)運(yùn)行狀態(tài) nginx status # 幫助說明 nginx help # 刪除日志命令 nginx dellog
2.賦予執(zhí)行權(quán)限
chmod +x /usr/local/nomaxbin/nginx.sh
3.配置環(huán)境變量
echo "export PATH=\$PATH:/usr/local/nomaxbin" >> /etc/profile source /etc/profile 更新環(huán)境變量
4.執(zhí)行命令
# 啟動(dòng) nginx start # 停止 nginx stop nginx shutdown # 重啟 nginx restart # 持續(xù)輸出控制臺(tái)訪問日志 nginx log # 持續(xù)輸出控制臺(tái)錯(cuò)誤日志 nginx errlog # 服務(wù)運(yùn)行狀態(tài) nginx status # 幫助說明 nginx help # 刪除日志命令 nginx dellog
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux實(shí)現(xiàn)項(xiàng)目的自動(dòng)化部署
這篇文章介紹了Linux實(shí)現(xiàn)項(xiàng)目自動(dòng)化部署的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
Linux如何用grep高效搜索二進(jìn)制日志并統(tǒng)計(jì)匹配結(jié)果
在日常開發(fā)和運(yùn)維工作中,日志分析是排查問題的重要手段,本文將詳細(xì)介紹?grep?處理二進(jìn)制日志的技巧,并給出完整的解決方案,需要的小伙伴可以參考一下2025-04-04
linux下yum安裝時(shí)出現(xiàn)Loaded plugins: fastestmirror的解決辦法
這篇文章主要給大家介紹了linux下yum安裝時(shí)出現(xiàn)Loaded plugins: fastestmirror,使用 yum 出現(xiàn) Loaded plugins: fastestmirror,文中有詳細(xì)的解決方法,通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11

