首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从脚本而不是命令将liquidsoap请求入队

从脚本而不是命令将liquidsoap请求入队
EN

Stack Overflow用户
提问于 2019-09-03 18:46:51
回答 2查看 567关注 0票数 1

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

代码语言:javascript
复制
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", "^/(?!\0)+", play)

stream = fallback(track_sensitive=false, [queue, silence])
...output.whatever...

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

否则,我应该如何处理来自HTTP调用的请求?我真的很想避免远程登录。我的最终目标是有一个端点,我可以调用它,让我的流按需播放文件,其余时间保持静默。

EN

回答 2

Stack Overflow用户

发布于 2019-09-25 23:28:10

让它试试它的液体肥皂,所以它很难理解,但它应该能做到这一点。

代码语言:javascript
复制
########### 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文档找到它

票数 2
EN

Stack Overflow用户

发布于 2019-09-24 19:09:15

有多种方法可以发送到队列中,有telnet,您可以创建http输入,或者通过港口向playnow发送元数据请求,让我知道您选择哪种方法,我可以为您提供代码示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57770129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档