Тема: Liquidsoap: кодирование с помощью ffmpeg
Всем привет!
Нужна помощь бывалых вещателей решить проблему:
необходимо вещать поток на все устройства в хорошем качестве.
Задача тривиальная, но как оказалось не очень тривиальная.
что я делаю сейчас:
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..
Подскажите как решить проблему?