Что такое стриминг, видео

Сферы использования

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

Службы видеовещания являются хорошим инструментом медийных персон для связи со своей аудиторией. Многие известные личности уже используют данные сервисы для показа своей жизни «за кулисами». Мобильные приложения видеострима воплощают принципы журналистики будущего, где каждый пользователь является и редакцией, и вещательной станцией, и телередактором. С помощью видестриминговых сервисов можно следить практически за любой точкой планеты, где есть интернет, в режиме реального времени. Так, во время серии террористических атак в Париже 2015 года пользователи вели прямую трансляцию в Periscope с улиц, на которых еще недавно звучали выстрелы. Некоторые телеканалы также начали проводить прямые трансляции через мобильные стриминговые сервисы.

Крупнейшие сервисы

Twitch.tv

Основная статья: Twitch.tv

Служба занимает доминирующее положение на рынке. За декабрь 2015 года зарегистрировано более 9 миллионов уникальных пользователей. Основной тематикой вещания на платформе является трансляция прохождения видеоигр — летсплеев. Также, используется для трансляции киберспортивных соревнований. На долю ресурса приходится порядка 2 % трафика в США в пиковые часы. В августе 2014 сервис был куплен компанией Amazon за $970 млн.

YouTube Прямые трансляции

Основная статья: YouTube

Главный и прямой конкурент Twitch.tv от компании Google, появившийся в августе 2015 года на основе YouTube. Основной тематикой прямых трансляций YouTube также являются игровое видео. Главными преимуществами сайта являются более удобный и дружелюбный интерфейс, скорость загрузки видео, возможность хранения записи трансляции на хостинге, а также уже имеющаяся аудитория YouTube.

Livestream

Основная статья: Lifestream

Служба потокового видеовещания, существующая с 2007 года. Сервис не ограничивает пользователей в темах вещания, как Twitch. Аудитория сервиса насчитывает более 40 млн зрителей ежемесячно. В список пользователей сервиса входят Spotify, Gannett, Всемирный экономический форум, Tesla, SpaceX, НБА, RISD, Clinton Global Initiative, а также более 200 американских телевизионных каналов.

Periscope

Основная статья: Periscope

Служба видеовещания от компании Twitter, Inc. для трансляции с мобильных устройств. Аккаунт приложения можно привязать к аккаунту Twitter, в котором появляются уведомления о начале трансляции, благодаря чему приложение быстро набрало большую аудиторию. Уже через 4 месяца после запуска Periscope насчитывал 10 миллионов зарегистрированных пользователей, а также 350 000 часов просмотренного видео ежедневно. Главным преимуществом является простота и удобство приложения — после установки приложения трансляцию можно начать нажатием одной кнопки.

Примечания

  1. 1 2 3 4 What is Streaming?.
  2. Смотри, что я умею: как игровой стриминг изменил мир. TJournal. Проверено 15 января 2016.
  3. Свистать всех к перископу: как Twitter массово привлёк российских звёзд для продвижения сервиса видеотрансляций. TJournal. Проверено 15 января 2016.
  4. Теракты в Париже 14.11.2015 Прямой эфир в PERISCOPE (13 ноября 2015). Проверено 15 января 2016.
  5. Телеканал ДОЖДЬ on Periscope: «Датская группа Brothers Moving в подъезде Дождя. Прямой эфир tvrain.ru». Periscope. Проверено 15 января 2016.
  6. Киберспорт > Дайджест сентября. www.igromania.ru. Проверено 14 января 2016.
  7. Compete. siteanalytics.compete.com. Проверено 14 января 2016.
  8. Twitch. Twitch. Проверено 14 января 2016.
  9. MacMillan, Douglas. Amazon to Buy Video Site Twitch for $970 Million, Wall Street Journal. Проверено 14 января 2016.
  10. Зачем YouTube создал конкурента Twitch. Look At Me. Проверено 14 января 2016.
  11. Livestream | What is Livestream?. Livestream. Проверено 15 января 2016.
  12. Gannett New Jersey. Livestream. Проверено 15 января 2016.
  13. KSPR HD Doppler Radar. Livestream. Проверено 15 января 2016.
  14. 1 2 Periscope бьет рекорды популярности. style.rbc.ru. Проверено 14 января 2016.
  15. Lucas Matney. Periscope Has 10M Registered Users Watching 40 Years Of Video Per Day. TechCrunch. Проверено 14 января 2016.
  16. Федеральный закон Российской Федерации от 5 мая 2014 г. N 97-ФЗ «О внесении изменений в Федеральный закон «Об информации, информационных технологиях и о защите информации» и отдельные законодательные акты Российской Федерации по вопросам упорядочения обмена информацией с использованием информационно-телекоммуникационных сетей». Проверено 15 января 2016.

