【问题标题】:Getting Icecast output module settings within Liquidosap on_metadata handler在 Liquidosap on_metadata 处理程序中获取 Icecast 输出模块设置
【发布时间】:2023-03-30 05:30:01
【问题描述】:

我已经构建了一个与 Icecast 源兼容的流媒体服务器,但可以接受额外的元数据。典型的 Icecast 源客户端会将其带外元数据更新请求发送到服务器,如下所示:

/admin/metadata?pass=hackme&mode=updinfo&song=Artist%20-%20Title

我的服务器接受额外的查询字符串参数,例如meta[album]meta[filename]

/admin/metadata?pass=hackme&mode=updinfo&song=Artist%20-%20Title&meta[album]=Album%02Name&meta[filename]=somefile.mp3

我正在尝试配置 Liquidsoap 以发送此扩展元数据。根据文档,我似乎可以通过设置icy_metadata=false 来更新disable the built-in metadata。从那里,我应该可以write my own function to handle on_metadata。该文档为on_metadata 调用提供了以下签名:

(?id:string,(([(string*string)])->unit),source('a))->
source('a)

在元数据包上调用给定的处理程序。

  • id (string – 默认为 ""):强制源 ID 的值。

  • (unlabeled) (([(string*string)])->unit):对流中的每个元数据包调用的函数。它应该很快,因为它是在主线程中运行的。

  • (未标记)(来源('a))

这个签名我不是很懂,但是找到了mailing list post that has a good example

def send_meta(m) =
  system("/path/to/script #{m["title"]} #{m["artist"]}")
end

source = on_metadata(send_meta, source)

有了这些信息,我应该能够调用 cURL 向我的服务器发出请求,更新元数据。像这样的:

system("curl \"http://HOST:PORT/admin/metadata?pass=PASSWORD&mode=updinfo&song=#{m["artist"]}%20-%20#{m["title"]}&filename=#{m["filename"]}\"")

我已经接近了,但我无法弄清楚这个的最后部分:

  • 如何获取相关 Icecast 输出的配置主机、端口和密码?
  • 如何对元数据参数进行适当的 URL 编码?
  • 是否有某种调试输出可用于显示所有可用变量?

【问题讨论】:

    标签: ocaml liquidsoap


    【解决方案1】:

    结果证明这一切都很简单。

    如何获取关联的 Icecast 输出的配置主机、端口和密码?

    这是不可能的,直接的。元数据处理程序没有获得对源的引用。但是,编写一个同时设置两者的函数是微不足道的。

    def output.my_custom_output(encoder, source, host, port, password, mount, genre, url, name) =
      def send_meta(m) = 
        # Code to send metadata here.
        # You can use source, host, port, etc
      end
    
      output.icecast(...)
    end
    

    如何对元数据参数进行适当的 URL 编码?

    url.encode(m['filename'])
    

    是否有某种调试输出可用于显示所有可用变量?

    可能有更好的方法,但我发现 JSON 编码和输出到日志会很有帮助。

    log(json_of(m))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      相关资源
      最近更新 更多