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/

分类: 项目 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录