ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Liquidsoap: кодирование с помощью ffmpeg

 

28
blade-mscl @blade-mscl
Всем привет!
Нужна помощь бывалых вещателей решить проблему:
необходимо вещать поток на все устройства в хорошем качестве.
Задача тривиальная, но как оказалось не очень тривиальная.
что я делаю сейчас:
liquidsoap + icecast

исходный файл в mp3 320
я вещаю liquidsoap 3 потока
mp3 -> 192
aac -> 160
ogg -> 160

Мой конфиг liquidsoap:

#!/usr/bin/liquidsoap

#
# settings
#
set("log.file.path","/var/www/fm/current/log/liquidsoap.log")
set("init.daemon.pidfile.path","/var/www/fm/current/tmp/pids/liquidsoap.pid")
set("init.daemon", true)


#
# source
#
def next_mp3() =
file = list.hd(get_process_lines("/var/www/fm/shared/streaming/next-mix"))
request.create(file)
end
mp3 = request.dynamic(next_mp3)
mp3 = register_flow(
radio="FM",
website="http://fm",
streams=[
("aac/160k", "http://fm:8000/air.aac"),
("ogg/160k", "http://fm:8000/air.ogg"),
("mp3/192k", "http://fm:8000/air.mp3")
],
mp3)


output.icecast( %mp3.cbr(bitrate=192, id3v2=true),
host="localhost", port = 8000,
user="user", password = "pass", mount = "/air.mp3",
mksafe(mp3) )

output.icecast( %aac(channels=2, samplerate=44100, bitrate=160),
host="localhost", port = 8000,
user="user", password = "pass", mount = "/air.aac",
mksafe(mp3) )

output.icecast( %vorbis.cbr(samplerate=44100, channels=2, bitrate=160),
host="localhost", port = 8000,
user="user", password = "pass", mount = "/air.ogg",
mksafe(mp3) )


Но! В существующей конфигурации есть 1 недостаток, встроенные кодировщики в aac и ogg кодируют по качеству звука гораздо хуже чем ffmpeg, это проверено и протестировано.

Вопрос: как сделать кодировщиком ffmpeg и использовать его для aac и ogg?

Я пытался сделать так:

output.icecast( %external(channels=2,samplerate=44100,header=true,restart_on_crash=true,restart_on_metadata,"ffmpeg -i - -vn -f mp4 -c:a libfdk_aac -b:a 160k -"),
host="localhost", port = 8000,
user="user", password = "pass", mount = "/air.aac"
mksafe(mp3) )


но при запуске ошибка, что ffmpeg не предоставляет миме тип

Invalid value at line 42, char 17-161:
No format (mime) found, please specify one..


Подскажите как решить проблему?

28
blade-mscl @blade-mscl
Я делал ещё несколько иную схему
перекодировал предварительно mp3 320 во все нужные форматы
aac и ogg и вещал сразу 3 файла
но у такого конфига есть минус: все 3 источника постепенно рассинхронизируются по времени из-за задержек обработки и т.д.
если бы можно было убрать этот рассинхрон то, это также бы помогло