让youtube-dl等到直播开始

问题描述

使用youtube-dl,您可以轻松下载正在进行实时流式传输。

$ youtube-dl --hls-use-mpegts <URL>

但是,如果尚未启动目标实时流,则该命令将在打印消息后立即退出

[youtube] I1gi2ABCDEf: Downloading webpage
ERROR: This live event will begin in a few moments.

是否可以让youtube-dl等到直播开始后再进行记录?

我当前的解决方法是:

#pseudo code
while (true) {
    start = time()
    execute youtube-dl
    end = time()
    if (end - start > 10seconds) { #if recording succeeded
        break
    }
    sleep(some seconds)
}

或者这个:

#pseudo code
while (true) {
    if (check_if_live_is_active_using_curl_or_youtube_api()) {
        break
    }
    sleep(some seconds)
}
execute youtube-dl

将两者结合起来现在可以完美地工作了(从第二个角度讲应该足够了,但是我也将第一个作为后备),但是如果有一种更优雅的方法,那就太好了。

解决方法

如果您恰巧在systemd的Linux发行版上,则可以使用systemd-run来安排瞬态计时器单元。例如,如果流从3:30开始:

Column(
  children: <Widget>[
     Text('Data'),Expanded(
      child: ListView()
    )
  ],)

如果出现问题,可以添加选项systemd-run --working-directory=/path/to/save/file --on-calendar=15:30 youtube-dl --hls-use-mpegts <URL> --property Restart=on-failure重试。

,

也许会做到

until youtube-dl --hls-use-mpegts <URL>; do continue; done

或其他选择

while [[ true ]]; do youtube-dl --hls-use-mpegts && break || continue ; done

但是,如果您需要的话,则没有内置功能。 最好的方法是使用脚本或命令行解决方法已经完成的方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...