- PVSM.RU - https://www.pvsm.ru -

Организация онлайн-вещания подкаста

Организация онлайн вещания подкастаДля последней презентации Apple [1] мы решили расширить наши текстовые трансляции и добавить аудиоподкаст в реальном времени. Сначала мы хотели найти какое-нибудь готовое решение, но не смогли подобрать ничего, что могло бы вместить в себя несколько человек из разных точек континента, поэтому пришлось искать иной способ. О том, как сделать живую трансляцию аудиоподкаста (как у Радио-Т :-) с помощью одного ноутбука, одного сервера и Skype — читайте далее.

Настраиваем сервер

Главное, о чём необходимо позаботиться — широкий канал. У нас в пике было около 150-200 слушателей и около 10Мб/с с качеством в 64кб/c, так что рассчитать канал довольно просто, если знать примерное количество соединений.

Мы арендовали на время трансляции облачный сервер в Селектеле, это обошлось нам примерно в 25 рублей, канал потенциально до 1 гигабита, но за него нужно платить. Кстати, жёсткий диск не нужен объемный, достаточно буквально нескольких гигабайт, запись мы будем осуществлять на клиенте.

Начнём с того (у нас, кстати, debian), что установим Icecast 2 — бесплатное ПО для трансляции аудио в сеть. Рекомендуем ознакомиться с документацией [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

Вот тут [3] мы выложили конфиг с комментариями, но вам необходимо его подредактировать. Кстати, можно настроить [4] трансляцию таким образом, чтобы в случае отсутствия сигнала от источника, она не прерывалась, а перекидывалась на запасной источник, на котором, например, постоянно играет музыка.

Запускаем icecast:

service icecast2 start

Единственный большой минус Icecast — он не умеет микшировать потоки на стороне сервера, да и вообще по факту он просто берёт входящий с клиента поток и переадресовывает его слушателям, считая количество подключений, обеспечивая резервирование каналов и т.д.

Поэтому мы займёмся этим на своём компьютере. В качестве основной рабочей станции, которая в итоге и подключается к серверу мы использовали Macbook, поэтому здесь приведены инструкции на примере Mac OS X, но аналогичные действия можно проделать и с помощью Windows и Linux.

Микшируем звук

Для отправки аудиосигнала на сервер нам понадобится специальное ПО, можно выбрать из тех, что перечислены здесь [5]. Я использовал nicecast [6] — условно-бесплатная, но при этом обладает фантастическими возможностями, например, умеет накладывать эффекты и микшировать аудиоканалы только с определённых интерфейсов разных приложений. К счастью, мы можем использовать программу бесплатно целый час, после чего приложение необходимо перезапустить, а трансляция прервётся. Есть полностью бесплатный аналог butt [7], но его возможности куда более скудные.

Также нам понадобится какое-нибудь аудиоприложение для трансляции фоновой музыки — она позволяет заглушить некоторые шумы, а также является хорошим признаком того, что трансляция не прервалась и идёт, просто все ведущие увлечённо о чём-то молчат :-) Мы использовали mixxx [8], в основном потому что он бесплатен и довольно могуч. Кстати, для фоновой музыки нам нужен специальный podsafe [9] трек, лицензия которого позволяет использовать его в подкастинге.

Организация онлайн вещания подкаста

Итак, теперь можно попробовать подключиться: открываем 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 [10]. Они позволят нам направить звук из mixxx на виртуальный аудиоканал и не слушать его в наушниках, а звук с этого виртуального канала будт снимать nicecast.

Окошко с эффектами:
Организация онлайн вещания подкаста

Осталось протестировать всю связку и выложить плеер на сайт (можно и ограничиться ссылкой, но это слишком хардкорно). Кстати, эта трансляция прекрасно работает на мобильных устройствах. Мы воспользовались uppod [11] для того, чтобы на странице был симпатичный плеер вместо простого тега <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

Источник [12]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/podkasty/48636

Ссылки в тексте:

[1] последней презентации Apple: http://tjournal.ru/paper/apple-october-event

[2] документацией: http://www.icecast.org/docs/icecast-2.3.3/

[3] тут: https://gist.github.com/chekalskiy/7371563

[4] настроить: http://habrahabr.ru/post/156591/

[5] здесь: http://www.icecast.org/3rdparty.php

[6] nicecast: http://www.rogueamoeba.com/nicecast/

[7] butt: http://butt.sourceforge.net/

[8] mixxx: http://www.mixxx.org/

[9] podsafe: http://rpod.ru/podsafe/

[10] Soundflower: http://cycling74.com/products/soundflower/

[11] uppod: http://uppod.ru/

[12] Источник: http://habrahabr.ru/post/202226/