- PVSM.RU - https://www.pvsm.ru -
О том как создавалась техническая реализация интернет-телеканала, какие задачи стояли перед командой и какие инструменты и сервисы помогли нам в процессе разработки вы сможете узнать в этой статье.
Торф ТВ — культурно-антропологический интернет проект, основанный Кириллом Кисляковым. Это авторский проект, соответственно с ярко выраженным субъективным подходом как к подбору тем, выбору персонажей, так и к подаче материала. На канале освещается широкий круг вопросов искусства и образования, литературы и поэзии, науки и техники, музыки и истории, не политических новостей и интересных фактов в формате короткометражного видео.
Видеосюжеты Торф ТВ выходят по мере накопления материала. Каждый выпуск — короткометражное видео длительностью от 3 до 15 минут, выполненное в стиле видеоарта.
Некоторые выпуски — монологи или диалоги людей, иногда они обращены к зрителю, а иногда общаются между собой, не обращая внимания на то, что их снимают. Есть выпуски сделанные в формате документальных передач, а есть выпуски в формате интервью. Иногда интервьюер может находится в кадре, как и собеседник, а иногда его может быть не видно и зритель слышит только голос задающий вопросы. Все выпуски разбиты по рубрикатору программ с определенной тематикой.
На сегодняшний момент на канале существуют такие разделы как:
С точки зрения антропологии наиболее интересны выпуски Портрет и Братья в хлам. Так, в первой категории выпусков человек говорит то, что он хочет сказать, а во второй — то что он сказать может. Оба формата зачастую позволяют за 5 минут сказать человеку больше, чем он сам предполагает.
Зрительская аудитория канала — это люди, которым интересны не только и не столько вопросы культуры, как возможность проследить ход мысли, оторванной от контекста и времени, актуальной в любую эпоху и в любой точке мира, поэтому, видеосюжеты на Торфе — это не оперативная хроника того, что случается в культурной жизни, а обзор того, что внезапно попадает в поле зрения авторского коллектива или приглашенных персонажей. Иногда, сюжеты могут быть из прошлого или из будущего, это ни как не влияет на их актуальность.
Когда мы начинали разработку ИТ-части проекта, перед нами стояло несколько задач:
Сегодня, в результате проб и экспериментов мы пришли к наиболее оптимальной, на наш взгляд, архитектуре проекта (полноразмерное изображение можно посмотреть тут [1]):
Посмотрим, как же все это работает и почему мы сделали именно так.
Для проекта был разработан собственный HTML5/JS плеер, поддерживающий основные видео-форматы:
Для каждого формата мы создаем 4 варианта видео в с разным разрешением:
По статистике больше всего просмотров приходится на видеофайлы в формате mp4 с разрешением HD и SD.
Над выпусками работает команда состоящая из нескольких монтажеров. Монтажеры находятся в разных городах и работают удаленно. У каждого из них есть FTP доступ к серверу кодирования (media encoding server). Вместе с оригинальным (сырым) видео-файлом монтажер также загружает на сервер текстовый файл с описанием выпуска и постер к видео, который отображается на главной странице. После того, как видео загружено на сервер по FTP начинается запускается процесс автоматического кодирования видео:
В процессе создания программы для конвертирования видео, было решено выделить код отвечающий за конвертацию в отдельную библиотеку. Библиотека называется X.Media.Encoding и ее можно свободно скачать из репозитория nuget [2].
Когда мы только начинали разработку, сайт был развернут на обычном выделенном сервере, и на первых порах, этого было вполне достаточно. Однако со временем, стало понятно, что у обычного сервера есть несколько недостатков:
Изначально, для решения проблем со скоростью загрузки выпусков мы решили воспользоваться услугами компании CDN.UA, которая предоставляет услуги доставки контента на территории Украины. К слову сказать, ребята там работают очень профессиональные и для нашего проекта они даже сделали несколько специфических настроек на своих серверах, которые позволили нам загружать видео в свой собственный HTML-5 плеер, а не использовать предлагавшийся ими изначально flash-плеер. На этом этапе для украинских зрителей проблемы с просмотром исчезли практически полностью. Но вот для тех, кто смотрел выпуски из Грузии, Израиля и других стран задержки при просмотре никуда не делись. Поэтому следующим шагом было решено перенести видео в международную сеть доставки контента. Выбор пал на Rackspace CDN, который в свою очередь использует [3] крупнейшую в мире сеть Akamai [4]:
В связи с переездом на новую платформу нам пришлось слегка обновить программу загрузки видео. Так если на CDN.UA мы загружали видео через FTP, то для загрузки его на Rackspace мы теперь используем
using net.openstack.Core.Domain; using net.openstack.Providers.Rackspace;
using NLog;
using System;
using System.Collections.Generic;
using System.IO; using System.Linq;
using System.Net;
using System.Text;
using X.Media.Encoding; ....
public bool Upload(string path)
{
const string container = "Video";
const string region = "DFW";
try
{
var cloudIdentity = new CloudIdentity { Username = _settings.StorageUserName, Password = _settings.StoragePassword };
var contentType = ContentTypeManager.GetContentType(Path.GetExtension(path));
var name = Path.GetFileName(path);
_logger.Info(String.Format("Upload: {0} t with content type: [{1}]", Path.GetFileName(path), contentType));
using (var stream = File.OpenRead(path))
{
var cloudFilesProvider = new CloudFilesProvider(cloudIdentity, region, null, null);
cloudFilesProvider.CreateObject(container, stream, name, contentType);
_logger.Info(String.Format("Uploaded: {0}", path));
}
}
catch (Exception ex)
{
_logger.WarnException(String.Format("Error while uploading: {0}", path), ex);
return false;
}
return true;
}
После того, как видео-контент был перенесен в CDN, настал черед сайта. Сейчас нагрузки на веб-сервер достаточно маленькие, по сравнению с нагрузками, которые были изначально при раздаче видео, но учитывая то, что наплыв посетителей как и прежде был неравномерный, было решено мигрировать сайт в облачную платформу. Сейчас сайт развернут в Microsoft Azure в службе WebSites. Для сайта поддерживается балансировка нагрузки и автоматическое масштабирование ресурсов в случае внезапного возрастания количества посетителей.
Из интересных момент, хочется отметить, что сайт имеет два режима отображений — ночной и дневной, который автоматически меняется, в зависимости от времени суток.
Хотя команда разработчиков проекта и небольшая (изначально было 4 человека, сейчас активно участвует в написании кода только 2 человека), процесс разработки и публикации проекта было решено максимально оптимизировать. Исходный код проекта мы храним в приватном репозитории Bitbucket. Сам проект, как уже было сказано ранее
При попадании нового коммита в соответствующий бранч происходит автоматический билд проекта, и в случае его успешного завершения — публикация новой версии сайта. В случае же, если по какой-то причине проект не был успешно собран в облачном окружении, мы всегда можем посмотреть узнать причину этого, ознакомившись с логами развертывания:
Впрочем, за все время нам эта возможность пригодилась только один раз, при первоначальном развертывании проекта в облаке.
Примерено через год после старта проекта мы поняли, что многим зрителям было бы удобнее смотреть выпуски не только с компьютера, но и используя свои смартфоны. Было решено сделать мобильный клиент. Мы сделали три версии мобиьных клиентов для трех основных мобильных платформ:
Логика работы мобильных клиентов максимально проста. В xml-формате они получают с сайта информацию о выпусках доступных программах и выпусках видео. Также в мобильный клиент передается url к видео-файлу расположенному в CDN, откуда он в последствии и загружает видео.
Также, у проекта есть «внутренний голос». Общается он с теми, кто установил себе на смартфон мобильное приложение Торф ТВ. Иногда пользователям приходят анонсы выпусков, а иногда просто интересные мысли и выражения. Работает «внутренний голос» на основе служб Azure Mobile Services. Поскольку, на момент создания «внутреннего голоса» Mobile Services с только вышли в релиз, логика была написана на JavaScript. Позже была добавлена возможность писать логику мобильных сервисов на C#, но так как все работает хорошо, переписывать этот кусок кода мне с стали.
Что интересно, на данный момент, примерно половина просмотров видео происходит через мобильные приложения.
Автор: Ernado
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/net/82893
Ссылки в тексте:
[1] посмотреть тут: http://hsto.org/files/f9a/ece/e72/f9aecee7223a4374952c9cfb2a881c05.png
[2] скачать из репозитория nuget: http://www.nuget.org/packages/xmediaencoding/
[3] использует: http://www.rackspace.com/knowledge_center/frequently-asked-question/how-can-i-use-akamais-cdn-with-cloud-files
[4] Akamai: https://ru.wikipedia.org/wiki/Akamai_Technologies
[5] хостится: https://www.reg.ru/?rlink=reflink-717
[6] публикация из Dropbox: http://blogs.technet.com/b/sams_blog/archive/2014/11/14/azure-websites-deploy-asp-net-website-using-dropbox.aspx
[7] Торф ТВ: http://torf.tv
[8] на nuget.org: http://nuget.org/packages/xmediaencoding/
[9] на GitHub: http://github.com/ernado-x/X.Media.Encoding
[10] OpenStack SDK: https://developer.rackspace.com/sdks/dot-net/
[11] MarcusAurelius: http://habrahabr.ru/users/marcusaurelius/
[12] gelas: http://habrahabr.ru/users/gelas/
[13] Источник: http://habrahabr.ru/post/185038/
Нажмите здесь для печати.