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
如果報以下錯誤
- 檢查:依賴組件是否有安裝報錯的
- 上述.configure中rtmp模塊路徑是否正確
5.檢查是否安裝成功
啟動nginx
/usr/local/nginx/sbin/nginx #啟動 然后ps -ef |grep nginx,如下圖則啟動成功
關(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
同級
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
模塊同級
rtmp { server { listen 1935; # RTMP協(xié)議默認(rèn)端口,可根據(jù)需要修改 chunk_size 5242800; application videos{ play /usr/local/nginx/videos/; meta copy; } } }
此配置可支持rtmp協(xié)議,適用于推拉流場景和需要用到rtmp協(xié)議的情景
安裝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
- 這個鏡像是中國科技大學(xué)的開源軟件鏡像站,相對安全
- epel-release(EPEL),是Fedora社區(qū)打造,為基于紅帽、centos等企業(yè)級發(fā)行版linux提供的高質(zhì)量軟件包的一個項目,等于擴(kuò)展了一個軟件倉庫
- rpmfusion-free-release-8.noarch.rpm 中的8對應(yīng)的是版本號 比如這個適用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
可能會報錯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
重新執(zhí)行
./configure --prefix=/usr/local/ffmpeg #編譯時間挺久的耐心等待半小時 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 切片時長,例子為5秒 #前綴-%03d.ts 輸出ts格式為 前綴-001.ts、前綴-002.ts, %03d代表3位數(shù) ffmpeg -i 加視頻 可以輸出各種信息 format部分的duration是時長信息
知識拓展
- HLS 是蘋果公司推出的一種流媒體傳輸協(xié)議。它的工作原理是將整個流分成一個個小的基于 HTTP 的文件來下載,每次只下載一部分。這樣的設(shè)計使得它能夠很好地適應(yīng)不同的網(wǎng)絡(luò)狀況,比如在網(wǎng)絡(luò)帶寬波動時,依然可以比較流暢地播放視頻。
- m3u8 + ts分片采用了HLS協(xié)議,即m3u8為索引文件,ts為小分片,m3u8是眾多ts格式視頻URL的集合,
- 蘋果自帶瀏覽器可直接訪問m3u8格式文件,而無需第三方播放器,可用來判斷流媒體服務(wù)器是否搭建成功
測試
將一個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
格式結(jié)尾的視頻看是否能下載 - 方法二:蘋果瀏覽器直接訪問這個
serverIP/videos/視頻索引.m3u8
觀察是否能播放 - 方法三:VLC第三方播放器 點擊左上角----媒體----打開網(wǎng)絡(luò)竄流-----網(wǎng)絡(luò)----輸入URL
serverIP/videos/視頻索引.m3u8
問題:訪問videos目錄報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 # 啟動 if [ $NGNIX_COUNT -gt 0 ]; then echo "服務(wù)正在運(yùn)行,PID:" cat ../logs/nginx.pid else echo "正在啟動..." ./nginx echo "服務(wù)已啟動,使用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 "正在啟動服務(wù)..." ./nginx echo "服務(wù)已啟動,使用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 "正在啟動服務(wù)..." ./nginx echo "服務(wù)已啟動,使用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:啟動" echo " stop/shutdown:停止" echo " restart:重啟" echo " log:持續(xù)輸出控制臺訪問日志" echo " errlog:持續(xù)輸出控制臺錯誤日志" echo " status:服務(wù)運(yùn)行狀態(tài)" echo " help:幫助說明" echo " dellog:刪除日志命令" else # error echo "命令錯誤,請使用help命令查看具體使用說明" fi
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í)行命令
# 啟動 nginx start # 停止 nginx stop nginx shutdown # 重啟 nginx restart # 持續(xù)輸出控制臺訪問日志 nginx log # 持續(xù)輸出控制臺錯誤日志 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í)行命令
# 啟動 nginx start # 停止 nginx stop nginx shutdown # 重啟 nginx restart # 持續(xù)輸出控制臺訪問日志 nginx log # 持續(xù)輸出控制臺錯誤日志 nginx errlog # 服務(wù)運(yùn)行狀態(tài) nginx status # 幫助說明 nginx help # 刪除日志命令 nginx dellog
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
用vnc實現(xiàn)Windows遠(yuǎn)程連接linux桌面之服務(wù)器配置
這篇文章主要介紹了用vnc實現(xiàn)Windows遠(yuǎn)程連接linux桌面之服務(wù)器配置,需要的朋友可以參考下2016-09-09Linux下重啟oracle服務(wù)及監(jiān)聽器和實例詳解
在Linux下重啟Oracle數(shù)據(jù)庫及監(jiān)聽器和實例,本文通過三種方法給大家實例詳解的,介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起看看吧2016-11-11Apache和Tomcat服務(wù)器間的區(qū)別、聯(lián)系、整合詳細(xì)介紹
這篇文章主要介紹了Apache和Tomcat服務(wù)器間的區(qū)別、聯(lián)系、整合詳細(xì)介紹,本文重在介紹,沒有安裝、配置等教程,需要的朋友可以參考下2014-07-07詳解Centos7.2安裝Nginx實現(xiàn)負(fù)載平衡
本篇文章主要介紹了詳解Centos7.2安裝Nginx實現(xiàn)負(fù)載平衡,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03虛擬機(jī)ubuntu16.04無法連網(wǎng)的解決方法
這篇文章主要為大家詳細(xì)介紹了虛擬機(jī)ubuntu16.04無法連網(wǎng)的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03