Як ми робили Торф ТБ

Торф ТВ — культурно-антропологічний інтернет проект, заснований Кирилом Кисляковым. Це авторський проект, відповідно з яскраво вираженим суб'єктивним підходом як до підбору тим, вибору персонажів, так і до подачі матеріалу. На каналі висвітлюється широке коло питань мистецтва та освіти, літератури і поезії, науки і техніки, музики та історії, не політичних новин і цікавих фактів у форматі короткометражного відео.
Відеосюжети Торф ТБ виходять по мірі накопичення матеріалу. Кожен випуск — короткометражне відео тривалістю від 3 до 15 хвилин, виконане в стилі відеоарту.

▌Концепція

Деякі випуски — монологи або діалоги людей, іноді вони звернені до глядача, а іноді спілкуються між собою, не звертаючи уваги на те, що їх знімають. Є випуски зроблені у форматі документальних передач, а є випуски у форматі інтерв'ю. Іноді інтерв'юер може знаходиться в кадрі, як і співрозмовник, а іноді його може бути не видно і глядач чує тільки голос задає питання. Всі випуски розбиті по рубрикатору програм з визначеною тематикою.

На сьогоднішній момент на каналі існують такі розділи як:
  • Портрет — авторські інтерв'ю
  • Брати в мотлох — випуски присвячені культурі споживання алкоголю
  • Погляд на звук — випуски присвячені подіям та персон зі світу музики
  • Кінець географії — випуски про подорожі і різних куточках світу
  • Улюблений вірш — гості читають свої улюблені вірші
  • Перша літ-ра — випуски присвячені літературі
  • Третя зміна — професіонали своєї справи розповідають про те, що і чому вони роблять


З точки зору антропології найбільш цікаві випуски Портрет Брати в мотлох. Так, у першій категорії випусків людина говорить те, що він хоче сказати, а в другій — то що він може сказати. Обидва формати часто дозволяють за 5 хвилин сказати людині більше, ніж він сам передбачає.

Глядацька аудиторія каналу — це люди, яким цікаві не тільки і не стільки питання культури, як можливість простежити хід думки, відірваної від контексту і часу, актуальною в будь-яку епоху і в будь-якій точці світу, тому, відеосюжети на Торфі — це не оперативна хроніка того, що трапляється в культурному житті, а огляд того, що раптово потрапляє в поле зору авторського колективу чи запрошених персонажів. Іноді, сюжети можуть бути з минулого або з майбутнього, це ні як не впливає на їх актуальність.

▌Реалізація

Коли ми починали розробку ІТ-частини проекту, перед нами стояло кілька завдань:

  • ресурс повинен бути реалізований з використанням HTML5 і дозволяє програвати відео на будь-яких пристроях, що підтримують стандарт
  • відео має бути доступний по всьому світу, в хорошій якості і без затримок програвання
  • процедура обслуговування проекту повинна бути максимально автоматизовано


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



Подивимося, як же все це працює і чому ми зробили саме так.

▌Плеєр


Для проекту був розроблений власний HTML5/JS плеєр, що підтримує основні відео формати:
  • ogg — відкритий стандарт формату медиаконтейнера, який є основним файловим і потоковим форматом для кодеків фонду Xiph.Org. Відео в цей формат кодировалось для користувачів з браузерами Firefox до 4 версії Opera до 10.6
  • mp4 — формат медиаконтейнера, який є частиною стандарту MPEG-4. Цей формат підтримується більшістю браузерів і, судячи зі статистики, відео саме в цьому форматі найчастіше завантажуються для перегляду
  • webm — відкритий формат мультимедіа, представлений компанією Google на конференції Google I/O 19 травня 2010 року. Формат не вимагає ліцензійних відрахувань, заснований на відкритих видеокодеке VP8. Використовувався в якості альтернативного кодека, так як передбачалося більш широке поширення стандарту.
Для кожного формату ми створюємо 4 варіанти відео з різним дозволом:
  • SD — для користувачів з низькою швидкістю інтернету і мобільних телефонів
  • HD — цей режим включений за замовчуванням для перегляду відео в режимі плеєра
  • HD720 — підходить для перегляду відео в повноекранному режимі
  • HD1080 — підтримка такого дозволу з'явилася трохи пізніше, для тих, хто дивиться випуски з пристроїв типу Smart TV і екранів великого дозволу
За статистикою найбільше переглядів припадає на відеофайли у форматі mp4 з роздільною здатністю HD SD.

▌Підготовка відео та публікація


Над випусками працює команда складається з декількох монтажерів. Монтажери знаходяться в різних містах і працюють віддалено. У кожного з них є FTP доступ до сервера кодування (media encoding server). Разом з оригінальним (сирим) відео-файлом монтажер також завантажує на сервер текстовий файл з описом випуску і постер до відео, який відображається на головній сторінці. Після того, як відео додано на сервер по FTP починається запускається процес автоматичного кодування відео:

  1. На сервері кодування, за допомогою спеціально розробленої програми, відбувається конвертація відео в різні формати і дозволу.
  2. Після завершення кодування відео, програма починає завантаження відео на кінцеву точку Rackspace CDN, звідки надалі файли потрапляють на локальні сервера CDN.
  3. Після завершення завантаження відправляється запит веб-додатком на додавання нового випуску.
  4. При отриманні виклику веб-додатком виконується процедура додавання інформації про відео в базу даних і випуск потрапляє на сайт.


