问题描述
使用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
但是,如果您需要的话,则没有内置功能。 最好的方法是使用脚本或命令行解决方法已经完成的方法。