Для улучшения этой статьи желательно:

  • Найти и оформить в виде сносок ссылки на независимые авторитетные источники, подтверждающие написанное.
  • Подтвердить значимость предмета статьи согласно критериям значимости.

Создаем сервер для потокового видео: глава из книги по PHP от нашего разработчика


У нас в Skyeng работают весьма талантливые люди. Вот, например, бэкенд-разработчик Words Сергей Жук написал книгу про событийно-ориентированный PHP на ReactPHP, основанную на публикациях его блога. Книга англоязычная, мы решили перевести одну самодостаточную главу в надежде, что кому-то она сможет пригодиться. Ну и дать скидочную ссылку на всю работу.
В этой главе мы рассмотрим создание элементарного асинхронного сервера для видео-стриминга на ReactPHP Http Component. Это компонент высокого уровня, предоставляющий простой асинхронный интерфейс для обработки входящих соединений и HTTP-запросов.

Для поднятия сервера нам потребуются две вещи:
— инстанс сервера (React\Http\Server) для обработки входящих запросов;
— сокет (React\Socket\Server) для обнаружения входящих соединений.
Для начала давайте сделаем очень простой Hello world сервер, чтобы понять, как все это работает.
use React\Socket\Server as SocketServer; use React\Http\Server; use React\Http\Response; use React\EventLoop\Factory; use Psr\Http\Message\ServerRequestInterface; // init the event loop $loop = Factory::create(); // set up the components $server = new Server( function (ServerRequestInterface $request) { return new Response( 200, , «Hello world\n» ); }); $socket = new SocketServer(‘127.0.0.1:8000’, $loop); $server->listen($socket); echo ‘Listening on ‘ . str_replace(‘tcp:’, ‘http:’, $socket->getAddress()) . «\n»; // run the application $loop->run();
Основная логика этого сервера заключена в функции обратного вызова, передающейся конструктору сервера. Обратный вызов осуществляется в ответ на каждый входящий запрос. Он принимает инстанс объекта Request и возвращает объект Response. Конструктор класса Response принимает код ответа, заголовки и тело ответа. В нашем случае в ответ на каждый запрос мы возвращаем одну и ту же статическую строчку Hello world.
Если мы запустим этот скрипт, он будет выполняться бесконечно. Работающий сервер отслеживает входящие запросы. Если мы откроем адрес 127.0.0.1:8000 в нашем браузере, мы увидим строку Hello world. Отлично!

Простой стриминг видео

Давайте теперь попробуем сделать что-нибудь поинтереснее. Конструктор React\Http\Response может принять читаемый поток (инстанс класса ReadableStreamInterface) в качестве тела ответа, что позволяет нам передавать поток данных непосредственно в тело. Например, мы можем открыть файл bunny.mp4 (его можно скачать с Github) в режиме чтения, создать с ним поток ReadableResourseStream и предоставить этот поток в качестве тела ответа:
$server = new Server( function (ServerRequestInterface $request) use ($loop) { $video = new ReadableResourceStream( fopen(‘bunny.mp4’, ‘r’), $loop ); return new Response( 200, , $video ); });

Для создания инстанса ReadableResponseStream нам нужен цикл событий, мы должны передать его в замыкание. Кроме того, мы поменяли заголовок Content-Type на video/mp4, чтобы браузер понимал, что в ответе мы посылаем ему видео.
Заголовок Content-Length объявлять не нужно, поскольку ReactPHP автоматически использует chunked transfer и отправляет соответствующий заголовок Transfer_Encoding: chunked.
Давайте теперь обновим окно браузера и посмотрим потоковое видео:

