Configuring Linux
May 2012 2

Вещание AAC-потока с помощью Icecast2 и streamTranscoder

Недавно у меня встала задача транслировать радиопоток и поток онлайн-трансляции подкаста, в формате AAC (Advanced Audio Coding). Этот формат является более экономичным, чем MP3, и в то же время позволяет сохранять приемлемое качество звучания. По субъективным ощущениям 48Kbps AAC не отличается от 64Kbps MP3. В этой краткой заметке опишу, как я настраивал одновременное вещание в форматах MP3 128Kbps, MP3 64Kbps и AAC 48Kbps. При этом я воспользовался OpenSource-инструментом streamTranscoderv3, о котором, почему-то, на хабре не было ни слова. Принцип работы streamTranscoder изображен на рисунке. Далее, как его собрать и использовать.

Первым делом сделаем checkout исходников этой программы:
# svn co svn.oddsock.org/public/trunk/streamTranscoderv3

Для сборки этих исходников понадобилось поставить следующие пакеты (сервер у меня на Ubuntu 10.04):
# apt-get install automake libtool libmad0-dev libflac-dev libfaac-dev

Чтобы сборка прошла успешно, пришлось немного допилить файлы, шедшие в комплекте исходников.
1. Добавил в Makefile.am строчку:
ACLOCAL_AMFLAGS = -I m4

2. Раскомментировал в configure.in строчку
AC_PROG_CXX

3. Чтобы утилита скомпилировалась с поддержкой AAC, пришлось дописать в файл configure.in еще строчку:
  AC_DEFINE(HAVE_FAAC,1)

сразу перед строкой
  FAAC_CFLAGS

4. Для корректной сборки мне пришлось указать еще вот такой «костылек»:
LIBFLAC_LIBDIR=. ./autogen.sh

После компиляции получаем бинарник streamTranscoderv3, который помещаем, к примеру, в /opt/streamtranscoder.
# mkdir -p /opt/streamTranscoder
# mv streamTranscoderv3 /opt/streamTranscoder
# cd /opt/streamTranscoder
# ./streamTranscoderv3

Первый запуск бинарника создаст в текущем каталоге конфиг streamTranscoder_0.cfg, в котором нужно будет указать параметры потока-источника. Редактируем до примерно такого состояния:
# The source URL for the broadcast. It must be in the form http://server:port/mountpoint.  For those servers without a mountpoint (Shoutcast) use http://server:port.
SourceURL=http://127.0.0.1:1976/apple
AutomaticReconnectSecs=10
AutoConnect=1
# Log Level 1 = LOG_ERROR, 2 = LOG_ERROR+LOG_INFO, 3 = LOG_ERROR+LOG_INFO+LOG_DEBUG
LogLevel=2
# Log File
LogFile=streamTranscoder
# Number of encoders to use
NumEncoders=2

Параметр SourceURL указывает на поток-источник, который уже существует. Помимо остальных более-менее понятных параметров, мы также указали параметр NumEncoders=2, что означает, что мы будем формировать два дополнительных потока (в нашем случае 64Kbps MP3 и 48Kbps AAC).
Запустив бинарник еще раз, получим конфиги кодировщиков, в нашем случае streamTranscoder_1.cfg и streamTranscoder_2.cfg. Они гораздо увесистее, комментировать каждый пункт нет смысла, просто приведу ссылку на то, как выглядит мой конфиг для AAC.

Оценить качество звучания вы можете на странице подкаста AppleInsider.ru, либо скормив эти ссылки в свой любимый плеер: Hi (MP3 128Kbps), Low (MP3 64Kbps), AAC (48Kbps).
+19
8k 57
Comments 14