69 lines
3.3 KiB
Plaintext
69 lines
3.3 KiB
Plaintext
# This file listens on port 21338 for POST JSON data to apply new metadata to the stream live.
|
|
# Our Denon StagelinQ receiver will send the metadata to this interface.
|
|
# For fun, I tested this code with the port set to 1608 to emulate the OBS Tuna plugin's HTTP interface, and that works well!
|
|
|
|
#metadata_api_port = 1608 # Emulate Tuna API
|
|
|
|
def setup_harbor_metadata_api(~metadata_api_port=21338, s) =
|
|
# [insert_metadata_func, source_with_new_metadata]
|
|
result = insert_metadata(s)
|
|
insert_metadata_func = fst(result)
|
|
s = snd(result)
|
|
|
|
# Only Liquidsoap 2.x+
|
|
# s = insert_metadata(s)
|
|
|
|
# Handler for receiving metadata`
|
|
def on_http_metadata(~protocol, ~data, ~headers, uri) =
|
|
data = of_json(default=[
|
|
("data",[("key","value")])
|
|
], data)
|
|
|
|
m = list.assoc(default=[], "data", data)
|
|
insert_metadata_func(m)
|
|
http_response(protocol=protocol, code=200, headers=[
|
|
("allow","POST"),
|
|
("access-control-allow-origin","*"),
|
|
("access-control-allow-credentials","true"),
|
|
("access-control-allow-methods","POST"),
|
|
("access-control-allow-headers","Origin,X-Requested-With,Content-Type,Accept,Authorization,access-control-allow-headers,access-control-allow-origin"),
|
|
("content-type","application/json"),
|
|
], data=json_of(data))
|
|
# Only Liquidsoap 2.x+
|
|
#s.insert_metadata(m)
|
|
# http.response(protocol=protocol, code=200, headers=[
|
|
# ("allow","POST"),
|
|
# ("access-control-allow-origin","*"),
|
|
# ("access-control-allow-credentials","true"),
|
|
# ("access-control-allow-methods","POST"),
|
|
# ("access-control-allow-headers","Origin,X-Requested-With,Content-Type,Accept,Authorization,access-control-allow-headers,access-control-allow-origin"),
|
|
# ("content-type","application/json"),
|
|
# ], data=json_of(data))
|
|
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=[
|
|
("allow","POST"),
|
|
("access-control-allow-origin","*"),
|
|
("access-control-allow-credentials","true"),
|
|
("access-control-allow-methods","POST"),
|
|
("access-control-allow-headers","Origin,X-Requested-With,Content-Type,Accept,Authorization,access-control-allow-headers,access-control-allow-origin"),
|
|
("content-type","text/html; charset=utf-8"),
|
|
], data="POST")
|
|
# Only Liquidsoap 2.x+
|
|
# http.response(protocol=protocol, code=200, headers=[
|
|
# ("allow","POST"),
|
|
# ("access-control-allow-origin","*"),
|
|
# ("access-control-allow-credentials","true"),
|
|
# ("access-control-allow-methods","POST"),
|
|
# ("access-control-allow-headers","Origin,X-Requested-With,Content-Type,Accept,Authorization,access-control-allow-headers,access-control-allow-origin"),
|
|
# ("content-type","text/html; charset=utf-8"),
|
|
# ], data="POST")
|
|
end
|
|
|
|
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)
|
|
|
|
s
|
|
end |