Разработка Adblock Radio

https://www.adblockradio.com/blog/2018/11/15/designing-audio-ad-block-radio-podcast/
  • Перевод


tl;dr: Adblock Radio распознаёт аудиорекламу с помощью машинного обучения и Shazam-подобных техник. Основной движок с открытым исходным кодом: используйте его в своих продуктах! Можно объединить усилия для поддержки большего количества радиостанций и подкастов.

Мало кому нравится слушать рекламу на радио. Я запустил проект AdblockRadio.com, чтобы слушатели могли пропускать рекламу на своём любимом интернет-радио. Алгоритм опубликован с открытым исходным кодом, а в этой статье описывается, как он работает.

Adblock Radio уже протестировали на реальных данных более 60 радиостанций в семи странах. Он также совместим с подкастами и работает довольно хорошо!

По сравнению с предыдущими реализациями наш алгоритм предлагает универсальный подход, обрабатывая потоки из различных источников. Из предыдущих реализаций одна полагается на метаданные интернет-радио, но только небольшая часть радио совместима с этим методом. Другая реализация распознаёт известные джинглы, но во многих случаях начало и конец рекламных пауз не отмечены джинглом.

Помимо обнаружения рекламных роликов, предложенный алгоритм умеет отличать разговор от музыки. Поэтому он также позволяет избежать болтовни и слушать только музыку.

Это отчёт о моей личной работе почти за три года. Я запустил Adblock Radio в конце 2015 года, через несколько месяцев после окончания аспирантуры по физике термоядерной плазмы. Когда Adblock Radio приобрёл некоторую известность в 2016 году, я получил угрозы от юристов из французских радиостанций (подробнее ниже). Мне пришлось частично закрыть сайт, изменить архитектуру системы, лучше изучить правовые последствия и т. д. Сегодня я считаю, что AdBlock Radio будет гораздо лучше развиваться в парадигме открытых инноваций.

Эта статья состоит из трёх частей. Они предназначены для разных аудиторий. Можете прокрутить вниз или щёлкнуть по названию, чтобы сразу перейти к нужному разделу.

  • Обнаружение рекламы: опробованные стратегии. Для технически подкованных людей, учёных, специалистов по анализу данных… Здесь представлены разные технические способы, которые я опробовал для обнаружения рекламы, в том числе распознавание речи, звуковые отпечатки и машинное обучение. Мысли о вариантах дальнейшей работы.
  • Не рекомендуется запускать Adblock Radio в облаке. Для разработчиков программного обеспечения и людей, заинтересованных в авторском праве. Обсудим, как трудно найти удовлетворительный компромисс между техническими и юридическими ограничениями при запуске Adblock Radio в облачных сервисах. По этим причинам лучше запускать Adblock Radio только на устройствах конечных пользователей.
  • Можете интегрировать Adblock Radio в свой плеер. Для производителей, владельцев продуктов, UX-дизайнеров, технарей… Я рассматриваю идеи по интеграции алгоритма с открытым исходным кодом в конечные продукты, в том числе автомобильные плееры, и подчеркиваю необходимость получения обратной связи от пользователей о случаях неправильного срабатывания. Это необходимо для поддержания системы. Наконец, здесь подсказки, как создавать правильные пользовательские интерфейсы. Ожидаю много отзывов на эту тему.



Adblock Radio возвращает удовольствие от прослушивания радио

Обнаружение рекламы: опробованные стратегии


Чтобы заблокировать рекламу, сначала нужно её обнаружить. Цель состоит в том, чтобы обнаружить рекламу в аудиопотоке без какой-либо помощи радиостанции. Это непростая задача. Я опробовал несколько подходов, прежде чем получить хороший результат.

1. Простые способы (не работают)


Громкость


Первая идея в том, чтобы проверять громкость звука, потому что реклама такая громкая! Для рекламы часто используется акустическое сжатие. Это интересный критерий, но его недостаточно, чтобы отличить рекламу. Например, такая стратегия довольно хорошо работает для классических музыкальных станций, где реклама обычно громче музыки. Но поп-музыка такая же громкая, как реклама. Более того, какую-то рекламу нарочно могут сделать тихой, чтобы избежать обнаружения.

Блокировка по часам


Ещё одна идея заключается в том, что реклама транслируется по расписанию в конкретное время. В какой-то степени это верно, но здесь нет точности. Например, я наблюдал, как утреннее шоу на французской станции не начиналось точно в одно и то же время, с вариациями до двух минут. Радиостанции могут легко обойти такую блокировку, случайным образом сдвигая свои программы на несколько десятков секунд.

Метаданные


Очевидное решение — полагаться на метаданные ICY/Shoutcast, по которым плееры вроде VLC отображают информацию о потоке. К сожалению, эти данные в большинстве случаев сломаны. Можно было бы взять информацию из прямого эфира на веб-сайтах радиостанций (я разработал инструмент для этого), но чаще всего реклама не идентифицируется как есть. Обычно во время рекламы на сайте отображается название предыдущей песни или программы. Одним примечательным исключением является Jazz Radio, которое во время рекламы пишет “la musique revient vite...” (музыка скоро вернётся). В заключение следует отметить, что это ненадёжная стратегия, поскольку радиостанции могут очень легко изменить метаданные.

Маркировка вручную


В конце концов, обнаружение рекламы возможно вообще без какого-то алгоритма! Можно просто попросить некоторых слушателей нажать кнопку, когда начинается и заканчивается реклама. Другие слушатели выиграют от этого. Такова стратегия телеприставки TiVo Bolt. Она позволяет удалять рекламу на установленных каналах в установленное время. Это даёт прекрасные результаты, но не очень масштабируется на тысячи радиостанций.

Недостаток в том, что трудно запустить систему с нуля. На новой станции может не хватать аудитории для правильной работы. Первые слушатели расстроятся и уйдут, так что станция никогда и не соберёт достаточно большой аудитории.

Ещё одна трудность в том, что радиостанциям захочется отправлять поддельные сигналы, чтобы саботировать систему. Тут требуется механизм модерации, система консенсуса или порог голосования.

Краудсорсинг — хорошая идея. Думаю, что она выглядит ещё лучше, если алгоритм выполнит бóльшую часть работы, оставляя минимум для людей. Это то, что я сделал.

2. Распознавание речи и анализ лексического поля (неудача)


