Часть 1.
Хочу рассказать о своём опыте организации трансляции голоса. Надеюсь кому-то будет полезен.
Всё начиналось как и у всех: захотелось принимать, слушать, записывать общение диспетчеров и пилотов в своём районе. Для этого была приобретена и установлена A0 AVIA от Радиала. От неё спуск RG213 порядка 20-ти метров. После чего стоит полосовой фильтр от PolyAntenn. Идея была не получить для каждой частоты отдельный поток, а иметь единственный поток, в котором будет результат сканирования списка частот. Т.е. нужна была либо р/ст с возможностью сканирования каналов, либо сканер. Самый большой вопрос встал в выборе оборудования. Поиспользовав один раз продукцию Uniden, в итоге серьёзно на неё подсел. В персональном парке были две модели: BC125AT и BCT15X.
Небольшие подробности по точкам установки. Обе точки находятся в удалённых местах, доступ к которым получить можно, но не по мгновенно. Везде используются полноценные Intel Celeron с Windows 7 на борту (raspberry, odroid-ы, vaio x86 и пр. уже пройденный этап).
Первая попытка была использовать BC125AT. Собрал блок питания от сети, установил фильтры. Решил проверить всё на столе. Под сканер есть ПО для программирования по шнурку. Более того, после пропадания питания, сканер потом снова возвращается в последний режим работы. Но одна особенность создавала неудобства: после редактировании списка каналов удалённо и заливки, сканер переходил в режим стояния ("HOLD") на одной из частот. И сдвинуть его можно было только нажав кнопку сканирования. Для удалённой установки подходило мало, но надо с чего-то начинать. Всё было установлено и запущено. И конечно же, по закону подлости, в точке установки, где никогда не было проблем с электричеством, начинаются приключения. За месяц было 3 отключения, после одного из которых сканер не вернулся в режим сканирования - пришлось ехать. Плюс любое изменение в списке каналов тоже планировалось под выезд на точку. В целом, решение неплохое, но не удобное. Прелесть была в том, что сканер не собирал столько шума, сколько свисток.
Можно было запустить shoutcast сервер прямо на компьютере в месте установки, но не все из них на белом (а лучше ещё и статическом) IP. Дома есть Linux сервер на котором поднял IceCast сервер. С компьютера в точке установки транслировал с помощью приложения butt, которое умеет и переподключаться, и авторизоваться, и на нужный Mount point поток вещать, и с нужными настройками качества, и даже записывать (но об этом позже). Дополнительной прелестью было то, что в icecast можно создать пользователей и раздать всем друзьям персональные логины и пароли для прослушивания. Так же, вещание на слушателей с домашнего сервера, не генерировало дополнительный трафик для точки приёма, которая может быть, например, на мобильном интернете.
Дальше появилась идея всё записывать и хранить на всякий случай, например, месяц. Делать это на компьютере в точке установки не разумно, хотя butt позволяет записывать: ограничения интернета, жёсткий диск там минимального размера. Решением оказался пакет streamripper. Который автоматически запускается с помощью supervisor, подключается к серверу вещания icecast2, на протяжении указанного промежутка времени, например, 4 часа, пишет поток в mp3 файл с датой и временем в имени. После окончания промежутка времени файл перемещается в другой каталог для хранения и streamripper запускается заново.
Утром посмотрев в FR24 можно посмотреть, что интересного пролетало в Вашем районе за ночь. Увидев интересный борт, можно найти соответствующий файл и послушать радиообмен. Одно неудобство, искать нужный участок в 4-х часовом промежутке очень тяжело и неудобно. Особенность ночного радиообмена - отсутствие радиообмена. И нужно изловчиться не пропустить эти несколько секунд. Почти на любую проблему можно найти решение. Им оказалась программа sox, которая может заниматься автоматической обработкой аудиофайлов. Одна из функций - это удаление тишины. Поиграв с параметрами получил решение, которое удаляло тишину и превращало 4-х часовой ночной файл в 20-ти минутный с двухсекундными паузами между репликами. Точная привязка по времени при этом терялась (но было точно известно, что это произошло в нужный 4-х часовой период), но при этом возрастало удобство и уменьшалось количество используемого места для хранения. При используемом мной списке частот, днём такая функция была не нужна, потому что радиообмен идёт постоянно. Автоматический запуск такого обработчика нашёл своё место в планировщике cron. Так же туда была добавлена команда, удаляющая все файлы старше двух месяцев, что убрало необходимость делать это вручную. Период в два месяца вполне достаточен для того чтобы отпала всякая необходимость в хранимой информации.
К этому времени захотелось изменить что-то в приёмной части. Поэтому вместо BC125AT был установлен BCT15X, имевший свой блок питания и пр. В первую очередь, из-за возможности запуска сканирования прямо из родной программы управления сканером. Как результат, отпала необходимость выездов для запуска сканирования, каналы можно было редактировать в любое удобное время.
Однажды, при поиске альтернативной программы управления сканером, рассматривал возможность покупки другой модели, под которую нет штатной программы, наткнулся на ProScan. Сразу же подкупила функциональность. Программа рисовала переднюю панель сканера с которой можно было интерактивно управлять сканером. В итоге она могла сама определять, когда открыт шумоподав в сканере, записывать поток с микрофона и отправлять на icecast2 через интернет. Необходимость в butt пропала. Приятным дополнением стала статистика, которую программа ведёт по запрограммированным каналам: сохраняет сколько раз была активность на каждом канале. Ещё одним бонусом стала возможность сохранения каждого сеанса в отдельный файл с указанием даты, времени и имени канала. Так же настраивается количество дней хранения истории. Поиск в такой истории совсем не составляет труда. Но т.к. место и ресурсы в компьютере на точке установки ограничены, пришлось поставить небольшой период хранения. Ну и вишенкой на торте стала передача имени канала в потоке трансляции. Практически в любом плеере при проигрывании голоса отображается название канала, на котором сейчас есть активность. Теперь не надо угадывать какой из диспетчеров говорит - это видно в плеере.
В конце концов получилась система:
- с возможностью не жечь мобильный трафик в точке установки и раздавать друзьям доступ к трансляции
- иметь группу каналов в одной трансляции и видеть в плеере на каком канале идёт радиообмен
- иметь "оперативный" архив, со всеми деталями (дата, время, название канала, отдельным файлом), на компьютере в точке установки
- иметь "долгосрочный" архив со сжатием (удалением тишины) дома
P.S. Держать полноценный миникомпьютер на каждой точке затратно, сами сканеры не дёшевы и программа стоит денег. Моей задачей было построить то, что удобно и устраивает меня. Получившееся решение удобно для использования и, на мой взгляд, стоит своих денег.
P.S. Можно было прицепить скриншотов и примеров, для большей наглядности, но задача была не украшать, а поделиться опытом. Если возникли вопросы - предлагаю писать в эту тему, собственно для того и создавалась.