Более двух лет назад, работал на местном радио.
Директор поставил задачу транслировать эфир радио в интернет в формате AAC.
После долгих поисков бесплатного свободного сервера транслирующего поток в формате AAC, решено было самостоятельно написать сорс-клиент для IceCast2.
За основу был взят собственный сорс-клиент IceCast в части формата взаимодействия с сервером.
Поскольку на тот момент у меня небыло опыта компилирования Си-кода под линукс, а также опыта написания системных утилит, пришлось писать на Shell.
Итак, по просьбам некоторых коллег, представляю исходники моего "безобразия" по имени AACSource:
Срипт запуска
Конфигурационный файл
Собственно сам AACSource
Показаны сообщения с ярлыком Icecast. Показать все сообщения
Показаны сообщения с ярлыком Icecast. Показать все сообщения
25 авг. 2010 г.
27 мая 2008 г.
Закрываем IceCast в CHROOT и регистрируем в каталоге dir.xiph.org
Задача изоляции IceCast в CHROOT решается больее чем просто:
1. копируем в директорию изоляции IceCast директории /admin /log /web и их содержимое;
2. правим /etc/icecast/icecast.xml
Решение вопроса с регистрацией в каталоге оказалось мнее простым.
Необходимо добавить в директорию изоляции еще и все подключаемые библиотеки, и возможно некоторые файлы из /etc.
В первую очередь сделал:
# ldd `which icecast`
linux-gate.so.1 => (0xffffe000)
libcurl.so.4 => /usr/lib/libcurl.so.4 (0xb7eba000)
libidn.so.11 => /usr/lib/libidn.so.11 (0xb7e8a000)
libssl.so.0 => /usr/lib/libssl.so.0 (0xb7e4a000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0xb7d0c000)
libtheora.so.0 => /usr/lib/libtheora.so.0 (0xb7cd2000)
libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0xb7ca9000)
libogg.so.0 => /usr/lib/libogg.so.0 (0xb7ca4000)
libxslt.so.1 => /usr/lib/libxslt.so.1 (0xb7c71000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7b58000)
libdl.so.2 => /lib/libdl.so.2 (0xb7b54000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7b3f000)
libm.so.6 => /lib/libm.so.6 (0xb7b18000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7b01000)
libc.so.6 => /lib/libc.so.6 (0xb79bf000)
/lib/ld-linux.so.2 (0xb7efd000)
и затем скопировал все необходимые библиотеки в соответствующие директории в CHROOT.
Как в процессе выяснилось, для регистрации нашего севера в каталоге также необходимо скопировать билиотеку /lib/libresolv.so
Далее создаем в CHROOT директорию /etc и размещаем там файлы:
/etc/host.conf
/etc/hosts
/etc/resolv.conf
/etc/nsswitch.conf
Теперь настраиваем наш source-клиент на регистрацию, заполняем информацию и проверяем как прошла регистрация.
Для тех кто за файерволом необходимо открыть нашему серверу порт 80 на исходящее соединение с dir.xiph.org.
У меня так и не получилось добится от IceCast'a разрешать имена хостов через DNS. Пришлось прописать адрес в /etc/hosts:
# For loopbacking.
127.0.0.1 localhost
192.168.0.21 icecast.rest.str.ru
# End of hosts.
193.218.105.163 dir.xiph.org
1. копируем в директорию изоляции IceCast директории /admin /log /web и их содержимое;
2. правим /etc/icecast/icecast.xml
Решение вопроса с регистрацией в каталоге оказалось мнее простым.
Необходимо добавить в директорию изоляции еще и все подключаемые библиотеки, и возможно некоторые файлы из /etc.
В первую очередь сделал:
# ldd `which icecast`
linux-gate.so.1 => (0xffffe000)
libcurl.so.4 => /usr/lib/libcurl.so.4 (0xb7eba000)
libidn.so.11 => /usr/lib/libidn.so.11 (0xb7e8a000)
libssl.so.0 => /usr/lib/libssl.so.0 (0xb7e4a000)
libcrypto.so.0 => /usr/lib/libcrypto.so.0 (0xb7d0c000)
libtheora.so.0 => /usr/lib/libtheora.so.0 (0xb7cd2000)
libvorbis.so.0 => /usr/lib/libvorbis.so.0 (0xb7ca9000)
libogg.so.0 => /usr/lib/libogg.so.0 (0xb7ca4000)
libxslt.so.1 => /usr/lib/libxslt.so.1 (0xb7c71000)
libxml2.so.2 => /usr/lib/libxml2.so.2 (0xb7b58000)
libdl.so.2 => /lib/libdl.so.2 (0xb7b54000)
libz.so.1 => /usr/lib/libz.so.1 (0xb7b3f000)
libm.so.6 => /lib/libm.so.6 (0xb7b18000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7b01000)
libc.so.6 => /lib/libc.so.6 (0xb79bf000)
/lib/ld-linux.so.2 (0xb7efd000)
и затем скопировал все необходимые библиотеки в соответствующие директории в CHROOT.
Как в процессе выяснилось, для регистрации нашего севера в каталоге также необходимо скопировать билиотеку /lib/libresolv.so
Далее создаем в CHROOT директорию /etc и размещаем там файлы:
/etc/host.conf
/etc/hosts
/etc/resolv.conf
/etc/nsswitch.conf
Теперь настраиваем наш source-клиент на регистрацию, заполняем информацию и проверяем как прошла регистрация.
Для тех кто за файерволом необходимо открыть нашему серверу порт 80 на исходящее соединение с dir.xiph.org.
У меня так и не получилось добится от IceCast'a разрешать имена хостов через DNS. Пришлось прописать адрес в /etc/hosts:
# For loopbacking.
127.0.0.1 localhost
192.168.0.21 icecast.rest.str.ru
# End of hosts.
193.218.105.163 dir.xiph.org
23 апр. 2008 г.
Скрипт записи эфира онлайн радио (для использования на радиостанциях)
Продолжаю публикацию своих скриптов.
Была поставлена задача записывать эфир собственного онлайн вещания. И хранить записи соответственно нужно часовыми кусками.
Для чего и изготовил этот скрипт.
Зависимости:
1. нужен собственно Shell;
2. для записи http-потока использован wget.
Протестирована работа с сервером IceCast, думаю будет работать и с другими серверами отдающими звук по http.
Формат вещания он ест любой - напрямую сохраняет часовые (или любой другой продолжительности) куски потока на жесткий диск.
На случай обрыва связи предусмотрена логика востановления соединения через пятисекундные интервалы.
Для записи эфира в режиме 24/7 достаточно прописать его запуск в crontab и добавить логику организации файлов в папки (если есть желание конечно ;) ).
У нас собственно складывается по дням, храним записи 40 дней, для чего используется как раз Скрипт удаления старых файлов и папок
Прошу смотреть и ругать ;)
Была поставлена задача записывать эфир собственного онлайн вещания. И хранить записи соответственно нужно часовыми кусками.
Для чего и изготовил этот скрипт.
Зависимости:
1. нужен собственно Shell;
2. для записи http-потока использован wget.
Протестирована работа с сервером IceCast, думаю будет работать и с другими серверами отдающими звук по http.
Формат вещания он ест любой - напрямую сохраняет часовые (или любой другой продолжительности) куски потока на жесткий диск.
На случай обрыва связи предусмотрена логика востановления соединения через пятисекундные интервалы.
Для записи эфира в режиме 24/7 достаточно прописать его запуск в crontab и добавить логику организации файлов в папки (если есть желание конечно ;) ).
У нас собственно складывается по дням, храним записи 40 дней, для чего используется как раз Скрипт удаления старых файлов и папок
Прошу смотреть и ругать ;)
Подписаться на:
Сообщения (Atom)
