最近在折腾无人直播。觉得还挺有意思,接下来就分享一下如何实现。实现后就可以给一些主流的平台直播间不间断推流,达到无人直播的效果。
前提:拥有一台服务器。最好流量是1T或者以上。直播对流量要求比较高,视频码率越大,越费流量,所以最好买个国外的服务器。流量相对便宜。
接下来开始整,以centos作为演示搭建平台:
- 先vim创建文件,然后复制lala大佬的写的比较傻瓜式的操作的脚本,给放到服务器上,脚本内容如下:我这里创建的文件名字是test.sh。( 就是vim test.sh 。然后输入i进入编辑模式,然后复制粘贴以下内容,然后:wq 保存退出即可应该都会用vim吧,不会的可以留言~ )
{hide}
#!/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
for video in $(ls *.mp4)
do
ffmpeg -re -i "$video" -preset ultrafast -c:v copy -c:a aac -b:a 192k -strict -2 -f flv ${rtmp}
# ffmpeg -re -i "$video" -preset ultrafast -vcodec libx264 -g 60 -b:v 8500k -c:a aac -b:a 128k -strict -2 -f flv ${rtmp}
done
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
{/hide}
- 第一步如果折腾好的话是这样的
然后执行bash test.sh。显示这样 - 选择1,回车,yes,先安装FFmpeg。
安装完成之后,再次允许脚本。这次我们选择2. - 这一步我们需要准备推流地址和推流码。这里我以youtube的为例子,把推流地址和推流码复制过来。
注意先复制1,然后复制2,这中间要有斜杠。有的直播平台会自己带,有的没有。最后服务器上是这样的。
一定要注意推流地址和推流码之间的’/’ - 然后回车进入下一步。把MP4格式的视频准备好,就是把你想直播的mp4放到服务器上,不会命令行操作的可用moba这些的ssh终端操作。最好放在和这个脚本一个路径的地方,当然别的地方也可以,随意~
- 至此,我们推流脚本和要推流的视频都已经准备好了。其实已经开始直播了,但是我们这里要再使用一个screen工具来实现后台执行这个命令,让我们可以在服务器上可以继续干别的事情 yum -y install screen 。安装即可。
7.接着我们还是在当前路径,即视频和脚本所在的路径输入 screen。新建一个屏幕。然后执行bash test.sh 然后 输入2.然后输入推流地址和推流码。然后回车,然后输入你视频存放的路径。继续回车,选择是否要添加水印。如果服务器cpu不错。,可以开启,否则不开启。继续回车,就开始推流了 - 此时我们按住CTRL + A +D。即可让程序后台运行。
- 若是想中断直播,输入,screen -ls 。
看到前面的进程号之后,kill掉即可。 若要重新回去这个屏幕 screen -r 进程号 即可。
🐂
我更喜欢这个一些,还能支持docker容器
https://post.smzdm.com/p/akkod3k4/
好的老铁
shell功能太少了,博主可以试试这个https://docs.kplayer.net/
这个看B站有人推荐过,下次试试
怎么感觉都会啊
很优秀~