旧安卓手机 termux安装ffmpeg 搭建 24小时推流直播服务器详细教程(原创)
1.相关背景知识
跳到文章末尾
2.给予termux储存权限
使你的termux可以访问待直播的视频素材
termux-setup-storage
3.安装环境
按正式安装ffmpg之前更换至清华源,否则下载极慢,科学网玩家忽略(但还是建议,毕竟跑满带宽还是非常之香)
sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list
sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list
sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list
安装直播环境
pkg update #升级pkg
pkg install -y clang yasm ffmpeg #为确保安装运行成功,ffmpeg 额外安装编译依赖clang与yasm
pkg install -y vim #vim是编辑器之神 写代码必备
4.完整代码
#=================================================================#
# System Required: android zerotermux #
# Description: FFmpeg Stream Media Server 2.0 #
# Author: zimo #
# Website:linzimo.com #
#=================================================================#
#颜色选择
red='\033[0;31m'
green='\033[0;32m'
yellow='\033[0;33m'
font="\033[0m"
#安装ffmpeg
install() {
echo -e "${yellow}正在更新pkg${font}"
sleep 1
pkg update -y
pkg upgrade -y
echo -e "${yellow}pkg升级完毕${font}"
sleep 1
echo -e "${yellow}pkg正在安装必要依赖clang、yasm以及ffmpeg${font}"
sleep 1
pkg install -y clang yasm ffmpeg
echo -e "${yellow}ffmpeg安装完成!${font}"
}
#卸载ffmpeg
uninstall() {
pkg uninstall ffmpeg
echo -e "${yellow}ffmpeg卸载完成!${font}"
}
#输入参数
choose_params() {
echo -e "${yellow}正在运行推流视频参数设置程序${font}"
read -p "请输入要播放的文件夹路径(可编辑源代码设置默认路径,格式仅支持mp4,并且要绝对路径,例如/opt/video): " folder
#以下在-后填入默认路径
folder=${folder:-}
echo "${yellow}您输入的路径为:$folder${font}"
read -p "请输入视频比特率(默认1500k): " video_bitrate
video_bitrate=${video_bitrate:-1500}
read -p "请输入音频比特率(默认128k): " audio_bitrate
audio_bitrate=${audio_bitrate:-128}
read -p "输入你的推流地址和推流码(rtmp协议):" rtmp
# 判断用户输入的地址是否合法
if [[ $rtmp =~ "rtmp://" ]];then
echo -e "${green} 推流地址输入正确,程序将进行下一步操作. ${font}"
else
echo -e "${red} 你输入的地址不合法,请重新运行程序并输入! ${font}"
exit 1
fi
read -p "请选择播放模式(1-添加水印顺序播放,2-循环随机播放,3-循环顺序播放): " play_mode
case $play_mode in
1)
read -p "输入你的水印图片存放绝对路径,例如/opt/image/watermark.jpg (格式支持jpg/png/bmp):" image
echo -e "${yellow} 添加水印完成,程序将开始推流. ${font}"
;;
2)
echo "已选择循环随机播放模式"
;;
3)
echo "已选择循环顺序播放模式"
;;
*)
echo "无效的选项,已选择默认循环顺序播放模式"
play_mode=3
;;
esac
stream_start $folder $video_bitrate $audio_bitrate $image $play_mode
}
#推流模式
stream_start(){
# 运行推流命令
if [ $play_mode -eq 1 ]; then
#1-添加水印顺序播放
while true
do
cd $folder
video_list=$(find $folder -type f -name "*.mp4" | sort)
for video in $video_list; do
ffmpeg -re -i "$video" -i "$image" -filter_complex overlay=W-w-5:5 -preset ultrafast -vcodec libx264 -g 75 -b:v ${video_bitrate}k -c:a aac -b:a ${audio_bitrate}k -strict -2 -f flv ${rtmp}
done
done
elif [ $play_mode -eq 2 ]; then
#2-循环随机播放
while true
do
cd $folder
video=$(find ./ -type f | shuf -n 1)
ffmpeg -re -i "$video" -preset ultrafast -vcodec libx264 -r 15 -g 300 -b:v ${video_bitrate}k -c:a aac -b:a ${audio_bitrate}k -strict -2 -f flv ${rtmp}
done
else
#循环顺序播放
while true
do
cd $folder
video_list=$(find $folder -type f -name "*.mp4" | sort)
for video in $video_list; do
ffmpeg -re -i "$video" -preset ultrafast -vcodec libx264 -r 15 -g 300 -b:v ${video_bitrate}k -c:a aac -b:a ${audio_bitrate}k -strict -2 -f flv ${rtmp}
done
done
fi
echo -e "${green} 推流已经开始 ${font}"
}
start_menu(){
# 开始菜单设置
echo -e "${yellow} termux ffmpeg无人值守循环推流 for linzimo ${font}"
echo -e "${yellow} 源码:linzimo.xyz ${font}"
echo -e "${green} 1.安装ffmpeg ${font}"
echo -e "${green} 2.卸载ffmpeg ${font}"
echo -e "${green} 3.开始无人值守循环推流 ${font}"
read -p "请输入数字(1-3),开始直播:" num
case "$num" in
1)
install
;;
2)
uninstall
;;
3)
choose_params
;;
*)
echo -e "${red} 请输入正确的数字 (1-3) ${font}"
;;
esac
}
# 运行开始菜单
start_menu
termux新建一个脚本文件,复制我写的代码粘贴进去
(正如这篇文章的分类,在termux可以运行的shell脚本完全可以在linux无缝跑,如需实现代码效果,自行食用)
vim zb.sh #创建一个脚本文件
i #输入i切换到vim编辑器的插入模式,然后粘贴代码
按Esc切换到vim的命令行模式,输入 :wq 保存并退出 (关于vim的常用设置在文章末尾)
给予脚本可执行权限
chmod +x zb.sh
现在你只需要输入 ./zb.sh 就可以运行脚本
不出意外的话应该可以运行起来了
如果出了意外的话,可以看我的视频教程,看我是怎么解决的(点赞投币关注支持更好哦!)
脚本逻辑:
将指定路径下的mp4视频文件,经过一系列处理转换,推流至指定服务器
自定义调节视频处理相关参数:视频码率,音频码率,帧率,每多少秒设置一关键帧(具体看我视频)
(控制视频质量与流量消耗量,因为上文说到termux≈linux,所以该脚本的直播功能实际上可以无缝运行在centos unbuntu 等linux系统的vps上的,要考虑带宽与流量消耗)
自定义设置直播逻辑:列表下循环顺序播放,列表下循环随机播放
Termux能够直接安装FFmpeg的原理是因为Termux提供了一个完整的Linux环境,可以使用包管理器安装各种Linux软件包。自带的pkg包管理器(还有apt)
可以安装各种Linux软件包像各种编程语言和开发工具python vim;
网络工具:如nmap、wget、curl、ssh、ftp等,方便用户进行网络扫描、文件传输和远程连接等操作
图像和视频处理工具:如FFmpeg、ImageMagick、OpenCV等,方便用户进行图像和视频处理和转码等操作。
这一期主要讲的是利用ffmpeg直播,属于图像和视频处理,下一期会出相关的教程,用旧手机搭建远程监控摄像头这些,探索旧手机+temux对图像与视频处理的究极形态。Fmpeg是一个功能强大、跨平台的音视频处理工具。它可以用于各种音视频处理场景,包括格式转换、视频采集和处理、音频采集和处理、视频流推送、视频流转码和转发、视频流录制和回放等多个方面,其实国内bilibili、抖音、爱奇艺大厂的剪辑工具有用到ffmpeg
科学上网可推流至youtube等平台,国内媒体平台涨粉与跨境电商引流都可用
值得注意的是
网络需要较为稳定 但带宽不用很高
直播算力不需要很高 5、6年前的手机完全可胜任
1termux必要设置
安装termux或zerotermux
termux简介:是极客工具 约等于arm架构的linux
pkg install -y vim #安装vim文本编辑器
安装完以后进行优化设置
编辑家目录下的.vimrc 文件
vim ~/.vimrc
按 i,切换插入模式 新增如下内容:
set nu " 显示行号
colorscheme desert " 颜色主题
syntax on " 打开语法高亮
按ESC切换命令行模式 后输入:wq 保存并退出
更多termux设置参见国光博客 https://www.sqlsec.com/2018/05/termux.html#Vim-%E9%85%8D%E8%89%B2
3.创建脚本文件
在根目录下创建zb.sh即可
vim zb.sh
复制粘贴以下代码
常用命令
删除所有行方法 按ESC后输入 :%d
撤销 ESC后输入 u
编辑完成以后 按ESC 输入命令保存退出 :wq
给予脚本可执行权限 chmod +x zb.sh
运行(运行前先确定视频存放路径) ./zb.sh
4创建存放视频的文件夹(目前仅支持.mp4)
注意文件夹路径为外部绝对路径,可用MT管理器在外部储存创建一个文件夹用来存放视频
每个手机路径不一样
/storage/emulated/0/vedio/
本文系作者 @linzimo 原创发布在林子墨站点。未经许可,禁止转载。
暂无评论数据