利用APScheduler,按时间表定时启动转播任务。
利用flask框架构建浏览器端,动态查询或增删时间表中的转播任务。
一个转播任务中,利用youtube-dl获得YouTube直播m3u8地址,并用ffmpeg将对应直播转播到B站直播。
程序运行于Python3
。
- 以下所有步骤中的粘贴不能使用ctrl+v!应使用右键->粘贴。
- 将以下几行命令粘贴入Xshell,自动下载安装脚本并运行:
cd ~ # 进入/root/文件夹中。install.sh默认在此目录中运行。
rm -f install.sh # 移除上次安装遗留的install.sh文件
sudo yum install -y wget # 如果系统中不自带wget,则安装wget。
wget https://raw.githubusercontent.com/RyoJerryYu/autoLive/master/install.sh # 下载安装脚本install.sh
chmod +x install.sh # 给与安装脚本权限
bash install.sh # 运行安装脚本
- 运行大概3分钟左右后,会出现如下提示:
###############################
# #
# paste your bilibili cookies #
# #
###############################
-
此时将直播所用的账号的cookie串粘贴,回车继续运行
-
出现输入端口的提示后,输入0~65535间的一个数字,此数字即为下面所用的端口号。注意不要跟常用的80、22等端口冲突。如不知道怎样的端口会冲突,推荐使用2434端口。
-
出现
安装终了
的提示后,安装完成。现在一键安装脚本不会自动启动程序,请按下面步骤在screen中启动程序。- 逐行输入以下命令:
screen -S autoLive # 打开新的screen窗口并命名为autoLive。在screen中启动的程序即使关闭shell也能继续运行。 cd ~/autoLive # 进入autoLive文件夹。本程序必须从autoLive文件夹中打开。 python36 main.py # 使用python3.6运行本程序。
- 程序运行后,先按
ctrl+A
,然后按下d
键退出screen窗口。此时在screen中启动的程序仍会在后台运行。
-
然后使用浏览器登陆
http://<服务器ip>:<端口号>/autoLive/
,如果没有报错,则安装成功。 -
停止程序时请按以下步骤停止:
- 输入以下命令:
screen -r autoLive # 重新打开名为autoLive的screen窗口
- 按下
ctrl+C
停止程序。如果有转播任务正在运行可能需要多按几次。 - 输入以下命令:
exit # 退出并关闭screen窗口。
- 程序停止后可按上面启动程序的步骤重新启动。
-
后续更新时只需先停止程序,然后重新运行最初的几行命令即可。
-
默认自带的VTuber只包括にじさんじ。如果需要转播其他VTuber需要手动修改
liveInfo.json
,格式请参照下面liveInfo.json
的格式。
- CentOS 7
- youtube-dl 2018.10.05
- ffmpeg 4.0.2-static
- Python 3.6
- requests 2.19.1
- APScheduler 3.5.3
- Flask 1.0.2
安装youtube-dl
,ffmpeg
,python3
。如果系统中没有wget
需要事先安装wget
。
# 安装youtube-dl
wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl
chmod a+rx /usr/local/bin/youtube-dl
# 安装ffmpeg
wget https://raw.githubusercontent.com/q3aql/ffmpeg-install/master/ffmpeg-install
chmod a+x ffmpeg-install
./ffmpeg-install --install release
# 安装python3
sudo yum install python3
安装requests
,APScheduler
,Flask
。需要先安装python3对应的pip。
# 安装requests
pip3 install requests
# 安装APScheduler
pip3 install APScheduler
# 安装Flask
pip3 install Flask
- 先使用
git clone
把代码clone到本地,并cd到对应autoLive
目录中。需要先安装git。 - 把B站cookies串粘贴到
autoLive/cookies.txt
中。 此时可运行python3 refresh_area_id.py
更新area_id.txt,同时测试cookies串是否能登陆。
python3 refresh_area_id.py
- 配置
config.ini
,主要根据自己情况更改直播间标题格式、分区及最高清晰度。其中{time}``{liver}``{site}``{title}
均为时间表中的参数。 - (可选)填写
schedule.txt
。目前只能解析未来24小时内的直播,而且每次重新运行都需要读取一次时间表。因为时间表增删也可从网页端设置,此步可忽略。
# 时间表格式:
# time@liver@site@title
# time:直播时间,可填入"now",会自动认为在读取时间表30秒后开播。
# 此外只能填入HHMM四位数字。
# 只接受未来24小时内的直播,检测出直播时间在运行程序之前时,会自动认为直播在运行程序第二天开始。
# liver:只接受liveInfo.json中存在的liver名。(可自行按json格式添加到liveInfo文件中)
# site:直播网站,可选。目前只接受YouTube。而且不填默认为YouTube。
# title:填入config.ini中直播间标题的title中,可选,不填默认为"{liver}"+"转播"
# 例:
# 1900@桜凛月@绝地求生
# 2100@黒井しば
# 2240@飛鳥ひな@YouTube
# 0640@伏見ガク@YouTube@おはガク!
其中liver只能接受liveInfo.json
中存在的liver,可自行按照对应格式添加新直播主至liveInfo.json
中。格式如下:
[ # list,每一项dictionary对应一位liver
{
"liver": "樋口楓", # str,与时间表中liver项对应
"room": [ # list,每一项dictionary对应一个直播间
{
"site": "YouTube", # str,直播网站名,注意大小写
"url": "https://www.youtube.com/channel/UCsg-YqdqQ-KFF0LNk23BY4A/live" # str,对应直播间url
},
# 其他网站的直播间
# 但是目前只能解析YouTube上的直播间,所以list的其他项没有意义
]
},
# 相同格式的其他liver信息
]
- 运行
main.py
。建议在screen中启动。
python3 main.py
-
登入网页端。
<ip地址>:2434/autoLive/
,其中ip地址为服务器ip地址。按需要添加或删除时间项。时间一栏可填入以下内容:
- "now": 程序会自动将开播时间定为点击提交的30秒后。
- 填入HHMM格式的四位数字,代表未来24小时内对应日本时区的时间。 目前只能接受未来24小时内开始的直播。
'自定义标题'可不填,不填时默认为"{liver}"+"转播"
-
准备完成,现在只需等待程序自动转播到你的B站账号了!
- 需要手动填写时间表,手动传输时间表到服务器并手动启动程序。
- 程序不能一直运行,需要每天启动读取时间表。
- 灵活度不足。时间表一旦运行后不能增删改,无法应对突击直播等情况。
以上三点已通过添加网页端,并在网页端上进行时间表的增删改来解决。
- 设置不够灵活,只能通过config.ini手动修改
以后会增加在网页端进行设置、添加liveInfo等功能
- 只能接受YouTube上的直播
已预留好接口,以后可进行其他网站直播的扩充。
- 直播前只能发文字动态,不能转发直播间
虽未获得转发直播间的API,但已通过增加直播间链接的方法暂时解决。
- 同时只能通过一个B站账号进行转播
以后可能会增加多账号支持,但考虑到VPS的承受能力,不推荐同一服务器同时进行多项转播。
- 可视化网页端
- 网页端进行时间表增删改查
- 每日自动发送每日时间表
- 退出程序时保存时间表
- 网页端现在可以查看正在运行中的项目了
- 增加网页端设置页面
- 增加可以设置的项目
- 可以从网页端增删liveInfo
- 修正因每日动态过长而无法发送问题
- 尝试使用streamlink代替ffmpeg
- 其他网站支持
- B站id: 一生的等待
- HalfMAI/AutoYtB
- 7rikka/autoLive
- pandaGao/bilibili-live
本程序有参考以上个人或项目的思路或代码内容,遇到困难时也得到了他们的援助,在此表示感谢。