У процесі створення програми для конвертування відео, було вирішено виділити код відповідальний за конвертацію в окрему бібліотеку. Бібліотека називається X. Media.Encoding і її можна вільно завантажити з репозиторію nuget.

▌Перехід в хмари


Коли ми тільки починали розробку, сайт був розгорнутий на звичайному виділеному сервері, і на перших порах, цього було цілком достатньо. Однак з часом стало зрозуміло, що у звичайного сервера є кілька недоліків:
  1. у першу чергу це стосувалося файлів з відео — швидкість завантаження випусків залишала бажати кращого
  2. друга проблема була пов'язана з тим, що ресурс по суті працює в режимі пікових навантажень — активність відвідувачів максимальна при виході нового випуску, і мінімальна між випусками. Таким чином, треба або купувати більш потужний сервер, ресурси якого більшу частину часу буде простоювати, або переходити на платформу, яка підтримує автоматичне масштабування.


Спочатку, для рішення проблем зі швидкістю завантаження випусків ми вирішили скористатися послугами компанії CDN.UA, яка надає послуги доставки контенту на території України. До слова сказати, хлопці там працюють дуже фахові і для нашого проекту вони навіть зробили кілька специфічних налаштувань на своїх серверах, які дозволили нам завантажувати відео в свій власний HTML-5 плеєр, а не використовувати запропонований ними спочатку flash-плеєр. На цьому етапі для українських глядачів проблеми з переглядом зникли практично повністю. Але для тих, хто дивився випуски з Грузії, Ізраїлю та інших країн затримки при перегляді нікуди не поділися. Тому наступним кроком було вирішено перенести відео до міжнародної мережі доставки контенту. Вибір припав на Rackspace CDN, який в свою чергу використовує найбільшу в світі мережу Akamai:


У зв'язку з переїздом на нову платформу нам довелося злегка оновити програму завантаження відео. Так якщо на CDN.UA ми завантажували відео через FTP для завантаження його на Rackspace ми тепер використовуємо
OpenStack SDK:
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. Сам проект, як вже було сказано раніше хоститься в службі Azure Website. І що нас дуже тішить, що ця служба дає змогу налаштувати процес автоматичного розгортання проекту з GitHub і Bitbucket (насправді кількість джерел набагато більше, і підтримується навіть публікація з Dropbox). У azure у нас існує два веб-сайту:
  • test — розгортання в який відбувається з гілки master
  • production — розгортання в який відбувається з гілки cloud




При попаданні нового коміта у відповідний бранч відбувається автоматичний білд проекту, і в разі його успішного завершення — публікація нової версії сайту. У разі ж, якщо з якоїсь причини проект не був успішно зібраний в хмарному оточенні, ми завжди можемо подивитися дізнатися причину цього, ознайомившись з логами розгортання:


Втім, за весь час нам ця можливість знадобилася лише один раз, при первинному розгортання проекту в хмарі.

▌Мобільні клієнти


Приблизно через рік після старту проекту ми зрозуміли, що багатьом глядачам було б зручніше дивитися випуски не тільки з комп'ютера, але і використовуючи свої смартфони. Було вирішено зробити мобільний клієнт. Ми зробили три версії мобиьных клієнтів для трьох основних мобільних платформ:
  • Windows Phone — підтримується починаючи з версії 7.8 і вище
  • iOS — підтримується починаючи з версії 5 і вище
  • Android — підтримується починаючи з версії 4.1 і вище


Логіка роботи мобільних клієнтів максимально проста. В xml-форматі вони отримують з сайту інформацію про випуски доступні програми і випуски відео. Також в мобільний клієнт передається url до відео-файлу розташованому в CDN, звідки він згодом і завантажує відео.

Також, у проекту є «внутрішній голос». Спілкується він з тими, хто встановив собі на смартфон мобільний додаток Торф ТБ. Іноді користувачам приходять анонси випусків, а іноді просто цікаві думки і висловлювання. Працює «внутрішній голос» на основі служб Microsoft Mobile Services. Оскільки, на момент створення «внутрішнього голосу» Mobile Services тільки вийшли в реліз, логіка була написана на JavaScript. Пізніше була додана можливість писати логіку мобільних сервісів на C#, але так як все працює добре, переписувати цей шматок коду мені з сталі.

Що цікаво, на даний момент, приблизно половина переглядів відео відбувається через мобільні додатки.

▌Корисна інформація



▌Примітки
  • У статті використані фрагменти з опису проекту, підготовлені хабраюзером MarcusAurelius
  • JavaScript плеєр для проекту був розроблений хабраюзером gelas


Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.