RyoJerryYu / autoLive

每日按照时间计划,定时将直播转播至Bilibili。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

autoLive

简介

利用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-dlffmpegpython3。如果系统中没有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

Python库依赖

安装requestsAPSchedulerFlask。需要先安装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地址。按需要添加或删除时间项。

    时间一栏可填入以下内容:

    1. "now": 程序会自动将开播时间定为点击提交的30秒后。
    2. 填入HHMM格式的四位数字,代表未来24小时内对应日本时区的时间。 目前只能接受未来24小时内开始的直播。

    '自定义标题'可不填,不填时默认为"{liver}"+"转播"

  • 准备完成,现在只需等待程序自动转播到你的B站账号了!

已进行过的修改

  • 需要手动填写时间表,手动传输时间表到服务器并手动启动程序。
  • 程序不能一直运行,需要每天启动读取时间表。
  • 灵活度不足。时间表一旦运行后不能增删改,无法应对突击直播等情况。

以上三点已通过添加网页端,并在网页端上进行时间表的增删改来解决。

缺点与修改方案

  • 设置不够灵活,只能通过config.ini手动修改

以后会增加在网页端进行设置、添加liveInfo等功能

  • 只能接受YouTube上的直播

已预留好接口,以后可进行其他网站直播的扩充。

  • 直播前只能发文字动态,不能转发直播间

虽未获得转发直播间的API,但已通过增加直播间链接的方法暂时解决。

  • 同时只能通过一个B站账号进行转播

以后可能会增加多账号支持,但考虑到VPS的承受能力,不推荐同一服务器同时进行多项转播。

TODO LIST

  • 可视化网页端
  • 网页端进行时间表增删改查
  • 每日自动发送每日时间表
  • 退出程序时保存时间表
  • 网页端现在可以查看正在运行中的项目了
  • 增加网页端设置页面
  • 增加可以设置的项目
  • 可以从网页端增删liveInfo
  • 修正因每日动态过长而无法发送问题
  • 尝试使用streamlink代替ffmpeg
  • 其他网站支持

特别鸣谢

本程序有参考以上个人或项目的思路或代码内容,遇到困难时也得到了他们的援助,在此表示感谢。

About

每日按照时间计划,定时将直播转播至Bilibili。


Languages

Language:Python 41.0%Language:JavaScript 31.0%Language:CSS 20.9%Language:HTML 6.5%Language:Shell 0.6%