Для последней презентации Apple мы решили расширить наши текстовые трансляции и добавить аудиоподкаст в реальном времени. Сначала мы хотели найти какое-нибудь готовое решение, но не смогли подобрать ничего, что могло бы вместить в себя несколько человек из разных точек континента, поэтому пришлось искать иной способ. О том, как сделать живую трансляцию аудиоподкаста (как у Радио-Т :-) с помощью одного ноутбука, одного сервера и Skype — читайте далее.
Главное, о чём необходимо позаботиться — широкий канал. У нас в пике было около 150-200 слушателей и около 10Мб/с с качеством в 64кб/c, так что рассчитать канал довольно просто, если знать примерное количество соединений.
Мы арендовали на время трансляции облачный сервер в Селектеле, это обошлось нам примерно в 25 рублей, канал потенциально до 1 гигабита, но за него нужно платить. Кстати, жёсткий диск не нужен объемный, достаточно буквально нескольких гигабайт, запись мы будем осуществлять на клиенте.
Начнём с того (у нас, кстати, debian), что установим Icecast 2 — бесплатное ПО для трансляции аудио в сеть. Рекомендуем ознакомиться с документацией, там не очень много, зато можно себе представить, какие возможности открываются.
Установка:
Вот тут мы выложили конфиг с комментариями, но вам необходимо его подредактировать. Кстати, можно настроить трансляцию таким образом, чтобы в случае отсутствия сигнала от источника, она не прерывалась, а перекидывалась на запасной источник, на котором, например, постоянно играет музыка.
Запускаем icecast:
Единственный большой минус Icecast — он не умеет микшировать потоки на стороне сервера, да и вообще по факту он просто берёт входящий с клиента поток и переадресовывает его слушателям, считая количество подключений, обеспечивая резервирование каналов и т.д.
Поэтому мы займёмся этим на своём компьютере. В качестве основной рабочей станции, которая в итоге и подключается к серверу мы использовали Macbook, поэтому здесь приведены инструкции на примере Mac OS X, но аналогичные действия можно проделать и с помощью Windows и Linux.
Для отправки аудиосигнала на сервер нам понадобится специальное ПО, можно выбрать из тех, что перечислены здесь. Я использовал nicecast — условно-бесплатная, но при этом обладает фантастическими возможностями, например, умеет накладывать эффекты и микшировать аудиоканалы только с определённых интерфейсов разных приложений. К счастью, мы можем использовать программу бесплатно целый час, после чего приложение необходимо перезапустить, а трансляция прервётся. Есть полностью бесплатный аналог butt, но его возможности куда более скудные.
Также нам понадобится какое-нибудь аудиоприложение для трансляции фоновой музыки — она позволяет заглушить некоторые шумы, а также является хорошим признаком того, что трансляция не прервалась и идёт, просто все ведущие увлечённо о чём-то молчат :-) Мы использовали mixxx, в основном потому что он бесплатен и довольно могуч. Кстати, для фоновой музыки нам нужен специальный podsafe трек, лицензия которого позволяет использовать его в подкастинге.
Итак, теперь можно попробовать подключиться: открываем Nicecast, во вкладке Source выбираем микрофон, в Quality ставим mono-канал (всё равно микрофон у нас моноканальный) и качество в районе 64-96 килобит в секунду, этого более, чем достаточно. Нажимаем ⌘4, чтобы настроить запись на локальный диск. Теперь самое интересное: нажимаем на клавиатуре ⌘2, в открывшемся окне нужно добавить наш сервер:
Нажимаем заветную кнопочку Start Broadcast и переходим по адресу (для наших настроек это
Убедившись, что сервер работает, попробуем объединить несколько потоков: фоновую музыку и наш голос с микрофона. Для этого во вкладке Source выберем Silence Input (тишина) и перейдём во вкладку Effects, в которой и начинается магия.
Добавим эффект Application Mixer и выберем приложение mixxx (или даже iTunes). Затем добавим эффект VoiceOver — это наш микрофон. Придётся немного поиграть с настройками, чтобы голос не был слишком громким, а также чтобы некоторые шумы фильтровались программой (Auto Ducking). Мы добавили ещё два фильтра — Monomizer и Menu Bar Meters, но на самом деле их там очень много и можно долго экспериментировать.
Осталось самое простое, звоним кому-нибудь в Skype и добавляем в эффекты ещё один Application Mixer, указывая ему на скайп. Кстати, можно снимать звук не со всего приложения, а только с определённых каналов. Чтобы создать виртуальные каналы мы использовали приложение Soundflower. Они позволят нам направить звук из mixxx на виртуальный аудиоканал и не слушать его в наушниках, а звук с этого виртуального канала будт снимать nicecast.
Окошко с эффектами:
Осталось протестировать всю связку и выложить плеер на сайт (можно и ограничиться ссылкой, но это слишком хардкорно). Кстати, эта трансляция прекрасно работает на мобильных устройствах. Мы воспользовались uppod для того, чтобы на странице был симпатичный плеер вместо простого тега
Настраиваем сервер
Главное, о чём необходимо позаботиться — широкий канал. У нас в пике было около 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 и переходим по адресу (для наших настроек это
stream.tjournal.ru:8000/tjournal
) в браузере, с небольшой задержкой мы должны слышать то, что происходит вокруг. Теперь мы можем подключиться к нашему серверу по адресу 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 для того, чтобы на странице был симпатичный плеер вместо простого тега
.
<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 мы сможем отследить и перезапустить, когда трансляция прервалась, а не была приостановлена пользователем.
Вставляем код на сайт. Начинаем трансляцию. Вы восхитительны!