我正在使用Streamlink来帮助我的一些技术上具有挑战性的年长朋友观看来自选定网站的流,这些网站每周进行两次网络直播,并被摄取到Youtube中。在网络广播之间,最好通过应用程序状态页面向用户显示下一个广播何时开始。
该平台是Raspberry Pi 3 B +。 我已经修改了 Youtube 插件以允许/禁止非直播流。 如果命令行中存在"--youtube-live-required",则只会播放直播流。 这可以防止实时网络广播在结束后重新开始,也可以防止播放 Youtube 随机选择的视频。 我还应用了一个"即将发布"的补丁,修复了 Youtube 最近所做的重大更改。 我提到这些是为了让你知道我至少对 Streamlink 代码有最低限度的了解,并且不是在寻找完全免费的搭车。 但是由于某种原因,我无法了解如何添加功能以从 Youtube.py 插件中获取"scheduledStartTime"值。我希望对 Streamlink 代码有深刻理解的人可以给我一两个线索。
一旦获得"scheduledStartTime"值(以纪元表示法),自定义模块将通过socketio将该值发送到板载Python服务器,然后它可以处理数据并将其推送到连接客户端的状态页面。
在一个无限循环中,Popen 启动了 Streamlink。 Popen 的输出是 PIPEd 并观察以了解正在发生的事情,然后将该信息发送到服务器,再次使用 socketio。 正是在这个循环中,"预定的开始时间"数据将被收集(我认为)。
如何解决问题?
我有一个我不是很自豪的这个问题的解决方案,但它解决了这个问题,我终于可以关闭这个项目了。 此外,事实证明,该解决方案不必使用流链接 youtube.py 插件,但由于它无论如何都会获取感兴趣的 URL 的内容,因此我决定破解该插件并将所有这些业务保存在一个地方。 简而言之,一个简单的正则表达式获取 scheduledStartTime 的值,如果它存在于获取的 URL 内容中。 黑客:该值被打印为字符串"计划开始时间:纪元时间值",该字符串通过 Popen PIPE 通过 streamlink 显示,该管道在自定义模块中轮询此类信息。 然后 Socket.io 将信息发送到板载服务器,该服务器将信息的修改版本发送到应用程序的状态页面(Ionic 框架、打字稿等)。 工程。简单。丑。做。