Для последней презентации Apple мы решили расширить наши текстовые трансляции и добавить аудиоподкаст в реальном времени. Сначала мы хотели найти какое-нибудь готовое решение, но не смогли подобрать ничего, что могло бы вместить в себя несколько человек из разных точек континента, поэтому пришлось искать иной способ. О том, как сделать живую трансляцию аудиоподкаста (как у Радио-Т :-) с помощью одного ноутбука, одного сервера и Skype — читайте далее.
Настраиваем сервер
Главное, о чём необходимо позаботиться — широкий канал. У нас в пике было около 150-200 слушателей и около 10Мб/с с качеством в 64кб/c, так что рассчитать канал довольно просто, если знать примерное количество соединений.
Мы арендовали на время трансляции облачный сервер в Селектеле, это обошлось нам примерно в 25 рублей, канал потенциально до 1 гигабита, но за него нужно платить. Кстати, жёсткий диск не нужен объемный, достаточно буквально нескольких гигабайт, запись мы будем осуществлять на клиенте.
Начнём с того (у нас, кстати, debian), что установим Icecast 2 — бесплатное ПО для трансляции аудио в сеть. Рекомендуем ознакомиться с документацией, там не очень много, зато можно себе представить, какие возможности открываются.
Установка:
apt-get install icecast2
# бэкап
cp /etc/icecast2/icecast.xml /etc/icecast2/icecast.xml.back
# тут необходимо установить ENABLE=TRUE
emacs /etc/default/icecast2
# сюда копируем конфиг
emacs /etc/icecast2/icecast.xml
Вот тут мы выложили конфиг с комментариями, но вам необходимо его подредактировать. Кстати, можно настроить трансляцию таким образом, чтобы в случае отсутствия сигнала от источника, она не прерывалась, а перекидывалась на запасной источник, на котором, например, постоянно играет музыка.
Запускаем icecast:
service icecast2 start
Единственный большой минус Icecast — он не умеет микшировать потоки на стороне сервера, да и вообще по факту он просто берёт входящий с клиента поток и переадресовывает его слушателям, считая количество подключений, обеспечивая резервирование каналов и т.д.
Поэтому мы займёмся этим на своём компьютере. В качестве основной рабочей станции, которая в итоге и подключается к серверу мы использовали Macbook, поэтому здесь приведены инструкции на примере Mac OS X, но аналогичные действия можно проделать и с помощью Windows и Linux.
Микшируем звук
Для отправки аудиосигнала на сервер нам понадобится специальное ПО, можно выбрать из тех, что перечислены здесь. Я использовал nicecast — условно-бесплатная, но при этом обладает фантастическими возможностями, например, умеет накладывать эффекты и микшировать аудиоканалы только с определённых интерфейсов разных приложений. К счастью, мы можем использовать программу бесплатно целый час, после чего приложение необходимо перезапустить, а трансляция прервётся. Есть полностью бесплатный аналог butt, но его возможности куда более скудные.
Также нам понадобится какое-нибудь аудиоприложение для трансляции фоновой музыки — она позволяет заглушить некоторые шумы, а также является хорошим признаком того, что трансляция не прервалась и идёт, просто все ведущие увлечённо о чём-то молчат :-) Мы использовали mixxx, в основном потому что он бесплатен и довольно могуч. Кстати, для фоновой музыки нам нужен специальный podsafe трек, лицензия которого позволяет использовать его в подкастинге.
Итак, теперь можно попробовать подключиться: открываем Nicecast, во вкладке Source выбираем микрофон, в Quality ставим mono-канал (всё равно микрофон у нас моноканальный) и качество в районе 64-96 килобит в секунду, этого более, чем достаточно. Нажимаем ⌘4, чтобы настроить запись на локальный диск. Теперь самое интересное: нажимаем на клавиатуре ⌘2, в открывшемся окне нужно добавить наш сервер:
Нажимаем заветную кнопочку Start Broadcast и переходим по адресу (для наших настроек это http://stream.tjournal.ru:8000/tjournal
) в браузере, с небольшой задержкой мы должны слышать то, что происходит вокруг. Теперь мы можем подключиться к нашему серверу по адресу http://stream.tjournal.ru:8000/
и наблюдать активные потоки и количество слушателей у них. Ура!
Убедившись, что сервер работает, попробуем объединить несколько потоков: фоновую музыку и наш голос с микрофона. Для этого во вкладке Source выберем Silence Input (тишина) и перейдём во вкладку Effects, в которой и начинается магия.
Добавим эффект Application Mixer и выберем приложение mixxx (или даже iTunes). Затем добавим эффект VoiceOver — это наш микрофон. Придётся немного поиграть с настройками, чтобы голос не был слишком громким, а также чтобы некоторые шумы фильтровались программой (Auto Ducking). Мы добавили ещё два фильтра — Monomizer и Menu Bar Meters, но на самом деле их там очень много и можно долго экспериментировать.
Запускаем трансляцию
Осталось самое простое, звоним кому-нибудь в Skype и добавляем в эффекты ещё один Application Mixer, указывая ему на скайп. Кстати, можно снимать звук не со всего приложения, а только с определённых каналов. Чтобы создать виртуальные каналы мы использовали приложение Soundflower. Они позволят нам направить звук из mixxx на виртуальный аудиоканал и не слушать его в наушниках, а звук с этого виртуального канала будт снимать nicecast.
Окошко с эффектами:
Осталось протестировать всю связку и выложить плеер на сайт (можно и ограничиться ссылкой, но это слишком хардкорно). Кстати, эта трансляция прекрасно работает на мобильных устройствах. Мы воспользовались uppod для того, чтобы на странице был симпатичный плеер вместо простого тега <audio>
.
<div id="audioplayer" style="width: 100%; height: 60px"></div>
<script type="text/javascript" src=«/path/to/uppod.js"></script>
<script>
var player = null;
$(function(){
player = new Uppod({m:"audio",uid:"audioplayer",file:"http://stream.tjournal.ru:8000/tjournal", comment:"TJournal Live"});
setInterval(function() {
if (typeof player != 'undefined' && player != undefined && player != null) { if (player.Played() == 100) {
player.Stop();
player.Play();
}
}}, 10000);
});
</script>
Текстовые трансляции на TJournal построены на технологии long-polling и страницы пользователей не обновляются в течение всей презентации. Если использовать бесплатную версию nicecast, то нужно помнить, что трансляция будет прерываться раз в час, поэтому нужно предусмотреть, чтобы после перерыва она автоматически восстанавливалась незаметно для пользователя. Для этого каждые 10 секунд будем проверять состояние плеера и с помощью особенностей воспроизведения live streaming audio мы сможем отследить и перезапустить, когда трансляция прервалась, а не была приостановлена пользователем.
Вставляем код на сайт. Начинаем трансляцию. Вы восхитительны!
Автор: ilya_compman