将来自脚本而不是命令的液体肥皂请求排队



我正在尝试编写我的第一个liquidsoap程序。它是这样的:

sounds_path = "../var/sounds"
# Log file
set("log.file.path","var/log/liquidsoap.log")
set("harbor.bind_addr", "127.0.0.1")
set("harbor.timeout", 5)
set("harbor.verbose", true)
set("harbor.reverse_dns", false)
silence = blank()
queue = request.queue()
def play(~protocol, ~data, ~headers, uri) =
request.push("#{sounds_path}#{uri}")
http_response(protocol=protocol, code=20000)
end
harbor.http.register(port=8080, method="POST", "^/(?!)+", play)
stream = fallback(track_sensitive=false, [queue, silence])
...output.whatever...

我想知道是否有任何方法可以从港口回调推送到队列。

否则,我应该如何继续使请求源自 HTTP 调用?我真的很想避免远程登录。我的最终目标是拥有一个端点,我可以调用该端点,使我的流按需播放文件,并在其余时间保持静音。

试一试它的液体肥皂,所以它很难理解,但它应该可以解决问题

########### functions ##############
def playnow(source,~action="override", ~protocol, ~data, ~headers, uri) =
queue_count = list.length(server.execute("playnow.primary_queue"))
arr = of_json(default=[("key","value")], data)  
track = arr["track"];
log("adding playnow track '#{track}'")
if queue_count != 0 and action == "override" then
server.execute("playnow.insert 0 #{track}")
source.skip(source)
print("skipping playnow queue")
else
server.execute("playnow.push #{track}")
print("no skip required")
end
http_response(
protocol=protocol,
code=200,
headers=[("Content-Type","application/json; charset=utf-8")],
data='{"status":"success", "track": "#{track}", "action": "#{action}"}'
)
end
######## live stuff below #######
playlist= playlist(reload=1, reload_mode="watch", "/etc/liquidsoap/playlist.xspf")
requested = crossfade(request.equeue(id="playnow"))
live= fallback(track_sensitive=false,transitions=[crossfade, crossfade],[requested,  playlist])
output.harbor(%mp3,id="live",mount="live_radio", radio)
harbor.http.register(port=MY_HARBOR_PORT, method="POST","/playnow", playnow(live))

要使用上述方法,您需要发送包含 JSON 数据的 POST 请求,如下所示: {"track":"http://mydomain/mysong.mp3"}

这也是假设您正在运行的港口,您应该能够使用 liquidsoap 文档找到它

有多种方法可以发送到队列中,有telnet,您可以通过Harbor创建HTTP输入或元数据请求来播放,让我知道您选择哪一种,我可以为您提供一个代码示例

最新更新