Поставить в очередь запрос 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", "^/(?!\0)+", play)

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

И мне было интересно, есть ли способ нажать на очередь из обратного вызова гавани.

В противном случае, как мне поступить, чтобы запросы исходили из HTTP-вызовов? Я действительно хочу избежать telnet. Моя конечная цель — иметь конечную точку, которую я могу вызывать, чтобы мой поток воспроизводил файл по требованию и молчал все остальное время.


person Nirro    schedule 03.09.2019    source источник


Ответы (2)


попробуйте это жидкое мыло, так что его сложно понять, но оно должно помочь

########### 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 следующим образом: {"track":"http://mydomain/mysong.mp3"}

это также с предположением, что у вас есть гавань, которую вы сможете узнать, используя документы LiquidSoap.

person Mooseh    schedule 25.09.2019
comment
Я попробую это и вернусь с результатами. Большое спасибо! - person Nirro; 05.12.2019

существует несколько способов отправки в очередь, есть telnet, вы можете создать ввод http или запрос метаданных для воспроизведения через гавань, дайте мне знать, какой из них вы выберете, и я могу предоставить вам пример кода

person Mooseh    schedule 24.09.2019
comment
Я хотел бы иметь возможность ставить файлы в очередь через HTTP-запрос по запросу. Я видел пример, приведенный для ввода HTTP в документах, но он запрашивает внешний URI, чтобы проверить, что будет дальше. Чего я не могу сделать, так это вызвать конечную точку LiquidSoap с именем файла, включенным в запрос (что-то вроде /play/{filename}), и заставить Liquidsoap поставить этот файл в очередь. Знаете ли вы, как это можно осуществить? - person Nirro; 24.09.2019