很久之前買了個友善的開發板R2S,一直在家吃灰。最近看到網上有用ffmpeg進行直播推流的案例,想把吃灰的的開發板利用起來,於是有了這篇教程。
第一步:安裝ffmpeg
sudo apt update
sudo apt install ffmpeg
第二部分:建立用來存放影片的資料夾
這裡我選擇在/opt下建立video 資料夾,將自己的影片上傳到該資料夾
mkdir /opt/video
第三部分:相關推流的指令碼
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#=================================================================#
# System Required: CentOS7 X86_64 #
# Description: FFmpeg Stream Media Server #
# Author: LALA #
# Website: https://www.lala.im #
#=================================================================#
# 顏色選擇
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
font="\033[0m"
ffmpeg_install(){
# 安裝FFMPEG
read -p "你的機器內是否已經安裝過FFmpeg4.x?安裝FFmpeg才能正常推流,是否現在安裝FFmpeg?(yes/no):" Choose
if [ $Choose = "yes" ];then
yum -y install wget
wget --no-check-certificate https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.0.3-64bit-static.tar.xz
tar -xJf ffmpeg-4.0.3-64bit-static.tar.xz
cd ffmpeg-4.0.3-64bit-static
mv ffmpeg /usr/bin && mv ffprobe /usr/bin && mv qt-faststart /usr/bin && mv ffmpeg-10bit /usr/bin
fi
if [ $Choose = "no" ]
then
echo -e "${yellow} 你選擇不安裝FFmpeg,請確定你的機器內已經自行安裝過FFmpeg,否則程式無法正常工作! ${font}"
sleep 2
fi
}
stream_start(){
# 定義推流地址和推流碼
read -p "輸入你的推流地址和推流碼(rtmp協議):" rtmp
# 判斷使用者輸入的地址是否合法
if [[ $rtmp =~ "rtmp://" ]];then
echo -e "${green} 推流地址輸入正確,程式將進行下一步操作. ${font}"
sleep 2
else
echo -e "${red} 你輸入的地址不合法,請重新執行程式並輸入! ${font}"
exit 1
fi
# 定義影片存放目錄
read -p "輸入你的影片存放目錄 (格式僅支援mp4,並且要絕對路徑,例如/opt/video):" folder
# 判斷是否需要新增水印
read -p "是否需要為影片新增水印?水印位置預設在右上方,需要較好CPU支援(yes/no):" watermark
if [ $watermark = "yes" ];then
read -p "輸入你的水印圖片存放絕對路徑,例如/opt/image/watermark.jpg (格式支援jpg/png/bmp):" image
echo -e "${yellow} 新增水印完成,程式將開始推流. ${font}"
# 迴圈
while true
do
cd $folder
for video in $(ls *.mp4)
do
ffmpeg -re -i "$video" -i "$image" -filter_complex overlay=W-w-5:5 -c:v libx264 -c:a aac -b:a 192k -strict -2 -f flv ${rtmp}
done
done
fi
if [ $watermark = "no" ]
then
echo -e "${yellow} 你選擇不新增水印,程式將開始推流. ${font}"
# 迴圈
while true
do
cd $folder
video=$(find ./ -type f | shuf -n 1)
ffmpeg -re -i "$video" -preset ultrafast -vcodec libx264 -g 60 -b:v 6000k -c:a aac -b:a 128k -strict -2 -f flv ${rtmp}
done
fi
}
# 停止推流
stream_stop(){
screen -S stream -X quit
killall ffmpeg
}
# 開始選單設定
echo -e "${yellow} CentOS7 X86_64 FFmpeg無人值守迴圈推流 For LALA.IM ${font}"
echo -e "${red} 請確定此指令碼目前是在screen視窗內執行的! ${font}"
echo -e "${green} 1.安裝FFmpeg (機器要安裝FFmpeg才能正常推流) ${font}"
echo -e "${green} 2.開始無人值守迴圈推流 ${font}"
echo -e "${green} 3.停止推流 ${font}"
start_menu(){
read -p "請輸入數字(1-3),選擇你要進行的操作:" num
case "$num" in
1)
ffmpeg_install
;;
2)
stream_start
;;
3)
stream_stop
;;
*)
echo -e "${red} 請輸入正確的數字 (1-3) ${font}"
;;
esac
}
# 執行開始選單
start_menu
先執行以下命令新建終端
screen -S myVideo
然後執行上面的指令碼,按照提示輸入B站的推流地址(伺服器地址+串流金鑰),影片檔案位置(如/opt/video),即可。然後按ctrl+d或輸入exit退出當前screen。完成以上,/opt/vide資料夾的影片會在你的直播間迴圈播放
其他說明
- 推流地址可以在以下頁面獲取
- 要先在B站開播,然後再執行指令碼。