Lab Stuff|简易直播监视器

在一个平常的日子,悠梦正缓缓吸食晚餐的时候,
突然接到公告说子兔音突击吃播了;
虽然立即启动了streamlink,但还是丢掉了前面的一段画面> <

—直播中—
子兔音:反正不留档的哦!我学一个哆啦A梦给你们看——
悠梦:…… :(

当天晚上,悠梦就爆速写了这样一个查房脚本……

本来呢,对于Youtube的查房操作,活性酱是没有多少办法的;因为所有的直播视频都和一般视频一样,每次都会生成一串随机的ID,根本没有固定的地址可以检查……
直到……偶然点开了巧可老师的一个链接……

!原来直播链接还能这样写?(直接在频道链接后面加上/live
抱着试试看的心态,悠梦找了一个链接喂给了streamlink——

yume@v-host:~$ streamlink https://www.youtube.com/channel/UC3iwL9Yz8LcKkJsnLPevOTQ/link

[cli]
Found matching plugin youtube for URL https://www.youtube.com/channel/UC3iwL9Yz8LcKkJsnLPevOTQ/link

Available streams: 144p (worst), 240p, 360p, 480p, 720p, 1080p (best)

这样好,给streamlink鼓鼓掌

至此问题已经解决了,只要用一个很简单的循环就可以查房了:

  1. 插一个标志,昭告天下:我streamlink在运行了;
  2. streamlink检查直播地址,发现在播就会开始录制,否则直接退出,
  3. streamlink结束退出的时候把标志移除;如果正在录制的话,这个标志会防止出现多余的录制进程。

把上面的方法写成脚本,除掉各种虫子之后就有了项目——Simple Live Monitor
正如自述所说,这不是最好的脚本,但是最简易的脚本了。

非技术向的使用说明

买服务器和SSH的事情这边就不说了

安装Streamlink

apt update

apt install python3-pip


pip3 install -U pip

pip3 install streamlink

安装之后运行streamlink有反应就可以了

从GitLab上克隆项目

假如没有安装过git的话

apt install git


git clone https://gitlab.com/inactive-virus/simple-live-monitor.git

然后脚本就会下载到simple-live-monitor文件夹里面

着运行一下

假设脚本文件就放在/home/yume/simple-live-monitor……

脚本的默认值是查天神子兔音的房,直接运行monitor.sh的话,就会进行一次查房,正常运行但没有查到的情况下会输出

yume@v-host:~$ ./monitor.sh
Thur Mar 28 09:44:33 JST 2019


[cli]
Found matching plugin youtube for URL https://www.youtube.com/channel/UC1suqwovbL1kzsoaZgFZLKg/live 

error: No playable streams found on this URL:https://www.youtube.com/channel/UC1suqwovbL1kzsoaZgFZLKg/live

什么,你录上了?^C退出请()

用cron定时查房

首先运行crontab -e

如果第一次运行,会询问你想使用的编辑器;nano是记事本风格的,直接编辑,Ctrl-O 回车保存 Ctrl-X退出,vim是用法要学但效率更高的,按i编辑,按Esc输入:wq回车直接保存退出,自己选一棵树上吧(无慈悲)

增加一行

* * * * * /home/yume/simple-live-monitor/monitor.sh >> /home/yume/Monitor.log 2>&1

保存之后过一分钟然后用 tail Monitor.log 观察一下日志,如果也是正常的话就可以放心离开了

如何把文件取回来

比起FTP,这样的文件还是采用HTTP下载更合适一些;

最简单的办法是apt install apache2
然后把/var/www/html里的index.html删掉,把文件复制过去
注意这个文件夹需要root权限,可以临时用root用户、sudo mv或者直接chmod,自己选一棵树吧

按照Apache的默认设置,没有index网页时,会把文件直接列出来,这时就可以右键下载了

也可以通过一些支持命令行工具的网盘来中转
例如Mega-cmd
只要安装、登录并使用mega-put 就可以上传了

一个小小的后续

因为一开始写代码的思路是"不需要编辑脚本本身就可以使用",所以试着用了$(which streamlink)这样的代码。

事实证明这样做是很不明智的,在cron的运行环境下非常容易发生找不到路径的情况;
虽然在某个特定服务器环境下可以使用bash --login执行来使它找到streamlink,然而换了一台服务器后就失灵了。

最要命的是这一失灵直接导致虚拟音乐节的录制在进行了46分钟发生意外断开后无法重启。

反省后把这个没头脑的代码删除了。
pip安装的streamlink会进入/usr/local/bin(root的场合)或者~/.local/bin(普通用户的场合),直接对这两个路径进行判断了。
都找不到的情况下直接报错,需要在脚本前定义STREAMLINK_BIN变量。

没做完的事情……

也许会把自动上传和删除本地文件的功能也加上去吧

点赞
  1. YYY说道:

    给悠梦酱打call~

发表评论

电子邮件地址不会被公开。必填项已用 * 标注