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

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

 

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

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

Мой конфиг liquidsoap:
  1.  
  2. #!/usr/bin/liquidsoap
  3. #
  4. # settings
  5. #
  6. set("log.file.path","/var/www/fm/current/log/liquidsoap.log")
  7. set("init.daemon.pidfile.path","/var/www/fm/current/tmp/pids/liquidsoap.pid")
  8. set("init.daemon", true)
  9. #
  10. # source
  11. #
  12. def next_mp3() =
  13. file = list.hd(get_process_lines("/var/www/fm/shared/streaming/next-mix"))
  14. request.create(file)
  15. end
  16. mp3 = request.dynamic(next_mp3)
  17. mp3 = register_flow(
  18. radio="FM",
  19. website="http://fm",
  20. streams=[
  21. ("aac/160k", "http://fm:8000/air.aac"),
  22. ("ogg/160k", "http://fm:8000/air.ogg"),
  23. ("mp3/192k", "http://fm:8000/air.mp3")
  24. ],
  25. mp3)
  26. output.icecast( %mp3.cbr(bitrate=192, id3v2=true),
  27. host="localhost", port = 8000,
  28. user="user", password = "pass", mount = "/air.mp3",
  29. mksafe(mp3) )
  30. output.icecast( %aac(channels=2, samplerate=44100, bitrate=160),
  31. host="localhost", port = 8000,
  32. user="user", password = "pass", mount = "/air.aac",
  33. mksafe(mp3) )
  34. output.icecast( %vorbis.cbr(samplerate=44100, channels=2, bitrate=160),
  35. host="localhost", port = 8000,
  36. user="user", password = "pass", mount = "/air.ogg",
  37. mksafe(mp3) )


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

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

Я пытался сделать так:
  1.  
  2. 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 -"),
  3. host="localhost", port = 8000,
  4. user="user", password = "pass", mount = "/air.aac"
  5. mksafe(mp3) )


но при запуске ошибка, что ffmpeg не предоставляет миме тип
  1.  
  2. Invalid value at line 42, char 17-161:
  3. No format (mime) found, please specify one..


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

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

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.