Реклама — это всегда одна и та же тематика и лексическое поле: покупка автомобиля, получение купонов супермаркета, подписка на страховку и т. д. Если распознать речь, то можно применить стандартные инструменты для борьбы со спамом. Это был мой первый путь исследования в конце 2015 года, но я не смог реализовать распознавание речи.

Будучи новичком в обработке речи, я начал с чтения «Обработки устной речи» Хуанга, отличной книги, хотя немного устаревшей. Я наложил свои грязные ручонки на CMU Sphinx, лучший на то время свободный движок для распознавания речи.

Первая попытка дала очень плохие результаты и требовала интенсивных вычислений на CPU. Я использовал параметры по умолчанию: стандартный французский словарь (список возможных слов и соответствующих фонем), языковая модель (вероятности последовательностей слов) и акустическая модель (связь фонем с формой звуковых волн).

Попытки улучшить систему оказались тщетными: распознавание всё равно работало плохо. Я настроил словарь и языковую модель на небольшом наборе данных, разделяя звук инструментом диаризации. Также адаптировал акустическую модель MLLR к радиостанции Europe 1 (French), на которой обучал систему.

В общем, от идеи распознавания речи пришлось отказаться. Наверное, это для экспертов. Впрочем, в будущем к ней можно вернуться. С 2015 года достигнут значительный прогресс в распознавании речи. Опубликованы новые инструменты с открытым исходным кодом, такие как Mozilla Deep Speech.

3. Краудсорсинг рекламной базы, обнаружение по звуковым отпечаткам (обнадёживающе)


Первая версия Adblock Radio в 2016 году работала с базой рекламных роликов. Система непрерывно прослушивала звуковой поток в поисках рекламы. Результаты были действительно многообещающими, но сложным оказалось поддержание такой базы в актуальном состоянии.

Техника поиска по звуковым отпечаткам похожа на то, что делает Shazam на своих серверах для распознавания песен. Такой тип алгоритмов широко известен как landmark. Я адаптировал его для работы на потоковом вещании и открыл исходный код.

Фингерпринтинг подходит для обнаружения рекламных роликв, потому что они многократно транслируются в одинаковом виде. По той же причине он распознаёт и музыку. Но эта техника не будет работать на речи, потому что люди никогда не произносят слова одинаково. Это возможно только при повторной трансляции передач ночью, что нас не интересует. Таким образом, в базу отпечатков нужно вносить и рекламу, и музыку (как «не реклама»), но обрабатывать речь бессмысленно.

По сути, звуковые отпечатки — это преобразование некоторых звуковых характеристик в ряд чисел, называемых отпечатком. Если в прямом эфире много отпечатков совпадают с базой, можно сделать вывод, что передаётся реклама. Для оптимального разрешения, временного и частотного диапазона нужна некоторая настройка. Различные образцы должны хорошо различаться. Однако система должна работать даже при незначительном изменении алгоритмов сжатия звука или если радиостанция изменила настройки эквалайзера. Наконец, следует ограничить количество отпечатков, чтобы не загружать вычислительные ресурсы.


Пример расчёта звуковых отпечатков. Красный фон — спектрограмма. Она отражает изменение интенсивности звука по частоте (низкие частоты внизу). На этой карте спектральные пики идентифицируются (синие точки) и соединяются (серые линии). Положение, длина и ориентация каждой серой линии преобразуется в уникальное число, отпечаток

Двоичная классификация выдаёт результат: является образец рекламой или нет. Если анализировать случаи ошибок, то система почти всегда выдавала ложноотрицательный результат, то есть пропускала рекламу, и очень редко отмечала хороший контент как рекламу. Пользователи могут сообщать о незамеченных объявлениях одним щелчком мыши, что обеспечивает отличный пользовательский интерфейс. Соответствующий звук автоматически добавляется в БД. Я модерировал эти действия апостериори.

Было трудно поддерживать базу в актуальном состоянии, поскольку рекламные ролики часто меняются, а объявления транслируются с небольшими вариациями. Они также часто обновляются, в некоторых случаях каждые несколько дней. Некоторые потоки с недостаточным количеством слушателей очень плохо распознавались.

Я исследовал интересные стратегии для частичной автоматизации работы слушателей. Объявления одинаково транслируются много раз каждый день. Это можно использовать для их идентификации. В записях осуществлялся поиск максимально повторяющихся последовательностей (MRS). Другой контент тоже повторяется, например, песни и джинглы (заставки). Я отсортировал все последовательности по длине и взял образцы с длиной около 30 секунд, типичной для рекламных роликов. Таким образом очень часто удавалось выловить рекламу. Но иногда попадались припевы песен или даже записанные прогнозы погоды.

Я нашёл способ отфильтровать большинство музыкальных повторов: проанализировал плейлисты станций, скачал песни и интегрировал их в базу с меткой «не реклама». Поэтому всё больше кандидатов в MRS оказывались реальными рекламными роликами. Но всё же не все, поэтому помощь пользователей оставалась необходимой.

Требовалось меньше ручной работы, но нагрузка на серверы уже стала проблемой. Оглядываясь назад, далеко не лучшим оказался выбор SQLite для этих ресурсоёмких, критичных по времени операций с БД.

К счастью, у алгоритма было несколько секунд, чтобы определить, является звук рекламой или нет. Это происходит потому, что интернет-радио используют аудиобуфер, обычно 4−30 секунд, который не сразу воспроизводится на устройстве конечного пользователя. Это помогает предотвратить обрывы трансляций в случае временной потери сети.

Я использовал эту задержку буфера для постпроцессинга, чтобы сделать прогнозы алгоритма более стабильными и контекстно-зависимыми. Непосредственно перед воспроизведением звука на устройстве конечного пользователя алгоритм просматривает результаты прогнозов, которые всё ещё находятся в буфере, а также более старые, которые уже воспроизведены. Он обрезает сомнительные точки данных с несколькими совпадениями отпечатков, демонстрируя гистерезис. Он также учитывает средневзвешенное время, чтобы сгладить возможные сбои.


Adblock Radio на определённом этапе в 2016 году. Подсвечивание красным радиостанций, где в данный момент звучит реклама, выглядело действительно здорово! Пользователи могли отмечать пропущенную рекламу синей кнопкой. Кнопка music-in-a-cloud в верхней части позволяет экспортировать пользовательский MP3-поток с удалённой из него рекламой и, если настроена такая функция, плавными переходами между радиостанциями. Ниже представлены дополнительные кнопки и функции

4. Классификация рекламы, разговоров и музыки на машинном обучении (почти готова!)


Следующая версия алгоритма анализирует акустику: от низких до высоких звуков и их изменение во времени. Новые неизвестные рекламные ролики детектируются почти так же хорошо, как и старые, на которых происходило обучение, только по признакам шумности и назойливости. Это более сложный метод анализа громкости звука (см. предыдущее обсуждение).

Для этого я использовал инструменты машинного обучения, а именно библиотеку Keras, подключенную к Tensorflow. Это дало очень хорошие результаты с малым использовании CPU. Эта версия работала в продакшне более года, с начала 2017 года до середины 2018 года. Теперь реально отличать разговоры и музыку, поэтому классификация стала более точной: вместо «реклама/не реклама» — «реклама/разговор/музыка».

Изучим детали. Звук преобразуется в 2D-карту, где интенсивность звука представлена как функция от частоты и времени (в масштабе около четырёх секунд). Эта карта концептуально похожа на красную карту в главе об отпечатках. Основное отличие в том, что вместо классического спектра Фурье я использовал Мел-кепстральные коэффициенты, актуальные в контексте распознавания речи.

Последовательные карты с разными метками времени затем анализировались как картинки в рекуррентной нейронной сети типа LSTM (long short-term memory). Каждая карта анализировалась независимо от другой (RNN без сохранения состояния), но карты перекрывали друг друга. Карты были длиной 4 секунды, и каждую секунду появлялась новая. Конечным результатом для каждой карты становился вектор softmax, например, ad: 72%, talk: 11%, music 17%. Эти прогнозы затем обрабатывались тем же методом, который описан в разделе об отпечатках.


Предварительный просмотр типичных результатов машинного обучения для двух радиостанций. Горизонтальная ось представляет около 17 минут времени. Зелёная линия перемещается между тремя позициями: реклама вверху, разговор посередине и музыка внизу (самая ближняя к однородному серому фону). Красные области — интервалы прослушивания звука пользователем. Если алгоритм даёт неверный прогноз, пользователь может его исправить

Изначально я обучал нейросеть на очень маленьком наборе данных. Я разработал UI (см. рисунок выше) для визуализации прогнозов и мог бы добавить больше данных для обучения моделей с лучшей производительностью. На момент написания этой статьи обучающий набор данных содержит около десяти дней аудио: 66 часов рекламы, 96 ч разговоров и 73 ч музыки.

Несмотря на хорошую работу, точность классификации всё-таки оказалась чуть ниже ожиданий пользователей (см. ниже раздел о будущих улучшениях). При обучении точность прогноза категории составила 95%, но оставшиеся неверные классификации оставляли пользователей недовольными.

Примечание для специалистов по обработке данных: принято приводить формальные результаты, разбивая набор данных на подмножества обучения и тестирования. Думаю, что здесь это не имеет смысла, потому что набор данных постепенно выстраивается на данных, где ошибались предыдущие модели. Это означает, что набор данных содержит больше патологий, чем средняя радиопередача, и точность будет недооценена. Потребуется отдельная работа по измерению реальных показателей. Оператор может помечать непрерывные сегменты обычных аудиозаписей как тестовые данные, затем вычислить на них точность и recall. Такая регулярная проверка позволит контролировать работоспособность фильтров.

Разделение по категориям реклама/разговоры/музыка добавила слушателям удобства. Однако такая классификация усложнила пользовательский интерфейс, а с пользовательскими отчётами стало сложнее работать. Если флаг указывает, что какой-то контент не является музыкой, это реклама или разговор? Тут нужна немедленная модерация, а не постфактум.

Чтобы ещё улучшить качество, я разработал последнюю версию Adblock Radio, которая немного улучшает данную стратегию.

5. Сочетание звуковой классификации и сопоставления отпечатков (успех!)


Мой самый лучший алгоритм опубликован на Github. Для повышения надёжности он сочетает концепции из двух предыдущих попыток: акустическая классификация и база отпечатков.

Правильно обученный предиктор машинного обучения обеспечивает корректную классификацию большинства исходных материалов, но в некоторых ситуациях не работает (см. ниже в разделе о будущих улучшениях). Роль модуля сопоставления отпечатков заключается в снижении ошибок модуля машинного обучения.

В базу отпечатков заносятся не все известные обучающие данные, а только небольшое подмножество, где машинное обучение демонстрирует ошибки. Я называю её «базой хотлиста» (hotlist database). Небольшой размер помогает уменьшить общую частоту повторения ошибок, сохраняя низкой нагрузку на CPU.

На обычном ноутбуке алгоритм потребляет всего 5-10% CPU на файлах и 10-20% на прямом эфире.

Будущие улучшения


Некоторые виды контента по-прежнему проблематичны


Детектор неидеально работает на некоторых конкретных видах аудиоконтента:

  • хип-хоп музыка часто распознаётся как реклама. Обойти проблему можно путём добавления треков в хотлист, но это слишком много музыки. Можно разработать более общую нейросеть, возможно, в ущерб производительности.
  • реклама музыкальных альбомов часто распознаётся как музыка. Но блокировка через отпечатки приведёт к ложноположительным срабатываниям, когда будет транслироваться настоящая песня. Проблему можно решить путём более глубокого анализа контекста, но это трудно в прямом эфире, где контекст известен только на несколько секунд вперёд.
  • реклама ток-шоу часто распознаётся как разговор. Здесь размытые границы, потому что это одновременно и разговор, и реклама. Мы видим предел возможностей классификатора реклама/разговор/музыка. Для классификации по отпечаткам я некоторое время использовал класс ad_self, содержащий рекламу ток-шоу на конкретных станциях, но с внедрением алгоритма машинного обучения перестал это делать. Возможно, разумно воссоздать этот класс. Другой вариант — более качественный анализ контекста.
  • нативная реклама, где ведущий зачитывает спонсорский текст. На радио такое встречается редко, а чаще в подкастах. Логичный следующий шаг для блокировки такой рекламы — внедрение ПО для распознавания речи.

Марковские цепи для более стабильной постобработки


Стабильность постобработки можно улучшить. В настоящее время используются только доверительные пороги. При достижении порогового значения берётся последний уверенный прогноз. Таким образом, система иногда сохраняет ошибку.

Циклы рекламы, разговоров и музыки довольно цикличны в каждом эфире. Например, реклама обычно длится несколько минут. Для каждого периода времени в рекламной паузе можно рассчитать вероятность перехода в другое состояние (разговор или музыка). Эта вероятность поможет лучше интерпретировать шумные предсказания алгоритма: это просто короткий сегмент музыки в объявлении или рекламный перерыв завершён? Здесь хорошим направлением исследований будут скрытые марковские модели.

Аналоговое радио пока не поддерживается


Аналоговые сигналы (FM) не тестировались и в настоящее время не поддерживаются. Аналоговый шум аннулирует используемые здесь методы. Могут потребоваться фильтры и/или шумоустойчивые алгоритмы распознавания отпечатков. Если такое произойдёт, то программа способна найти более широкое применение у пользователей. Однако радио всё больше переходит на цифровые технологии без шума, такие как DAB и интернет-радио.

Не рекомендуется запускать Adblock Radio в облаке


В идеале Adblock Radio следует запускать только на оконечных устройствах. Но сейчас в моде облачные сервисы. Более того, это отличная бизнес-идея! Adblock Radio тестировал два варианта архитектуры с такой парадигмой. Однако опыт показывает, что это не лучший вариант по техническим и юридическим причинам.

Вариант 1. Ретрансляция с сервера


Сервер может ретранслировать слушателям аудиоконтент с тегами ad/talk/music. Мы это тестировали в 2016 году. Тут возникают юридические проблемы, поскольку ретрансляция потока может рассматриваться как подделка и/или нарушение копирайта (хотя я не юрист). Также это плохо масштабируется, потому что теперь вы CDN и должны нести расходы.

Ради анекдота, в воскресенье, когда я отсутствовал по семейным обстоятельствам, Adblock Radio получил бешеную популярность, от которой и упал. Забавный факт: через несколько дней France Inter, крупная французская общественная радиостанция, прорекламировала Adblock Radio в прайм-тайм (впрочем, не называя его). Это неожиданное решение редакции в контексте того факта, что регуляторы решили в 2016 году ослабить ограничения на рекламу на государственных радиостанциях, что усугубило раздор между сотрудниками Radio France и руководством.

Спустя несколько недель я получил угрозы от адвоката французской частной радиосети Les Indés Radio, якобы на основании нарушения авторских прав и товарных знаков. Не имея финансовых ресурсов для серьёзной защиты, мне пришлось удалить с сайта некоторые потоки, частично закрыть сайт и изменить архитектуру системы. В то же время эта радиосеть отказалась сотрудничать в поисках компромисса. С тех я вижу в логах, что они продолжали следить за моим сайтом (иногда с псевдонимными учётными записями), ещё они консультировались со своими адвокатами. Какая честь для меня! Оглядываясь назад, они успешно выиграли время, но не более того. Привет, ребята из Indés! Надеюсь, вам понравится читать это! xoxoxo.


Признание в любви от Les Indés, сети из 131 французской радиостанции

Вариант 2. Сервер ретранслирует звук, но приватно


Здесь предполагается анализ на сервере и ретрансляция очищенного звука для конкретного пользователя. Такая система может подпадать под исключение из закона о копирайте как собственная частная копия средств массовой информации. Если сервер управляется конечным пользователем, а исходный источник легален и официально доступен в вашем регионе, вероятно, всё юридически чисто. Для дополнительной информации см. обсуждения Station Ripper [FR] и VCast [FR]. Но пользователи редко настолько технически подкованы, чтобы самостоятельно арендовать и установить сервер.

Очень заманчиво поставить сервер под управлением третьей стороны, но это приводит к юридическим проблемам, поскольку тогда оператор, делающий копию, и конечный пользователь не являются одним и тем же лицом. В этом случае накладываются юридические ограничения, по крайней мере, во Франции. Французский интернет-сервис Wizzgo [FR] столкнулся с этим правилом в 2008 году. Совсем недавно в США телевизионный сервис Aereo был закрыт, хотя принял меры предосторожности, раздав каждому клиенту отдельный тюнер (!).

В данный момент сервис Molotov.TV [FR] сражается с правообладателями, которые хотят ограничить его функции [FR], несмотря на значительное влияние его соучредителей. Необходимо оплатить в официальную организацию налог на частную копию [FR]. Сумма определяется довольно непрозрачными расчётами [FR] и увеличивается [FR] с каждым годом, достигая нескольких десятков евроцентов на пользователя в месяц. Эта плата стала настолько высокой, что Molotov.TV недавно удалил функции своего сервиса для бесплатных пользователей [FR]. (Примечание: сердечно благодарю журналистов французского сайта NextINpact за очень хорошее освещение этой темы).

Платить недостаточно: закон требует от субъектов вроде Molotov.TV подписать соглашения [FR] с компаниями, обладающими авторскими правами, о функциональности своего сервиса. Попробуйте достичь соглашения с радиокомпаниями, если вы начнёте резать их рекламу.

Вариант 3. Сервер отправляет только метаданные


Ещё один вариант состоит в том, чтобы и пользователь, и сервер одновременно прослушивали одно и то же интернет-радио. При этом сервер анализирует звук и отправляет пользователю классификационные метаданные (ad/talk/music), но не аудиоконтент. На такой архитектуре с 2017 года работает adblockradio.com. Она опирается на CDN, так что не несёт никаких затрат в отношении трансляции аудио.

Эта архитектура снимает проблему с нарушением копирайта (дисклеймер: я не юрист). Тем не менее, всё ещё может существовать некоторая неопределённость в отношении законов о товарных знаках. Недавно (октябрь 2018 года) владельцы радио Skyrock потребовали удалить контента на таком основании.


Романтическое послание от юридического отдела Skyrock

Помимо юридических соображений, есть техническая проблема правильной синхронизации между звуком и метаданными. В большинстве случаев всё работает нормально с интервалом синхронизации менее двух секунд. Но у некоторых радиостанций странные/вредоносные CDN или они динамически вводят рекламу в поток. Это означает, что потоки между сервером и разными клиентами могут значительно отличаться. Например, на Radio FG наблюдались лаги до 20 секунд, а на Jazz Radio — до 45 секунд. Это разочаровывает слушателей.

Синхронизацию можно жёстко внедрить сравнением блоков данных между сервером и пользователем. К сожалению, это не работает в веб-браузерах, потому что большинство CDN у интернет-радиостанций не используют заголовки CORS. Поэтому JavaScript в браузере не сможет прочитать аудиоконтент для сравнения. Для работы понадобятся отдельные автономные модули (например, Electron), модули Flash (ага) или веб-расширения, что кажется немного излишним.

Можете интегрировать Adblock Radio в свой плеер


Это проект не для конечных пользователей, а для компаний, которые выпускают массовый продукт. Вы можете сделать такой!

У разработчиков есть два варианта интеграции Adblock Radio. Во-первых, SDK просто берёт метаданные с сервера adblockradio.com. Это не идеальное решение по причинам, описанным выше (юридические и проблемы синхронизации). Лучше запустить у себя полный алгоритм анализа.

Программное обеспечение


  • мобильные приложения для интернет-радио и подкастов. Модели Keras нужно конвертировать в нативные Tensorflow, а библиотеку Keras + Tensorflow можно заменить на Tensorflow Lite для Android и iOS. Рутины Node.JS внедряются с помощью плагина React Native или на крайний случай с Termux.
  • расширения браузера работают с Tensorflow JS и SQL.js. Расширение может управлять ползунком громкости в популярных каталогах интернет-радио, таких как TuneIn или Radio.de. Я уже работал над таким расширением. Было забавно ковыряться в JavaScript-плеерах, чтобы получить этот контроль. В зависимости от реализации помните о проблемах синхронизации, которые мы обсуждали выше.

Аппаратное обеспечение


  • цифровые будильники и любительские проекты, при условии наличия достаточной вычислительной мощности и доступа в Сеть. Платформы вроде Raspberry Pi Zero/A/B должно быть достаточно для анализа одного потока, хотя для параллельного управления несколькими потоками рекомендуется RPi 3B/3B+. Tensorflow есть на Raspbian.
  • подключённые динамики, такие как Sonos. Сам алгоритм не будет работать на таком оборудовании, поэтому нужно обрабатывать данные или в облаке, или на отдельном устройстве в той же локальной сети (например, на Raspberry). Отличная идея для краудфандинговой кампании.

Adblock Radio в автомобиле


Автомобиль — одно из самых популярных мест для прослушивания радио. Там людям реально нужен блокировщик рекламы. Но это и контекст, где реализовать Adblock Radio непросто. Ведь система должна получать обратную связь, чтобы эффективно фильтровать новую рекламу, поэтому программа нуждается в сетевом подключении. Я вижу три возможных концепции автомобильных продуктов с Adblock Radio.

  • Приложение, совместимое с информационно-развлекательными системами современных автомобилей. Вероятно, данные проще всего передавать через смартфон пользователя. Смартфон можно использовать и отдельно — с мобильным приложением, потоковыми интернет-радио, через аудиовыход, подключение к AUX или Bluetooth автомобиля. Его также можно интегрировать с информационно-развлекательной системой автомобиля, в духе Apple Car Play, Android Auto и MirrorLink. Было бы фантастикой слушать наземное радио (FM, DAB). Но необходима работа, чтобы определить, в каких именно конфигурациях Adblock Radio может получить доступ к аудиовыходу радиотюнера и, в то же время, управлять им (громкость, канал).
  • Универсальный аппаратный адаптер, выделенный пользовательский интерфейс. Также возможна разработка нестандартного оборудования, аналогичного существующим DAB-адаптерам для автомобилей. Эти устройства настраиваются на радиостанции и передают звуковые данные в автомобильную систему через разъём AUX или через неиспользуемый FM-канал, как старые адаптеры iPod FM. Доступ к сети может идти через смартфон по Bluetooth-соединению. Можно было бы рассмотреть альтернативные решения, такие как Sigfox и LoRa, если подходят битрейт и цена. Следует разработать специальный пользовательский интерфейс, отдельно от основного автомобильного устройства. В итоге это может оказаться слишком дорогим решением.
  • Минималистичное устройство, которое взламывает FM-приёмник. Такое небольшое устройство может при необходимости управлять тюнером. Нужен стандартный, но легко подключаемый интерфейс. Хороший кандидат — переключатели на рулевом колесе, но конечные пользователи не смогут легко их модифицировать для этой цели. Так что нужно взломать систему.

    У этого headless-устройства будет FM-тюнер и микрофон для анализа, какую станцию слушает пользователь (перекрёстная корреляция). Когда обнаружена реклама, устройство излучает поддельные данные RDS (например, дорожные объявления), чтобы обмануть тюнер автомобиля и изменить станцию на время рекламы. Он также может транслировать тишину на текущей FM-частоте.

    Интерфейс такого устройства очень прост, всего с несколькими кнопками. Так дешевле, чем полнофункциональный автомобильный адаптер. Однако неясно, будет ли это надёжно работать, поскольку без лицензии использование радиопередатчиков строго ограничено законом. Наконец, неизвестно, можно ли адаптировать такую стратегию для работы с цифровыми потоками DAB.

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

Проекту нужны сигналы о некорректных срабатываниях и помощь в их обработке


При интеграции Adblock Radio в продукт, пожалуйста, оставьте возможность для фидбека. О неправильных срабатываниях следует незамедлительно сообщать мне, чтобы я мог обновлять модели машинного обучения и базу хотлиста.

Отчёты просматриваются вручную: достаточно указать название радиостанции (радиостанций) и время, когда возникла проблема. В библиотеку заложен механизм отправки отчётов.

Обработка отчётов отнимает время. Кроме расходов на сервер, это ещё одна причина, почему я не добавил больше радиостанций на adblockradio.com. Нужна помощь, чтобы прослушивать аудиодорожки и классифицировать контент в админском веб-интерфейсе. Благодаря этому мы сможем увеличить количество радиостанций и обеспечить поддержку подкастов. Если вы готовы помочь, пожалуйста, зарегистрируйтесь здесь и следите за репозиторием, где будет проходить обсуждение поддерживаемых потоков.

Чем заменить рекламу: вопрос UX


Пропуск рекламы в подкасте тривиален: с точки зрения слушателя это как пропуск части песни. К сожалению, для радио так не работает. В прямом эфире мы не можем сделать перемотку вперёд!

Сейчас adblockradio.com предлагает три варианта фильтрации:

  • уменьшение громкости
  • переключение на другую станцию и возврат назад по окончании рекламы. Это актуально, если пользователь слушает разговорную передачу. Во время рекламы он временно переключается на музыкальную станцию.
  • постоянное переключение на другую станцию. Полезно при прослушивании музыкальных станций.

Я изо всех старался сделать максимально удобно, но система по-прежнему сложная. Не такая простая, как обычное радио или блокировщик рекламы на компьютере, который можно установить и забыть. Очень рассчитываю на помощь коллективного разума.


Текущий веб-интерфейс Adblock Radio


Прежний прототип, который так и не вышел. Здесь у пользователя абсолютно полная свобода настроек. Только разговорные передачи с одной станции, только музыка с другой и т. д. Но тестеры так запутались! Оглядываясь назад, даже мне этот интерфейс с трудом понятен

Мне кажется интересным ещё один способ прослушивания контента. Я не мог реализовать его на adblockradio.com по юридическим причинам, указанным выше. Вместо этого я сделал автономный десктопный плеер (также доступный на Github), в духе цифровых видеомагнитофонов. Пользователи начинают слушать с сдвигом во времени около 10 минут (то есть, к примеру, в 7.30 утра начинают слушать аудиотрансляцию от 7.20). На каждой рекламной паузе происходит быстрая перемотка вперёд — и можно наслаждаться своей программой без перерывов. При типичном количестве рекламы десятиминутный сдвиг позволяет слушать радио без перерыва в течение часа или двух. В случае мобильного приложения этого бы хватило, чтобы доехать на работу.

Когда пользователь включает устройство, ему нужно доставить трансляцию десятиминутной давности. Как это сделать в контексте мобильности, с ограничениями по объёму энергии и данных? Обратите внимание, что закон запрещает нелицензированным третьим лицам (в облаке) транслировать радиозаписи.


Рабочий прототип радиоплеера со сдвигом во времени. Аудиоблоки классифицируются по сегментам. Музыка синего цвета, разговоры зелёного, а реклама — красного. Когда розовый курсор достигает красной зоны (ads), то пропускает её

В долгосрочной перспективе система может принимать в себя широковещательный контент со всех станций — и полностью настраивать его в соответствии со вкусами каждого слушателя. Транслировать любимые передачи, музыку по вкусу пользователя, вставлять подкасты и т. д. По-моему, для такой «спотификации» оптимально подходит контент в прямом эфире, который трудно отложить и загрузить позднее: спортивные события, новости, прогноз погоды, живая музыка и т. д. Возможно, это станет альтернативной бизнес-моделью для радио.

Заключение


Техническое решение для блокировки рекламы на радио и в подкастах оказалось более сложным, чем хотелось бы. Модели необходимо периодически обновлять с учётом новых роликов. Это значит, что система должна использоваться в устройствах, подключённых к интернету, таких как смартфоны и WiFi-радио. Сервис пока не подходит для обычных автономных радиоприёмников (FM, DAB+). К счастью, с повсеместным распространением мобильной связи люди меняют свои привычки, так что в будущем блокировка рекламы должна стать проще.

Вы можете помочь развитию Adblock Radio.

  • Как радиослушатель: включите плеер, послушайте радио и отметьте ошибки распознавания, чтобы алгоритм мог обучаться. Нет ваших любимых станций? Не проблема, зайдите сюда и оставьте запрос.
  • Как разработчик: зайдите в репозиторий, запустите демо, можете присоединиться к обсуждению. Посмотрите ещё демо десктопного плеера на Electron.
  • Как менеджер продукта: свяжитесь с нами, если хотите интегрировать Adblock Radio в свой продукт. Буду рад помочь.

В будущем аудиореклама останется лишь в далёких воспоминаниях! Спасибо, что прочитали.
Поделиться публикацией

Комментарии 54

    0
    Для тех кто подумал про вырезание рекламы из телеканалов — старенький плагин BPP_LogoDetector к плееру BeholderTV, позволяющий приостанавливать запись или приглушать звук просмотра, если будет обнаружено исчезновение логотипа канала (по шаблонам).

    Какой дивный мир нас ждет, когда рекламодатели начнут бороться против интеллектуальных блокировщиков, модифицируя или генерируя уникальную рекламу, под контекст.
      +2
      Все бы хорошо, но вот телеканал ТНТ начал встраивать достаточно назойливую рекламу внутрь своих сериалов — актеры начинают вещать рекламную речь прямо в фильме, якобы это сцена такая. Вот с этим вряд ли поборешься.

      ЗЫ. Про «ТНТ — ненужно» я знаю.
        +3

        Средство от рекламы придумали давно — платный контент. Netflix/Napster/Audible и куча их аналогов давно и успешно работают. Осталось сделать платное радио.

          +1
          Если только для прослушивания музыки, то внезапно хорошо работает Яндекс.Радио. Запустил на телефоне, по BT подключился к машине, воспроизводит через штатную систему, пропуск треков с кнопки на руле работает.

          Единственный момент, который напрягает — не нашёл как управлять станцией «На вашей волне», а именно исключить из неё треки со станции «классическая музыка». У меня настроение бывает либо под классику (отдельная станция, всё ОК), либо под всё остальное от электронщины до металла (то есть станция «на вашей волне», в которую подмешиваются классические треки).
            0
            Если нет давления конкурентов или регулятора, то крупный транслятор платного контента может запросто добавлять рекламу или гэмблинговые способы монетизации. Примеры — российские платные телеканалы или ААА-игры с ценником выше среднего и микротранзакциями.

            При этом бойкот против такого поведения не всегда эффективен, потому что потери из-за отвала части подписчиков могут быть меньше, чем затраты на привлечение более неприхотливой аудитории и дополнительная прибыль от дополнительных методов.
              0
              Дык уже сделано. Называется Яндекс.Музыка и Google Play Music.
                0

                Где там радио-то?
                Вы же не называете этим словом (пвтоматически генерируемые) подборки музыки?
                Одна радиостанция была у Apple Music, но не знаю, работает ли она до сих пор, да и хотелось бы локальное радио.

                  0
                  Я лично в авто и в телефоне использую именно яндекс музыку в качестве радио. И на мой вкус подборки там получаются весьма качественные (хотя и не всегда разнообразные). Очень много исполнителей, похожих на тех кто мне нравится, для себя открыл благодаря им.
                    +1

                    Как раз именно в автомобиле я предпочитаю слушать обычное местное радио, потому что там локальные новости, погода, пробки, полицейские засады и т.п.
                    У Яндекс/Гугл/Напстер/Спотифай и т.п. этого нет.

                      0
                      На мой вкус отсутствие вот этого всего не минус, а наоборот плюс в пользу подобных сервисов.
                        0

                        Вот видите, как хорошо, что у вас есть выбор. У меня его пока нет — приходится слушать рекламу супермаркетов, если я хочу слушать радио.

            0

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

            0
            для начала все радиостанции начнут менять формат вещания который нельзя будет встраивать в сторонние плееры и перехватчики… забыли уже все realplayer… уже сейчас у некоторых радиостанций упаришся выколупывать ссылку для винампа, вокруг браузерные плееры
              0
              Хорошо, что я слушаю только одну интернет радиостанцию (Радиоультра) и там рекламы кот наплакал. Раз в день рекламируют свой же завод по производству виниловых пластинок. Грех такое выпиливать :)
                0
                интернет радиостанцию (Радиоультра)


                Во, кажется мне тоже зайдёт она. По дороге домой оценю.
                Спасибо.
                  0

                  вы его через браузер слушаете или можно через плеер?

                    0

                    Можно через браузер, можно через приложение в аппсторе, можно через встроенный в av-ресивер или автомагнитолу tunein.

                      0
                      tunein


                      Не нашёл его в нём.
                        0
                          0
                          И действительно, где были мои глаза, болгар с точно таким же названием увидел, а искомое нет.
                          Спасибо!
                      +1
                      У меня есть файл.m3u, но сейчас не нашел где его распространяют.
                      yadi.sk/d/4KOfTsUkTcH2KA
                        0

                        Спасибо. Те ссылки, что находил, были нерабочими

                      0
                      Несколько лет слушаю радио, на котором есть множество каналов без рекламы (только редкие перебивки со ссылками на сайт — хромарэдиодотком) — греческое Chroma Radio — рекомендую. Также порипал плейлисты любимых каналов для оффлайна.
                      0
                      Может быть наоборот лучше было сделать? распознавать музыку, а остальное пропускать. для распознавания музыки есть шазам.
                        0
                        хм, думаю это будет работать только с форматом вещания ретро-фм (то есть новинки эстрады в пролете, ибо их надо как-то еще заносить в базу достаточно оперативно), плюс всякие плюшки от радиоведущих выпадают из трансляции.
                        Короче все банально сводится к «белый список vs черный список».
                          0

                          А смысл? Можно слушать любой стриминговый сервис типа Napster/Tidal и т.п. — там везде есть каналы, подборки и персональное радио. Или закинуть много музыки на телефон и слушать в случайнлм порядке.

                            0
                            На радио бывает не только музыка и реклама.
                            0
                            Из-за подобных поделок с каждым годом кодированных спутниковых каналов всё больше. Текстовый контент уже убили, очередь за мультимедийным?
                              –2
                              Будущее за свободным контентом, как ни крути. А это лишь попытки продать шлак за деньги, которые в долгосрочной перспективе приведут к банкротству компании.
                              0
                              Раз уж речь зашла про интернет радио, может кто подскажет бюджетный интернет радиоприёмник?
                              Спойлер
                              Хотелось бы ценой до 1000р, портативных колонок за такую цену куча, но более-менее полноценные приёмники начинаются с 3000.
                              Мне нужен только радиоплеер который будет подключаться к инету (WiFi/Ethernet не важно), принимать радио и выводить его на 3,5 Jack, аудиосистему я бы свою подключил к нему, встроенные динамики, приём обычного радио и т.д. не нужны, ещё важно что бы он начинал играть сразу после включения в сеть ту станцию на которой остановился в прошлый раз.

                              Знаю про модуль wolna, но он стоит две тысячи и его сейчас вообще нет в наличии.
                              Ещё можно взять как мне кажется какой то Orange Pi, но я с ними особо не сталкивался и не уверен что всё получится как надо, и опять же надо самому делать кнопки и корпус.
                              Неужели нет готовых решений?
                              P.S. с предложениями юзать ноут/андроид сразу мимо.
                              Надоело ждать пока ноут загрузится, да потом ещё по блютуз сопрягать и радио включать.
                              А смартфон вообще мимо, я им на постоянной основе не пользуюсь, так что проблемы те же что и с ноутом.
                                0
                                Искал довольно давно и безуспешно, пробовал китайца HFI220 с старым вайфайным модулем который не ко всем сетям мог цепляться (не мог брать интернет с телефона, только с роутера в режиме bg), неудобным интерфейсом и посредственным звуком.
                                Кроме этого он зависал раз в пару дней.
                                  0

                                  Orange Pi самый дешманский и kodi плеер с плагином интернет радио

                                    0
                                    А разве любой медиа-плеер не умеет играть инет-радио?
                                    DEXP от 1500, Rombica от 4000
                                    Для Ромбики точно есть apk (TuneIn_Radio_13.6.1_3321.apk)
                                      0
                                      ну так можно и смартфон использовать, тут т.з. какое, что бы тыкнул в розетку — играет, вытянул — не играет, без лишних телодвижений.
                                      0
                                      У меня в качестве источника стоит старенький планшет без аккума на 4м андроиде, через 3,5 подключен «взрослый» усилитель с акустикой. Крутится XiiAlive Pro. Включается одним нажатием, когда прихожу, вечером таймер засыпания с фейдером, утром нежно будит)))
                                      +1
                                      Вот я наверное полный выживальщик. Но у меня рядом стоит дешевый в меру всеволновой приёмник. И мне легко и свободно
                                        0
                                        Тоже тут задумался о «дешевом в меру всеволновом приёмнике». Но что-то беглый взгляд дешёвых приёмников не выявил.
                                        Если не секрет, что у вас за модель? И дёшево – это сколько?
                                        0
                                        В техническом плане очень круто, что вы это реализовали.

                                        Что касается анализа данных: у музыки есть, кмк, очень удобный маркер – ритм (в той или иной форме, простейший пример – ударные). Не очень понял из статьи, при машинном обучении этот параметр имел некоторый значительный вес? Или, может, отдельно детектится где-то?
                                          –1

                                          Реализация крутая, но сама идея резать рекламу на радио довольно глупая. Бесплатной музыки полно же на торрентах, почему бы не играть её прям оттуда, мимикрируя под формат "любимой радиостанции"?

                                            0
                                            Диджеи радиостанции подумали за пользователя — какую музыку ставить. Ну и хочется же развиваться — т.е. слушать что-то новое, но такое чтоб нравилось.
                                            — — —
                                            Что касается меня — у меня есть шесть кнопок на магнитоле — слышу рекламу — одно нажатие и все… Правда был момент когда существовало Радио Классик — и его разливали из той же бочки, что и Радио Джаз — и реклама там была в одно и то же время, а я слушал в основном именно эти два.
                                              0

                                              Очевидно что полноценно заткнуть чем-то дыры от рекламы не удастся никогда, переключать на другую станцию — слушать по полтрека то здесь то там это на любителя. Кэширование заранее и перемотка — надо ждать пока закешируется. Как ни крути одни нагромождения костылей.

                                                0
                                                Думается кэширование все же могло бы спасти. Утро зимой — пока авто прогревается, раскапывается, и т.п… в поездке — во время телефонных звонков. Дома уже хуже. Хотя если шум снаружи превышает какой-то уровень (кофеварка работает например или ТВ включили) — можно отключать воспроизведение и быстренько кэшировать. Ну или вообще — начинать за два часа до утреннего подъема. ) Впрочем так недалеко и до оффлайновой музыки просто (оглядел коллекцию компактов).
                                            0

                                            Поддались на уловки мошенников и слизней в костюмах, ну и позорище.

                                              0
                                              Карл Саган, «Контакт», 1994
                                              Несколько лет назад Хадден изобрел электронный модуль, автоматически отключавший звук при включении телерекламы. Поначалу в нем не было какого-либо распознающего текст устройства. Модуль просто анализировал амплитуду несущей волны. Телереклама обычно была громче и сопровождалась меньшими шумами, чем передача, которую она прерывала. О модуле Хаддена заговорили. Люди испытывали чувство облегчения, даже блаженства, освободившись от груза обязательной рекламы, отравлявшей им 6-8-часовое пребывание перед телевизором, на которое обречен средний американец. И прежде чем индустрия телевизионной рекламы сумела отреагировать, «Рекламникс» приобрел огромную популярность. Владельцам каналов и рекламистам пришлось менять частоты, но всякий раз Хадден новой выдумкой парировал их меры. Иногда он даже изобретал системы, противодействующие таким сложным мерам, до которых, кроме него, никто еще не додумался. Тогда он принимался уверять рекламные агентства, что облегчает им жизнь, удерживая от работ в этих направлениях, и экономит деньги пайщиков, удерживая компании от ненужных и бесперспективных расходов. Количество раскупавшихся блоков все возрастало, но Хадден поддерживал низкие цены. Шла электронная война. И он побеждал.

                                              На него подали в суд, обвинив в подрыве торговли. Обвинители имели достаточное политическое влияние, и ему не удалось добиться закрытия дела, но, чтобы выиграть, им все-таки не хватило политической мускулатуры: его противники оказались довольно слабыми. Процесс заставил Хаддена проштудировать весь свод законов. Вскоре после этого Хадден заказал телерекламу собственного товара через некое агентство на Мэдисон-авеню, основным пайщиком которого негласно являлся он сам. После нескольких недель пререканий, ему отказали. Тогда он подал в суд на все три телекомпании и тут уже сумел доказать преднамеренное противодействие торговле. Сумма выплаченной ему компенсации оказалась рекордной для дел подобного рода и в какой-то мере способствовала кончине пострадавших компаний.

                                                0
                                                Несколько лет назад на одном известном форуме программистов такое обсуждалось, в первую очередь для ТВ. Но я хоть и загорелся сначала этой идеей, но все-же в конце концов отказался от реализации. Ведь вырезать надо не только рекламу, но и религиозную чушь, и политическую пропаганду. И всякую мистическую ахинею про экстрасенсов и тому подобное.
                                                Оказалось, что проще вообще отказаться от ТВ навсегда.
                                                И радио туда же.
                                                Про фантастический роман не знал, забавно, мысли сходятся, и… расходятся в разные стороны.
                                                Два варианта решения одной проблемы:
                                                или реализация блокировщика суды, борьба,
                                                или молчаливый уход в свой мир, в свою персональную копию вселенной.
                                                  0
                                                  > и религиозную чушь, и политическую пропаганду

                                                  тссс… а то кто-то может додуматься до того, что вырезать можно не только это…
                                                0
                                                Я давно подумываю о том, чтоб резать таким образом всякие 1Xbet
                                                  0
                                                  главная проблема рекламы не в том что ее не хотят слушать или смотреть, ее не хотят слушать и смотреть по сотне раз! если решить эту проблему то к рекламе будут относиться более лояльно. хорошая реклама хороша к месту, это не должно быть вдалбливание
                                                    0
                                                    Может поможет, сам собирал kaRadio и arduino.ru/forum/proekty/wi-fi-internet-radio
                                                      0
                                                      С точки зрения обычного юзверя, не интересующегося радио подкастами, я был бы рад софтине, вырезающей рекламу из видео-массива с внешнего накопителя. Речь идет о записях стримов/фильмам с торрентов, например.
                                                        0
                                                        это наверно настолько легко что даже браться никто не хочет. либо великие умы настолько правильные, что не смотрят пиратские фильмы с рекламой лохотронов-казино… даже я понимаю, что нет ничего сложного в этом т.к. новую рекламу лохотронов никто не создает, крутят одно и тоже…
                                                        0

                                                        Вот бы для ютуба такая штука, вырезать встроенное в видео рекламу.

                                                          0
                                                          Пользователи начинают слушать с сдвигом во времени около 10 минут. На каждой рекламной паузе происходит быстрая перемотка вперёд — и можно наслаждаться своей программой без перерывов. При типичном количестве рекламы десятиминутный сдвиг позволяет слушать радио без перерыва в течение часа или двух.

                                                          То есть у них 5-10 минут рекламы в час? Круто, если так. У нас, вроде, только разрешенной 12 минут в час, а еще реклама пихаемая под видом спонсоров и т.п.
                                                            0
                                                            Была когда-то «бизнес»-идея, еще до эпохи ИИ. Наивная, конечно. Если простыми словами: нанять специального man-in-the middle, который бы сидел и слушал (смотрел) канал. И, задетектив искомое, включал бы релакс-вставку. По окончании искомого — вновь бы включал канал. Его почасовая ставка бы делилась на всех, согласных доверять этому триггеру. При определенном количестве таких согласных имелся бы экономический смысл в этой затее. Необязательно в режиме 24/7, хотя бы, для начала, в некоторые пилотные часы.

                                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                            Самое читаемое