Супер! Мы сделали стриминговый видео-сервер с помощью нескольких строк кода!
Важно создать инстанс ReadableResourseStream непосредственно в функции обратного вызова сервера. Помните об асинхронности нашего приложения. Если мы создадим поток вне обратного вызова и просто передадим его, никакого стриминга не случится. Почему? Потому что процесс чтения видеофайла и обработка входящих запросов сервера работают асинхронно. Это значит, что пока сервер ждет новые соединения мы также начинаем читать видеофайл.
Чтобы убедиться в этом, мы можем использовать события потока. Каждый раз, когда читаемый поток получает данные из своего источника, он запускает событие data. Мы можем присвоить этому событию обработчик, который будет выдавать сообщение каждый раз, когда мы читаем данные из файла:
use React\Http\Server; use React\Http\Response; use React\EventLoop\Factory; use React\Stream\ReadableResourceStream; use Psr\Http\Message\ServerRequestInterface; $loop = Factory::create(); $video = new ReadableResourceStream( fopen(‘bunny.mp4’, ‘r’), $loop ); $video->on(‘data’, function(){ echo «Reading file\n»; }); $server = new Server( function (ServerRequestInterface $request) use ($stream) { return new Response( 200, , $stream ); }); $socket = new \React\Socket\Server(‘127.0.0.1:8000’, $loop); $server->listen($socket); echo ‘Listening on ‘ . str_replace(‘tcp:’, ‘http:’, $socket->getAddress()) . «\n»; $loop->run();
Когда интерпретатор доходит до последней строки $loop->run();, сервер начинает ожидать входящие запросы, и одновременно мы начинаем читать файл.
Поэтому есть вероятность, что к тому моменту, когда на сервер придет первый запрос, мы уже достигнем конца видеофайла, и у нас не будет данных для стриминга. Когда обработчик запроса получит уже закрытый ответный поток, от просто отправит пустое тело ответа, что приведет к пустой странице браузера.

Улучшения

Дальше мы попробуем улучшить наш маленький сервер. Допустим, мы хотим дать пользователю возможность указывать имя файла для стриминга непосредственно в строке запроса. Например, при вводе в адресной строке браузере 127.0.0.1/?video=bunny.mp4 сервер начнет стримить файл bunny.mp4. Хранить файлы для стриминга мы будем в директории media. Теперь нам надо каким-то образом получить параметры из запроса. Объект запроса, который мы получаем в обработчике запроса, содержит метод getQueryParams(), возвращающий массив GET, аналогично глобальной переменной $_GET:
$server = new Server( function (ServerRequestInterface $request) use ($loop) { $params = $request->getQueryParams(); $file = $params ?? »; if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } $filePath = __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . $file; $video = new ReadableResourceStream( fopen($filePath, ‘r’), $loop ); return new Response( 200, , $video ); });

Теперь, чтобы посмотреть видео bunny.mp4, мы должны зайти на 127.0.0.1:8000?video=bunny.mp4. Сервер проверяет входящий запрос на параметры GET. Если мы находим параметр video, мы считаем, что это название видеофайла, который хочет увидеть пользователь. Затем мы выстраиваем путь к этому файлу, открываем читаемый поток и передаем его в ответе.
Но здесь есть проблемы. Видите их?
— Что если на сервере нет такого файла? Мы должны в этом случае вернуть страницу 404.
— Теперь у нас есть жестко заданное в заголовке значение Content-Type. Нам надо определять его в соответствии с указанным файлом.
— Пользователь может запросить любой файл на сервере. Мы должны ограничить запрос только теми файлами, которые мы готовы ему отдать.

Проверка наличия файла

Прежде чем открыть файл и создать поток, мы должны проверить, существует ли вообще этот файл на сервере. Если нет – возвращаем 404:
$server = new Server( function (ServerRequestInterface $request) use ($loop) { $params = $request->getQueryParams(); $file = $params ?? »; if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } $filePath = __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . $file; if (!file_exists($filePath)) { return new Response( 404, , «Video $file doesn’t exist on server.» ); } $video = new ReadableResourceStream( fopen($filePath, ‘r’), $loop ); return new Response( 200, , $video ); });
Теперь наш сервер не будет падать, если пользователь запросил неверный файл. Мы выдаем правильный ответ:

Определение MIME-типа файла

В PHP есть отличная функция mime_content_type(), возвращающая MIME-тип файла. С ее помощью мы можем определить MIME-тип запрошенного видеофайла и заменить им заданное в заголовке значение Content-Type:
$server = new Server( function (ServerRequestInterface $request) use ($loop) { $params = $request->getQueryParams(); $file = $params ?? »; if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } if (!file_exists($filePath)) { return new Response( 404, , «Video $file doesn’t exist on server.» ); } $video = new ReadableResourceStream( fopen($filePath, ‘r’), $loop ); $type = mime_content_type($filePath); return new Response( 200, , $video ); });
Отлично, мы убрали жестко заданное в заголовке значение Content-Type, теперь оно определяется автоматически в соответствии с запрошенным файлом.

Ограничение на запрос файлов

Осталась проблема с запросом файлов. Пользователь может задать любой файл на сервере в строке запроса. Например, если код нашего сервера находится в server.php и мы укажем такой запрос в адресной строке браузера: 127.0.0.1:8000/?video=../server.php, то в результате получим следующее:

Не очень безопасно… Чтобы это исправить, мы можем использовать функцию basename(), чтобы брать только имя файла из запроса, отрезая путь к файлу, если он был указан:
// … $filePath = __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . basename($file); // …
Теперь тот же запрос выдаст страницу 404. Исправлено!

Рефакторинг

Вообще, наш сервер уже готов, но его основная логика, размещенная в обработчике запроса, выглядит не очень. Разумеется, если вы не собираетесь ее менять или расширять, можно оставить и так, непосредственно в обратном вызове. Но если логика сервера будет меняться, например, вместо простого текста мы захотим строить HTML-страницы, этот обратный вызов будет расти и быстро станет слишком путаным для понимания и поддержки. Давайте сделаем небольшой рефакторинг, вынесем логику в собственный класс VideoStreaming. Чтобы иметь возможность использовать этот класс в качестве вызываемого обработчика запроса, мы должны встроить в него волшебный метод __invoke(). После этого нам будет достаточно просто передать инстанс этого класса в качестве обратного вызова конструктору Server:

// … $loop = Factory::create(); $videoStreaming = new VideoStreaming($loop); $server = new Server($videoStreaming);
Теперь можно строить класс VideoStreaming. Он требует одну зависимость – инстанс цикла событий, который будет встроен через конструктор. Для начала можно просто скопировать код из обратного вызова запроса в метод __invoke(), а затем заняться его рефакторингом:
class VideoStreaming { // … /** * @param ServerRequestInterface $request * @return Response */ function __invoke(ServerRequestInterface $request) { $params = $request->getQueryParams(); $file = $params ?? »; if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } $filePath = __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . basename($file); if (!file_exists($filePath)) { return new Response( 404, , «Video $file doesn’t exist on server.» ); } $video = new ReadableResourceStream( fopen($filePath, ‘r’), $this->eventLoop ); $type = mime_content_type($filePath); return new Response( 200, , $video ); } }
Далее мы будем рефакторить метод __invoke(). Давайте разберемся, что тут происходит:
1. Мы парсим строку запроса и определяем, какой файл нужен пользователю.
2. Создаем поток из этого файла и отправляем его в качестве ответа.
Получается, мы можем здесь выделить два метода:
class VideoStreaming { // … /** * @param ServerRequestInterface $request * @return Response */ function __invoke(ServerRequestInterface $request) { $file = $this->getFilePath($request); if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } return $this->makeResponseFromFile($file); } /** * @param ServerRequestInterface $request * @return string */ protected function getFilePath(ServerRequestInterface $request) { // … } /** * @param string $filePath * @return Response */ protected function makeResponseFromFile($filePath) { // … } }
Первый, getFilePath(), очень прост. Мы получаем параметры запроса с помощью метода $request->getQueryParams(). Если в них нет ключа file, мы просто возвращаем простую строку, показывающую, что пользователь открыл сервер без параметров GET. В этом случае мы можем показать статичную страницу или что-то в этом духе. Здесь мы возвращаем простое текстовое сообщение Video streaming server. Если пользователь указал file в запросе GET, мы создаем путь к этому файлу и возвращаем его:
class VideoStreaming { // … /** * @param ServerRequestInterface $request * @return string */ protected function getFilePath(ServerRequestInterface $request) { $file = $request->getQueryParams() ?? »; if (empty($file)) return »; return __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . basename($file); } // … }
Метод makeResponseFromFile() также очень прост. Если по указанному пути нет файла, мы сразу же возвращаем ошибку 404. В противном случае мы открываем запрошенный файл, создаем читаемый поток и возвращаем его в теле ответа:
class VideoStreaming { // … /** * @param string $filePath * @return Response */ protected function makeResponseFromFile($filePath) { if (!file_exists($filePath)) { return new Response( 404, , «Video $filePath doesn’t exist on server.» ); } $stream = new ReadableResourceStream( fopen($filePath, ‘r’), $this->eventLoop ); $type = mime_content_type($filePath); return new Response( 200, , $stream ); } }

Вот код класса VideoStreaming целиком:
use React\Http\Response; use React\EventLoop\Factory; use React\EventLoop\LoopInterface; use React\Stream\ReadableResourceStream; use Psr\Http\Message\ServerRequestInterface; class VideoStreaming { /** * @var LoopInterface */ protected $eventLoop; /** * @param LoopInterface $eventLoop */ public function __construct(LoopInterface $eventLoop) { $this->eventLoop = $eventLoop; } /** * @param ServerRequestInterface $request * @return Response */ function __invoke(ServerRequestInterface $request) { $file = $this->getFilePath($request); if (empty($file)) { return new Response( 200, , ‘Video streaming server’ ); } return $this->makeResponseFromFile($file); } /** * @param string $filePath * @return Response */ protected function makeResponseFromFile($filePath) { if (!file_exists($filePath)) { return new Response( 404, , «Video $filePath doesn’t exist on server.» ); } $stream = new ReadableResourceStream( fopen($filePath, ‘r’), $this->eventLoop ); $type = mime_content_type($filePath); return new Response( 200, , $stream ); } /** * @param ServerRequestInterface $request * @return string */ protected function getFilePath(ServerRequestInterface $request) { $file = $request->getQueryParams() ?? »; if (empty($file)) return »; return __DIR__ . DIRECTORY_SEPARATOR . ‘media’ . DIRECTORY_SEPARATOR . basename($file); } }
Разумеется, вместо простого обратного вызова обработчика запроса у нас теперь в три раза больше кода, но если этот код будет меняться в будущем, нам будет значительно проще проводить эти изменения и поддерживать наше приложение.
Примеры из этой главы можно найти на GitHub.
У Сергея также есть полезный регулярно обновляемый англоязычный блог.
Наконец, напоминаем, что мы всегда находимся в поиске талантливых разработчиков! Приходите, у нас весело.

Современные стрим-ресуры — как новое веяние моды

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

Для каждого стримера важно, чтобы стримерская площадка подходила под все его требования: была удобной, популярной и практичной. Давайте посмотрим, какие стримерские площадки существуют в нашей индустрии прямо сейчас, что о них думают стримеры и какие площадки для стриминга они выбирают.

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

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

Еще пять лет назад было три популярных стрим-ресурса, выбор был мал, выживали только самые продвинутые платформы. С ростом количества стримеров стали появляться другие стрим-площадки.

На протяжении семи лет лидером в сегменте лучших стриминговых платформ для видеоигр считался justin.tv. Но помимо игр там были каналы про животных, спорт, кино и даже новости. По сути, это был первый прообраз будущего twitch.tv. В один прекрасный момент руководители justin.tv поняли, что за играми стоит большое будущее, что именно игры будут приносить наибольший доход от стримов. Таким образом, было решено прикрыть justin.tv и открыть новый ресурс twitch.tv, который стал ориентирован только на игры.

По прошествии времени можно смело сказать, что есть twitch.tv и есть все остальные. История восхождения twitch.tv не похожа на историю с Золушкой, так как justin.tv послужил фундаментом для дальнейшей популярности twitch.tv. Рекламодатели и стримеры видели постоянные новшества в виде изменений, новых дополнений и фишек, которые происходили на этом ресурсе. Twitch.tv не запрещал общаться на разные темы, отсутствовала цензура, а за наличием копирайтов никто не следил. Правда, на twitch.tv можно было стримить только то, что связано с играми.

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

На данный момент сервис Twitch.tv является, пожалуй, единственным глобальным стриминг-сервисом, который постоянно развивается и сотрудничает напрямую не только с разработчиками игр, но и с производителями игрового оборудования. Ждем ответного шага от YouTube Gaming. Будет интересно ознакомиться с функционалом достойного конкурента.

Разработчики и издатели стали продвигать еще не вышедшие игры на twitch.tv, понимая, что площадка, собирающая многомиллионную аудиторию, подходит для этого лучше всего. По сей день twitch.tv остается главным фаворитом в гонке лучших стрим-площадок современности. Сбросить короля с Олимпа можно только в том случае, если придумать что-то новое и незаезженное.

После открытия twitch.tv стал проседать главный конкурент justin.tv — own3d.tv. За созданием этой стрим-площадки стояли отечественные разработчики. До тех пор, пока на рынке не появились серьезные игроки, own3d.tv оставался популярным. Но извечные лаги и неудобный интерфейс делали его аутсайдером среди молодых, но сильных конкурентов.

Twitch.tv был определенно лучше. Это замечали не только зрители, но и стримеры. Разработчики own3d.tv это понимали, они делали все возможное, боролись с лагами, открывая новые сервера, пытались найти спонсоров, но остаться в индустрии так и не смогли. В конце первого месяца 2013 года own3d.tv закрыли. Без скандала, правда, не обошлось. Популярные стримеры, которые не перешли на twitch.tv, говорили о внезапном прекращении выплат со стороны own3d.tv. И этот факт не удивил разве только тех, кто был далек от сложившейся темы: крайне неблагоприятное финансовое положение оранжевой стрим-платформы отразилось на неудачном исходе.

После ухода own3d.tv конкурентов у twitch.tv не убавилось, а как раз наоборот, только прибавилось. На роль убийцы twitch.tv стриминговая площадка, выполненная в светло-зеленых тонах, хоть и особо не претендует, но свою аудиторию поклонников имеет. Простыми словами hitbox.tv — это улучшенная копия own3d.tv. Главное преимущество еще молодой и амбициозной стрим-платформы — это отсутствие ограничений на битрейт: стримеры могут транслировать видео самого высокого качества до 1080p при 60 кадрах. Кстати, для них же — для стримеров — hitbox.tv предлагает официальное партнерство уже после достижения аудитории в 100 человек.

Хитбокс — площадка для потокового вещания в интернете. В чем ее плюсы перед Twitch, я не знаю. Больше смайликов, наверное. Из минусов — они не могут пофиксить несколько багов с момента запуска. Например, вылеты в черный экран. Но когда все это пофиксят и Хитбокс перестанет лагать, будет нормальная площадка, которая займет свою нишу. Не зря ведь тот же DreamHack запартнерился с Хитбоксом на русскую трансляцию.

Hitbox.tv является официальным партнером чемпионата DreamHack. Последний турнир по Counter-Strike: Global Offensive — финал второго сезона FACEIT, который прошел в рамках DreamHack Valencia, осветили именно на этой стрим-площадке. Для многих стримеров и болельщиков (не думаем, что популярные стримеры бросят twitch ради hitbox) ресурс не совсем удобен. Отличительных особенностей от того же twitch.tv у hitbox.tv мало. Да и люди уже привыкли к одной площадке, так что hitbox — это как небольшое, но удачное дополнение.

Составить конкуренцию twitch.tv уже сегодня может недавно анонсированный Youtube Gaming. В конце этого лета новую стрим-площадку запустят в США и Великобритании, а спустя некоторое время и в других регионах, включая европейские страны. На бумаге все выглядит довольно неплохо и заманчиво. А как будут обстоять дела после релиза — это уже вопрос удачи.

Как мне кажется, Youtube Gaming будет серьезным конкурентом Twitch. Но сам я не буду торопиться туда переходить. Я человек привычки, уж слишком привык к GoodGame и Twitch.

Создавать каналы на YG смогут как рядовые стримеры, так игровые разработчики и издатели. Под красивой оберткой будет скрываться масштабный проект: в нем будут присутствовать те же функции, что и на других популярных ресурсах. Но не это нас интересует больше всего. Чем сможет похвастаться YG в сравнении с Twitch, — вот главный вопрос. К сожалению, ответить на него сейчас невозможно. Известны только самые стандартные функции: пользователи смогут составлять расписание, создавать уведомления о начале трансляций и оформлять подписки. Но все это есть и на других стрим-платформах.

Другое дело, что в Twitch не боятся нового конкурента. И это, наверное, зря: как минимум, опасаться его все-таки стоит, так как в Google работают неглупые люди. Если Yotube Gaming предложит стримерам хорошие условия — лучше тех, что есть на twitch.tv, то все изменится. Добавим сюда качественные серверы от Youtube и один из лучших плееров во всей сети. Будет меньше задержек, а это жирный плюс!

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

Многие мои знакомые видео-блоггеры с Youtube (популярные) отказываются вести свои эфиры на Goodgame.ru из-за жестких правил в отношениии нецензурной брани, так как висеть вне главных списков стримеров с галкой 18+ не хочется. Используя в речи нецензурные выражения, таким образом они выражают свои эмоции. В целом, GoodGame.ru — это лучшая в России стриминг-платформа. Быстро развивается в техническом плане и здесь удобная система поддержки.

Из минусов стоит отметить модерацию форумной площадки и потолки аудитории для новых стримеров. Хотя для меня это скорее не минус, так как занимаюсь привлечением аудитории на Goodgame со своего Youtube-канала.

Кстати, отмечу и периодические тех. проблемы с ретранслятором. Для меня это критично, так как twitch-канал и его зрители часто страдают от этой проблемы.

А каким стрим-площадкам отдаете предпочтение вы?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *