Rewrite liq scripts for liquidsoap 2.2.
parent
1bd68fc0ba
commit
7b37ea2dfa
|
@ -16,7 +16,10 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
s = insert_metadata(s)
|
||||
|
||||
# Handler for fetching metadata
|
||||
def on_http_get_metadata(~protocol, ~data, ~headers, uri) =
|
||||
def on_http_get_metadata(request) =
|
||||
http_version = request.http_version
|
||||
headers = request.headers
|
||||
|
||||
m = s.last_metadata() ?? []
|
||||
|
||||
# remove cover info and link to it instead if existing
|
||||
|
@ -35,7 +38,7 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
m = metadata.cover.remove(m)
|
||||
data = http_export_meta(compact=true, m)
|
||||
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(http_version=http_version, status_code=200, headers=[
|
||||
("access-control-allow-origin","*"),
|
||||
("access-control-allow-credentials","true"),
|
||||
("access-control-allow-methods","GET,POST"),
|
||||
|
@ -47,11 +50,14 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
end
|
||||
|
||||
# Handler for fetching current cover art
|
||||
def on_http_get_cover(~protocol, ~data, ~headers, uri) =
|
||||
def on_http_get_cover(request) =
|
||||
http_version = request.http_version
|
||||
headers = request.headers
|
||||
|
||||
m = s.last_metadata() ?? []
|
||||
cover = metadata.cover(m) ?? "".{mime="text/plain"}
|
||||
if string.length(cover) > 0 then
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(http_version=http_version, status_code=200, headers=[
|
||||
("access-control-allow-origin","*"),
|
||||
("access-control-allow-credentials","true"),
|
||||
("access-control-allow-methods","GET,POST"),
|
||||
|
@ -61,7 +67,7 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
("content-type", cover.mime),
|
||||
], data=string_of(cover))
|
||||
else
|
||||
http.response(protocol=protocol, code=404, headers=[
|
||||
http.response(http_version=http_version, status_code=404, headers=[
|
||||
("access-control-allow-origin","*"),
|
||||
("access-control-allow-credentials","true"),
|
||||
("access-control-allow-methods","GET,POST"),
|
||||
|
@ -73,7 +79,11 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
end
|
||||
|
||||
# Handler for receiving metadata
|
||||
def on_http_metadata(~protocol, ~data, ~headers, uri) =
|
||||
def on_http_metadata(request) =
|
||||
http_version = request.http_version
|
||||
data = request.data()
|
||||
headers = request.headers
|
||||
|
||||
let json.parse (data : {
|
||||
data: [(string * string)] as json.object
|
||||
}) = data
|
||||
|
@ -108,7 +118,7 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
# set metadata on stream
|
||||
s.insert_metadata(new_track=new_track, m)
|
||||
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(http_version=http_version, status_code=200, headers=[
|
||||
("allow","POST"),
|
||||
("access-control-allow-origin","*"),
|
||||
("access-control-allow-credentials","true"),
|
||||
|
@ -119,8 +129,11 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
end
|
||||
|
||||
# Just in case we use a browser to send data to this (for example while emulating Tuna)
|
||||
def on_http_metadata_cors(~protocol, ~data, ~headers, uri) =
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
def on_http_metadata_cors(request) =
|
||||
http_version = request.http_version
|
||||
headers = request.headers
|
||||
|
||||
http.response(http_version=http_version, status_code=200, headers=[
|
||||
("allow","POST"),
|
||||
("access-control-allow-origin","*"),
|
||||
("access-control-allow-credentials","true"),
|
||||
|
@ -130,17 +143,17 @@ def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|||
], data="POST")
|
||||
end
|
||||
|
||||
harbor.http.register(port=metadata_api_port, method="GET", "/#{id}/meta", on_http_get_metadata)
|
||||
harbor.http.register(port=metadata_api_port, method="OPTIONS", "/#{id}/meta", on_http_metadata_cors)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="GET", "/#{id}/meta", on_http_get_metadata)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="OPTIONS", "/#{id}/meta", on_http_metadata_cors)
|
||||
|
||||
harbor.http.register(port=metadata_api_port, method="GET", "/#{id}/cover", on_http_get_cover)
|
||||
harbor.http.register(port=metadata_api_port, method="OPTIONS", "/#{id}/cover", on_http_metadata_cors)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="GET", "/#{id}/cover", on_http_get_cover)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="OPTIONS", "/#{id}/cover", on_http_metadata_cors)
|
||||
|
||||
harbor.http.register(port=metadata_api_port, method="POST", "/#{id}", on_http_metadata)
|
||||
harbor.http.register(port=metadata_api_port, method="OPTIONS", "/#{id}", on_http_metadata_cors)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="POST", "/#{id}", on_http_metadata)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="OPTIONS", "/#{id}", on_http_metadata_cors)
|
||||
|
||||
harbor.http.register(port=metadata_api_port, method="POST", "/", on_http_metadata)
|
||||
harbor.http.register(port=metadata_api_port, method="OPTIONS", "/", on_http_metadata_cors)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="POST", "/", on_http_metadata)
|
||||
harbor.http.register.simple(port=metadata_api_port, method="OPTIONS", "/", on_http_metadata_cors)
|
||||
|
||||
s
|
||||
end
|
||||
|
|
|
@ -22,18 +22,32 @@ set("sandbox", "disabled")
|
|||
s = input.http(id="input_ice_main", max_buffer=4., "http://127.0.0.1:61120/main")
|
||||
|
||||
# Split audio off to be handled specially
|
||||
a = drop_video(s)
|
||||
# NOTE - drop_video causes a weird error during script validation, we assume audio-only here
|
||||
# a = drop_video(s)
|
||||
a = s
|
||||
a = mksafe_soft(a)
|
||||
output.dummy(a)
|
||||
|
||||
def append_encoder_meta(m) =
|
||||
[
|
||||
def append_encoder_meta(_) =
|
||||
new_meta = [
|
||||
("encoder", "Liquidsoap #{liquidsoap.version}"),
|
||||
("stream_name", stream_name),
|
||||
("stream_description", stream_description),
|
||||
]
|
||||
|
||||
new_meta = if null.defined(stream_name) then
|
||||
[...new_meta, ("stream_name", null.get(stream_name))]
|
||||
else
|
||||
new_meta
|
||||
end
|
||||
|
||||
new_meta = if null.defined(stream_description) then
|
||||
[...new_meta, ("stream_description", null.get(stream_description))]
|
||||
else
|
||||
new_meta
|
||||
end
|
||||
|
||||
new_meta
|
||||
end
|
||||
a = map_metadata(id="main", append_encoder_meta, a)
|
||||
a = metadata.map(id="main", append_encoder_meta, a)
|
||||
|
||||
a = setup_harbor_metadata_api(a)
|
||||
|
||||
|
@ -55,10 +69,10 @@ def internal_icecast(
|
|||
headers=[],
|
||||
port=61120,
|
||||
host="127.0.0.1",
|
||||
user=internal_icecast_username,
|
||||
password=internal_icecast_password,
|
||||
name=stream_name,
|
||||
description=stream_description,
|
||||
user=null.get(internal_icecast_username),
|
||||
password=null.get(internal_icecast_password),
|
||||
name=null.get(stream_name),
|
||||
description=null.get(stream_description),
|
||||
e, s)
|
||||
end
|
||||
|
||||
|
@ -123,7 +137,7 @@ setup_harbor_stream_api(internal_icecast(
|
|||
))
|
||||
|
||||
# REKT.fm
|
||||
if string.length(rektfm_username) > 0 and string.length(rektfm_password) > 0 then
|
||||
if null.defined(rektfm_username) and null.defined(rektfm_password) then
|
||||
setup_harbor_stream_api(output.icecast(
|
||||
id="out_a_rekt",
|
||||
# %ogg(%flac),
|
||||
|
@ -133,10 +147,10 @@ if string.length(rektfm_username) > 0 and string.length(rektfm_password) > 0 the
|
|||
port=60000,
|
||||
host="stream.rekt.network",
|
||||
# host="stream.rekt.fm",
|
||||
user=rektfm_username,
|
||||
name=stream_name,
|
||||
description=stream_description,
|
||||
password=rektfm_password,
|
||||
user=null.get(rektfm_username),
|
||||
name=null.get(stream_name),
|
||||
description=null.get(stream_description),
|
||||
password=null.get(rektfm_password),
|
||||
start=false,
|
||||
%ffmpeg(
|
||||
format="ogg",
|
||||
|
|
|
@ -3,35 +3,34 @@ stream_api_port=21336
|
|||
interactive.harbor(port=stream_api_port, uri="/interactive") # expose through stream API port
|
||||
|
||||
# list of stream IDs that have been set up by setup_harbor_stream_api
|
||||
stream_api_streams=[]
|
||||
stream_api_streams=ref([])
|
||||
|
||||
def setup_harbor_stream_api_general()
|
||||
def on_list(~protocol, ~data, ~headers, uri) =
|
||||
data = stream_api_streams
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
def on_list(_) =
|
||||
http.response(status_code=200, headers=[
|
||||
("content-type","application/json"),
|
||||
], data=json.stringify(data))
|
||||
], data=json.stringify(stream_api_streams()))
|
||||
end
|
||||
|
||||
harbor.http.register(port=stream_api_port, method="GET", "/streams/", on_list)
|
||||
harbor.http.register.simple(port=stream_api_port, method="GET", "/streams/", on_list)
|
||||
end
|
||||
|
||||
def setup_harbor_stream_api(s) =
|
||||
def on_start(~protocol, ~data, ~headers, uri) =
|
||||
def on_start(_) =
|
||||
s.start()
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(status_code=200, headers=[
|
||||
("content-type","application/json"),
|
||||
], data=json.stringify([]))
|
||||
end
|
||||
|
||||
def on_stop(~protocol, ~data, ~headers, uri) =
|
||||
def on_stop(_) =
|
||||
s.stop()
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(status_code=200, headers=[
|
||||
("content-type","application/json"),
|
||||
], data=json.stringify([]))
|
||||
end
|
||||
|
||||
def on_info(~protocol, ~data, ~headers, uri) =
|
||||
def on_info(_) =
|
||||
data = [
|
||||
("id", s.id()),
|
||||
("last_metadata", json.stringify(s.last_metadata())),
|
||||
|
@ -40,16 +39,16 @@ def setup_harbor_stream_api(s) =
|
|||
("is_ready", json.stringify(s.is_ready())),
|
||||
("is_active", json.stringify(s.is_active())),
|
||||
]
|
||||
http.response(protocol=protocol, code=200, headers=[
|
||||
http.response(status_code=200, headers=[
|
||||
("content-type","application/json"),
|
||||
], data=json.stringify(data))
|
||||
end
|
||||
|
||||
s.id()::stream_api_streams
|
||||
stream_api_streams := [...stream_api_streams(), s.id()]
|
||||
|
||||
harbor.http.register(port=stream_api_port, method="POST", "/streams/#{s.id()}/start", on_start)
|
||||
harbor.http.register(port=stream_api_port, method="POST", "/streams/#{s.id()}/stop", on_stop)
|
||||
harbor.http.register(port=stream_api_port, method="GET", "/streams/#{s.id()}", on_info)
|
||||
harbor.http.register.simple(port=stream_api_port, method="POST", "/streams/#{s.id()}/start", on_start)
|
||||
harbor.http.register.simple(port=stream_api_port, method="POST", "/streams/#{s.id()}/stop", on_stop)
|
||||
harbor.http.register.simple(port=stream_api_port, method="GET", "/streams/#{s.id()}", on_info)
|
||||
|
||||
s
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue