«Мы продолжаем наш репортаж!»
Николай Николаевич Озеров
Легендарный телекомментатор Николай Озеров, которому в этом году исполнилось бы 92 года, превратил спортивные трансляции в шоу, привлекающие к экранам телевизоров миллионы любителей спорта. Технологии с тех пор ушли достаточно далеко, но суть остается прежней – не имея возможности в силу различных обстоятельств лично присутствовать на интересном спортивном событии, можно следить за оными посредством телекоммуникационных технологий.
Сегодня компания «МегаФон» пошла навстречу любителям спорта и заядлым болельщикам, выпустив специальное телекоммуникационное приложение «СМОТРИ+».
Хабрахабр уже публиковал несколько статей, посвященных этому приложению:
1. Интервью-рассказ о приложении руководителя проекта Андрея Кушнарева.
2. Красочный репортаж об открытии Олимпиады в Сочи и стресс-тесте всей сети.
3. В мае МегаЛабс провел работу над ошибками и рассказал об этом всем хабра-жителям.
Но время не стоит на месте – приложение развивается и завоевывает своих пользователей. Число загрузок уже превысило
![](https://habrastorage.org/files/78e/33b/b96/78e33bb968524fe798e808bb95648b58.png)
Сегодня мы расскажем, что произошло нового за прошедшие полгода и раскроем некоторые секреты, которые скрываются внутри, по другую сторону коммуникационного канала. Но прежде всего, хотелось бы раскрыть «тайну» словосочетания «телекоммуникационное приложение».
Дело в том, что для коммерческой эксплуатации подобного сервиса решительно недостаточно просто накодить приложение – это достаточно сложная инфокоммуникационная система. Она начинается на стадионе (хоккейной арене), производит несколько этапов обработки видеосигнала: сигнал насыщается дополнительной информацией, готовый видеопоток распределяется по огромной российской территории, и только потом пользователь сможет увлеченно следить за игрой любимой команды на своем гаджете.
При этом команда разработки и поддержки, за срок чуть более одного года напряженной работы над сервисом, смогла сформулировать, какие именно преимущества приложение «СМОТРИ+» имеет перед «обычным» телевизионным вещанием:
Во-первых, спортивные мероприятия наиболее интересны в режиме реал-тайм «здесь и сейчас» без возможностей спойлеров и раскрытия интриги игры. Телевидение, справедливости ради, тоже так умеет, но в линейном ТВ имеется жестко заданная сетка вещания в рамках канала, а интересные события могут проходить одновременно и не всегда удобно зрителю.
Во-вторых, в отличие от ТВ-сериалов, спортивному болельщику требуется большее количество информации – расписание матчей, статистика команд и игроков, комментарии и новости. «Обычному ТВ» такая информационная обвязка технологически недоступна.
В-третьих, многое зависит от качества картинки – гораздо приятнее наблюдать событие ближе и с подробностями. Например, в вещании HD-качества вероятность увидеть шайбу и направление ее полета гораздо выше. И следовательно – интереснее смотреть.
В-четвертых, в отличие от «линейного телевидения» приложение «СМОТРИ+» позволяет не просто записать, а потом пересмотреть наиболее волнующие матчи, но и повторить наиболее интересные моменты, которые отобрали редакторы и другие пользователи. Это само по себе повышает ценность контента для болельщиков, которым данная функция пришлась по вкусу.
В-пятых, приложение, обеспечивает доступность видео в любом месте без зависаний и перебоев. Мы очень старались достичь такого качества, при котором наши пользователи не пропустят ни одного волнующего момента.
Обычно достаточно пять пунктов для обозначения преимуществ нашего продукта «над обычным порошком», но у нас есть и в-шестых: теперь можно выбирать комментаторов матча и point of view камеры. Это достаточно экспериментальная функция с пока не до конца ясным экономическим эффектом, и доступна она только для некоторых особенно популярных матчей, но мы работаем над отладкой этой функции по всей цепочке производства контента.
Давайте разберем схему работы сервиса подробнее:
![](https://habrastorage.org/files/3f7/53b/edc/3f753bedcd0b43ce8eab0c7fd8704386.png)
Как это работает
«Извините, технические неполадки вне территории СССР»
Именно эту отвлекающую фразу применял Николай Озеров, когда во время хоккейных матчей начинались драки. Камера переключалась на нейтрального болельщика, а комментатор рассказывал о событиях в мире спорта. В одном из репортажей, когда снова была использована «дежурная фраза», Николай Николаевич даже успел рассказать о зарубежных гастролях советского балета.
Но мы не станем рассказывать о балете, а опубликуем функциональную схему сервиса «СМОТРИ+»:
Content is King
Принципиальное отличие «СМОТРИ+» от портала с интернет-телевидением заключается в самом контенте и способе доставке его до зрителя. В приложении мы не транслируем контент какого-либо готового телевизионного канала, а формируем сигнал с самого места события. И это довольно сложный производственный процесс.
Контент создается и поступает зрителю «СМОТРИ+» в несколько этапов:
1. Сначала «картинка» создается из нескольких видеопотоков, которые идут со всех камер, находящихся на стадионе или месте проведения спортивного мероприятия.
2. Далее все сигналы с камер поступают в передвижную телевизионную станцию (ПТС). В ПТС находится режиссер трансляции, который формирует так называемые выходной сигнал. Именно такой «живой» сигнал и видит зритель в конечном итоге.
3. Видеопотоки от ПТС по специальным каналам связи (как правило, это VPN-каналы с очень жесткими требованиями по SLA) поступают на распределительный узел, с которого в большинстве случаев сигнал уходит в нашу аппаратную для монтажа, наложения на трансляцию графики, добавления спецэффектов и комментаторского звука. Иногда монтаж комментатора и видеографических эффектов может происходить и в ПТС.
4. Из центральной аппаратной обработанный и готовый к потреблению видеопоток возвращается на распределительный узел. На этом узле происходит «раздача сигнала» заказчикам – телеканалам и собственно платформе «СМОТРИ+»
5. И только после этого пользователи приложения «СМОТРИ+» могут наслаждаться матчами со спецграфикой и комментаторами.
Весь производственный процесс и процесс доставки сигнала делится между специализированными партнерами: съемки и остальной продакшн делают телекомпании, а доставку сигнала производят технологические партнеры. Между компаниями налажено круглосуточное взаимодействие и контроль каждой трансляции. Мы ведем контроль над каждым матчем и проверяем, чтобы все заявленные сигналы шли по соответствующим линиям и с соответствующим качеством.
Из соображений безопасности мы не можем опубликовать фотографии наших передвижных телевизионных станций – чтобы не привлекать внимание потенциальных вандалов, которые могут навредить трансляции. В общем виде ПТС выглядит как обычный автобус или грузовой автомобиль-фура, где все самое интересное – внутри. Примерно такой вид имеет ПТС снаружи и внутри:
![](https://habrastorage.org/files/e58/7fc/3c4/e587fc3c485d4c5c809c55b3ec455227.jpg)
Обработка видеосигнала
Выше мы уже упоминали, что видеосигнал подвергается специальной обработке – цифровое вещание имеет ряд неоспоримых преимуществ перед традиционно-аналоговыми способами передачи ТВ-сигнала: например, мы можем давать картинку того качества, которое сможет и захочет получить зритель. Если каналы передачи данных в данный конкретный момент у пользователя не слишком хороши (например, 3G в центре мегаполиса в ЧНН утилизирован довольно плотно), или конечное устройство пользователя не может обрабатывать видео в HD-качестве, то пользователю автоматически предлагается «забрать» видеопоток SD-качества. И обратная ситуация – если абонент имеет достаточно широкий канал (LTE, например, или Wi-Fi у себя дома) и имеет современный планшет с мощным процессором, то почему бы ему и не смотреть трансляцию в максимальном качестве?
В качестве базового стандарта, нашей платформой используется стандарт адаптивного вещания Apple HLS (HTTP Live Streaming). Данный протокол позволяет организовать вещание на большинство доступных терминалов (абонентских устройств). В нашем случае требовалось обеспечить доступность сервиса на Apple iOS и Android разных версий. Для обеспечения работоспособности HLS в сочетании с системой защиты контента Verimatrix пришлось использовать сторонний плеер компании NEXStreaming. Он был выбран исходя из технических возможностей обеспечения заданных характеристик работы плеера.
Медиабизнес
Спортивные мероприятия – это довольно затратный бизнес, который должен быть экономически целесообразен. Защита контента и использование систем DRM (русская версия) – самое главное из требований многочисленных партнеров, участвующих в цепочке создания трансляции.
Использование систем защиты авторских прав не позволяет пользователям делать пиратскую ретрансляцию матчей. Главным образом по причине того, что им ее неоткуда делать – платформа «СМОТРИ+» самостоятельно получает сигнал в точке его формирования, затем обрабатывается (сжимаем, формируем видеопотоки разного качества, разбиваем на блоки, шифруем) и размещается на CDN.
Для шифрования контента и верификации легальных пользователей, платформа «СМОТРИ+» использует решение Verimatrix. Оно было выбрано по нескольким причинам: во-первых, Verimatrix – мировой лидер в области защиты контента. А во-вторых, решение Verimatrix обеспечивает защиту контента для нашего второго телевизионного/видео проекта «МегаФонТВ». Использование средств Verimatrix позволяет быстро пройти аудит безопасности платформы у большинства правообладателей, что было очень важно в виду ограниченных сроков разработки.
Принцип действия данной системы DRM не предмет данной статьи, но если очень коротко, то он заключается в том, что в каждую копию приложения «СМОТРИ+» имплементирован уникальный «ключ доступа», который генерируется в момент инсталляции приложения на устройстве пользователя. Далее все просто – если к серверам HLS обращается пользователь без ключа или с ключем-подделкой, то запрос будет отклонен. Алгоритм верификации «ключа доступа», разумеется, не раскрывается, но пытливый хабра-читатель может, например, обратиться к первоисточнику и поисковым системам.
Доставка сигнала
Процесс не останавливается на том, чтобы сформировать сигнал, зашифровать его и авторизовать пользователя. Одним из важнейших критериев качества видеосигнала является скорейшая доставка его пользователю без проволочек и лагов. Для решения этой задачи применяется целая сеть специализированных серверов CDN.
Большинство читателей Хабра наверняка знакомы с концепцией Content Delivery Network, поэтому очень коротко и сжато. Если читатели заинтересуются конкретикой решений собственной сети CDN «МегаФона» – мы обязательно напишем подробнее.
А CDN у федерального оператора собственная. Это решение позволяет распределить нагрузку на платформу услуги «СМОТРИ+» (и уже упомянутой «МегаФонТВ» то же) при больших пиках просмотров пользователями – чем популярнее матч, тем больше пользователей. В особых случаях сеть «потянет» сотни тысяч абонентов, одновременно просматривающих видео, что было подтверждено практикой Сочи-2014. Также это решает вопрос доставки сигнала до регионов России. При этом, использование этого CDN не влияет на доступность контента для абонентов других операторов, так как не зависит от точки доступа к сети Интернет на стороне пользователя. Мы постоянно совершенствуем сервис и проводим тесты с новыми CDN-партнерами, но в коммерческой эксплуатации «СМОТРИ+» используется собственный CDN.
И еще немного подробностей
Приложение и инфраструктура его поддержки постоянно совершенствуются. Первая версия приложения (для Олимпийских игр) была разработана на основе готового серверного решения от зарубежного партнера. Такое решение было оправданно, так как необходим был запуск в короткие сроки. Но приложение не имело 100% функционала, которые мы хотели внедрить. В результате, к сентябрю текущего года мы полностью переработали и собственно приложение, и множество элементов инфраструктуры сервер-сайд. Разработчиком новой версии выступила команда MC2Software, которая в сжатый срок смогла реализовать новый функционал приложения для запуска под КХЛ, а также поддержать доступ к архивам спортивных событий, запущенных ранее.
Мы намереваемся продолжать разработку, совершенствовать качество и дополнять функционал сервиса. Одной из целей написания этой статьи является сбор идей и потребностей Хабражителей – не стесняйтесь в комментариях. Мы не только внимательно прочтем весь фидбэк, но и составим вишлист новых функций и фич приложения. И обязательно напишем об их реализации.
Серверная магия
На этом описание внутренней кухни «СМОТРИ+» не заканчивается – постепенно мы подбираемся к самому интересному – «а что внутри» и некоторым организационным подробностям.
Источники контента
Любители спорта — не домохозяйки, которые просто наблюдают за живыми картинками на экране – это активные болельщики, которым в процессе использования приложения очень интересна дополнительная информация: спортивная статистика, результаты матчей, состав команд, информация об игроках и еще тысяча мелких, но важных информационных сообщений.
«СМОТРИ+» радикально отличается от большинства реализованных проектов интернет-вещания – все необходимые спортивные данные тщательно собираются, обрабатываются и предоставляются пользователям уже в виде конечного визуального (?) продукта. Разумеется, как технологическая компания, «МегаФон» не является признанным экспертом в области спортивных событий — сбором первичных данных, их обработкой занимаются специально обученные люди у наших партнеров-поставщиков. И, как оказалось, выбор поставщика спортивной информации — нетривиальная задача, которая еще и накладывается на технологические ограничения программных решений.
Сначала выбор поставщика спортивных данных проводился по критериям стоимости, типа и качества API, качества документации, скорости обновления данных и т. д. В итоге было выбрано решение Opta Sport (Perform Group), компании — мирового лидера в области сбора и анализа информации о спортивных событиях в режиме реального времени.
При активном участии наших партнеров мы разработали структуры данных таким образом, чтобы они, с одной стороны, вмещали всю нужную хоккейную (речь идет прежде всего о КХЛ) статистику, а с другой — были достаточно гибкими и расширяемыми для других сезонов и видов спорта.
На этапе практической реализации схемы импорта данных, отладки, запуска и написания десятков писем поставщику, которые начинались с фразы: «вот тут у вас неправильно, исправьте, пожалуйста», возникла проблема гибкой адаптации и правки данных «на лету». И «СМОТРИ+» обзавелся собственной системой подготовки и публикации контента, а так же профессиональным редакторским отделом.
Тут есть интересный момент. Данные, которые мы получаем от Opta, редактор может частично подправить. Например, многие имена игроков приходят нам в транслитерированном виде. Редактор может написать нормальное имя, и оно не будет перетёрто следующим импортом из Opta, но, например, статистика игрока будет обновлена.
Проталкивание
Следующим интересным моментом сервер-сайд магии является механизм получения обновлений данных. Дело в том, что в отличие от «линейного ТВ», где ведется ординарное вещание потоков, платформа «СМОТРИ+» генерирует огромное количество уведомлений для приложения – спортивная статистика, сообщения комментаторов, в том числе текстовые, события на спортивной площадке — все, что описывалось в предыдущем разделе статьи. Все эти события пересылаются серверной стороной приложению в режиме «проталкивания». Приложение не может знать, когда произойдет событие, но должно немедленно отреагировать на него в случае возникновения.
Обычно большинство приложений получают события методом периодической посылки http-запросов GET – сначала посылается запрос на сервер, получается ответ, потом им заполняется экран. Такой механизм прост в использовании и программировании, но при этом в Сети возникает большое количество бессмысленного трафика – приложение делает запрос, а сервер отвечает на него «ничего не произошло». И так несколько раз в секунду. Представим себе, что таким образом ведут себя сотни тысяч пользователей, и масштаб бедствия предстает в полный рост.
Мы пошли другим путем: приложение содержит в себе локальную копию базы данных, которая обновляется при запуске и в фоне, а в активном состоянии каждая копия получает обновления с минимальной задержкой. Например, при хорошем соединении видеомоменты появляются в плеере уже через несколько миллисекунд после их создания редактором в системе управления контентом. Этот механизм так же позволяет пользоваться частью функционала приложения и при разрыве сеанса связи, что совсем не редкость при использовании мобильного доступа в Интернет.
Механизм, который называется Server-sent events, заставляет приложение получать все элементы новостной ленты (видеомоменты, голосования, новости и т. д.), игровые моменты и комментарии из таймлайна, списки матчей, команд и игроков, прочую информацию по мере ее поступления.
В то же время, статистика для внутреннего использования собирается «обычным» образом (запросом к серверу) и не сохраняется локально, чтобы не увеличивать значительно размер локальной БД.
Go
Использование механизма «server-sent events» накладывает дополнительные требования к инструментарию, и мы пришли к выводу, что решение не самых стандартных задач требует аналогичного инструментария. И мы выбрали язык Go.
На Хабре имеется целый хаб, посвященный этому замечательному инструменту, а ссылку на первоисточник приводим по традиции и правилам хорошего тона.
Основная причина выбора данного решения – механизм получения обновлений, который держит постоянное открытое соединение. Сделать его на, к примеру, Ruby или Python было бы сложно и неидиоматично, а на Java – дольше, особенно если учесть, что у нас нет Java-разработчиков. :)
Использование языка позволило существенно сократить время разработки, несмотря на то, что язык мы учили «в процессе». Результат вы можете установить на свой смартфон и протестировать. А ещё, мы сделали компонент для отправки push-уведомлений, который способен отправлять 7000 ios-пушей в секунду на одно соединение.
Вместо эпилога
«Сейчас прозвучит Государственный Флаг Советского Союза!»
Николай Озеров
Как уже писалось, сервис «СМОТРИ+» работает с февраля, с самой Олимпиады. По результатам полученной от пользователей обратной связи была проделана «работа над ошибками» и в сентябре был запущен следующий релиз продукта. Важным отличием текущей версии от выпущенной к Олимпиаде является сам контент и генерируемые события.
Ранее нам под каждое новое событие приходилось производить обновление приложения в магазинах приложений (App Store и Google Play), теперь же мы можем добавлять спортивные события без обновления сборки. Это было одним из основных бизнес-требований.
По статистике приложения у нас на текущий момент порядка 1,3 млн загрузок, но активных пользователей несколько меньше. При этом постоянная активная аудитория сервиса только с контентом от КХЛ составляет более 200 тысяч уникальных пользователей ежемесячно. Самый активный город по просмотрам — Новосибирск, там нас смотрят больше всего.
Планы по развитию, как обычно – грандиозные.
В скором времени мы сделаем функцию «мультикамерности» для некоторых матчей КХЛ. Принципиально, функция готова в собственно приложении, но имеются некоторые проблемы организационного характера и юзабилити. «Мультикамерность» должна дать возможность пользователю при просмотре матча выбрать одну из нескольких камер, которые размещены на стадионе, что позволит болельщику менять точку зрения прямо по ходу матча, а после пересматривать определенные моменты с разных углов.
Кроме того, есть цель добавить в приложение элементы геймификации. Болельщики — вовлеченные люди, и мы хотим выстроить с ними диалог в виде дополнительных увлекательных событий. Например, проводить более интересные конкурсы в течение месяца, а в конце определять, кто был самый активный или собрал больше всего баллов и т.п. Также думаем про дополнение контентом UGC. При этом мы понимаем, что для запуска этого функционала нужно не столько ресурных (финансовых, человеческих, временных) затрат, сколько важно наполнение идей содержанием и здравым смыслом. Главное – это не реализация «забавных фич», а востребованность функционала нашей аудиторией, его реальное использование и необходимость. Мы очень надеемся на вашу помощь и поддержку и будем внимательно следить за комментариями.