Использовать метаданные в имени файла при сохранении входных данных гавани Liquidsoap

Итак, у меня есть экземпляр Liquidsoap, который я использую для потоковой передачи на сервер Icecast.

Я хотел бы записывать любые прямые трансляции, которые происходят автоматически, что я сейчас делаю и работаю хорошо.

То, что я хотел бы сделать, это использовать метаданные (в частности, название песни) живого шоу при создании mp3-архива.

                #!/usr/local/bin/liquidsoap

            set("log.file",true)
            set("log.file.path","/var/log/liquidsoap/radiostation.log")
            set("log.stdout",true)
            set("log.level",3)
            #-------------------------------------

            set("harbor.bind_addr","0.0.0.0")

            #-------------------------------------

            backup_playlist = playlist("/home/radio/playlists/playlist.pls",conservative=true,reload_mode="watch")
            output.dummy(fallible=true,backup_playlist)

            #-------------------------------------

            live_dj = input.harbor(id="live",port=9000,password="XXX", "live")

            date = '%m-%d-%Y'
            time = '%H:%M:%S'
            output.file(%mp3, "/var/www/recorded-shows/#{Title} - Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)

            #time_stamp = '%m-%d-%Y, %H:%M:%S'
            #output.file(%mp3, "/var/www/recorded-shows/live_dj_#{time_stamp}.mp3", live_dj, fallible=true)

            #-------------------------------------

            on_fail = single("/home/radio/fallback/Enei -The Moment Feat DRS.mp3")

            #-------------------------------------

            source = fallback(track_sensitive=false,
                              [live_dj, backup_playlist, on_fail])

            # We output the stream to icecast
            output.icecast(%mp3,id="icecast",
                           mount="myradio.mp3",
                           host="localhost", password="XXX",
                           icy_metadata="true",description="cool radio",
                           url="http://myradio.fm",
                           source)

Я добавил #{title}, где я хотел бы, чтобы название моей песни появилось, к сожалению, хотя я не могу получить это заполнение.

Мой ди-джей использует BUTT и название шоу связано как часть их соединения, поэтому данные должны быть доступны до записи.

Любой совет высоко ценится!

0 ответов

Это далеко не так просто, как кажется.

  1. В title метаданные являются динамическими, поэтому недоступны в качестве переменной при инициализации скрипта
  2. Аргумент имени файла output.file компилируется при инициализации скрипта

Решение могло бы состоять из:

  1. Определение ссылки на переменную title для заполнения живыми метаданными
  2. Вывод во временный файл
  3. Переименуйте файл при закрытии, используя on_close аргумент с output.file (в этом случае мы можем просто добавить заголовок)

Это даст следующий код (в Linux измените mv с ren в Windows):

date = '%m-%d-%Y'
time = '%H:%M:%S'
# Title is a reference
title = ref ""

# Populate with metadata
def get_title(m)
  title := m['title']
end
live_dj = on_metadata(get_title,live_dj)

# Rename file on close
def on_close(filename)
  # Generate new file name
  new_filename = "#{path.dirname(filename)}/#{!title} - #{basename(filename)}"
  # Rename file
  system("mv '#{filename}' '#{new_filename}'")
end

output.file(on_close=on_close, %mp3, "/var/www/recorded-shows/Recorded On #{date} At #{time}.mp3", live_dj, fallible=true)

Я тестировал аналогичный сценарий, и он отлично работает. Просто помните, что это будет создавать новый файл каждый раз, когда ди-джей отключает или обновляет заголовок. Также имейте в виду, что отметки времени будут разрешеныoutput.file.

Это основано на следующем примере от разработчика Liquidsoap: https://github.com/savonet/liquidsoap/issues/661)

Другие вопросы по тегам