Broadcasting для начинающих | Технологии трансляции и кодирования видео "на лету"

+76
Sparinв блоге IT Pony!15 марта 2014, 05:59
Пост будет, к сожалению, не совсем про пони. Но в связи с участившимися моих собственных эмоциональных всплесков с данными товарищами, я решил написать эту статью. Собственно просим милости под кат, если вдруг внезапно захотел стримить.



Теоретическая часть

Куда же без теории? Многие даже не задумываются каким же образом все это происходит, а зря. Иначе вы рискуете стать одним из немногих печальных стримеров, но слава богу и таким помогают — www.youtube.com/watch?v=dT0S8QUGoHA (18+ матюки и голые тети прилагаются). Запись строго с его звуком, поэтому все вопросы каким же образом он умудрился разговаривать через скайп с задержкой к нему.
Ну а мы пожалуй пойдем дальше. Broadcasting — это трансляция видео, которое кодируется средствами центрального процессора (далее CPU) или графического процессора (далее GPU) на лету, то есть в режиме реального времени, через кодек H.264. Мы рассмотрим примеры кодирования как через CPU, так и через GPU, а так же три 3 площадки для стрима: CybergameTV, Twitch, Youtube. И выясним почему Twitch по определению не нужен.
Во время Broadcast'а происходит три этапа
  1. Кодирования по средствам H.264
  2. Поддерживание отправки видео по протоколу UDP
  3. Обеспечивание видео клиентам, по средству рассылки
Если во время первого этапа мы независимы, то от последних двух мы зависим телом и душой. Для нашего свежескодированного видео требуется сервер-ретранслятор, у которого пропускной способности хватит на трансляцию того или другого события. У каждой площадки свои требования, поэтому не редко стримеры выдают эффект мозайки — www.youtube.com/watch?v=BNbpfa3Dv6g (Слабый эффект мозайки) и www.twitch.tv/sparin/c/3354561 (Минимальный эффект). Но это еще не самая страшная проблема! Наиболее страшная проблемой может стать задержка сервера (далее ping), которая может помешать нормальной игре.
В итоге из всего выше написанного должна была сложиться вот такая картина происходящего

По такой схеме сразу становиться понятны три требования, необходимые для проведения стрима.
  1. Конфигурация PC или оборудование соот. под настройки стрима (Подробнее в тех. части)
  2. Сервер-ретранслятор (или площадка) с минимальным пингом для региона
  3. Интернет-канал с пропускной способностью от 20Мбит (Подробнее в тех. части)

Техническая часть

Интернет-канал и OBS
Ну вот, с основами мы разобрались, что свежескодированное видео должно отправляться на сервер, а затем зрителям. Теперь рассмотрим как сделать видео, которое будет отправляться на сервер. В силу бесплатности и ленивости оных читателей, мы возьмем самый адекватный вариант новичка — Open Broadcaster Software.
Open Broadcaster Software — это бесплатная программа с открытым исходным кодом, которая выполняет функции кодирования реального времени по кодеку H.264 и отправляет по заданным настройкам видео. Функционал простой и поддерживается захват Direct3D окон, то есть современным игрушек, использующие библиотеки DirectX. Скачиваем программу и продолжаем. В папке с программой, лежит 64 битная версия! Если у вас 64 битная система, то строго использовать ее! (Протестующим читать это. Если не доходит почему, то я готов помочь оторвать руки за вопросы о повышении производительности)
Итак, мы установили OBS и внутри него много непонятных настроек. Ну что, давайте разбираться, изучая реалии сурового мира. Начнем с ветки кодирование. Пожалуй самая нелогичная ветка, так как выступает лишь регулятором всего стрима. Представим себе видео с 30 кадров в секунду. Видео — это взаимозаменяемые кадры, допустим скриншоты экрана. И на эти 30 кадров отводиться лишь выбранный вами количество бит. Если в изображении два цвета — черный и белый, то на один пиксель отводиться 1 бит информации, согласно старой и верной советской школе информатики N=2^i, где i — количество бит, а N — длина алфавита. Основываясь на этой информации, делаем вывод — чем выше битрейт, тем лучше картинка стрима.
Но у битрейта есть еще одно свойство — размер получаемого файла. Возьмем пример на аудио, где тоже есть битрейт. У нас есть файл mp3 с битрейтом 320Кбит/с и продолжительностью 19 секунд. Чтобы подсчитать размер за 19 секунд, достаточно сделать небольшие математические действия. 320000бит (320КилоБит) * 19 секунд / 8 (перевод в байты) / 1024 (Перевод в Кбайт) = 742,1875 КБайт. Для сравнения возьмем реальный пример такого MP3 и сравним полученный результат.Результат Как мы видим, результат имеет погрешность, так как в файлах формата MP3 присутствует справочная информация, которая во первых инициализирует его, а во вторых содержит информацию для ваших плееров (обложка альбома, название, автор и т.п.)
Рассмотрев зачем нам нужен битрейт и что это такое, мы понимаем что размер будет складываться из этих настроек. Соответственно нам нужен интернет канал с такой пропускной способностью. Поэтому идем в договор с интернет провайдером и чекаем скорость. Допустим что у нас 10Мбит/с отдача и прием. На сервер-ретранслятор отправляет видео с битрейтом 4000Кбит/с и звуком 320Кбит/с. Внимание! Стоит учитывать реальную скорость до сервера! Файл из Австралии не будет скачиваться на скорости 10Мбит/с, а вполне скорость может упасть до 1Мбит/секунд. Выбирайте сервер/площадку с максимальным расположением к себе любимому! Из этого сделаем поправку на 8Мбит/с отдача и прием и попробуем посчитать. Получиться ли, теоретически, транслировать на сервер такое видео.
8 * 10 ^ 6 — 4320000 = 3680000 бит/с
3680000 / 8 / 1024 = 449,21875 КБайт/с остается в запасе для нужд других программ. Скажем скайп, который тоже сволочь прилично ест трафик, игра, торренты и т.д. Мало или много считать вам, но лично по мне этого хватит, если игра не идет на рейтинг или другие соревновательные мероприятия с вашим участием.

Кодирование
Итак, мы разобрались с интернет трафиком. Остальные настройки интуитивны и мне будет проще ответить на вопросы по ним, нежели каждый из них расписывать. Но по настройкам остался один вопрос, который остался без внимания. Чем кодировать?
По умолчанию, OBS кодирует при помощи средств CPU, соответственно нагружая CPU работой. Стоит отметить, что дискретизация 30 изображений в секунду очень трудоемкий процесс, и если процессор не успевает закодировать некоторое количество кадров, то OBS оставляет за собой право пропускать кадры, с целью поддержания соединения с сервером.
Как и любая другая программа, OBS — это процесс операционной системы. Каждый запрос или каждая команда к процессору, будет сопровождаться очередью или системой приоритетов ОС. Изменить приоритет можно в диспетчере задач или в настройках программы. Чем выше приоритет, тем больше ресурсов будет отдано процессу, но не стоит ставить приоритет реального времени. Существует вероятность что это приведет к не работоспособности системы на время работы процесса, т.к. все ресурсы будут отданы исключительно OBS. Для использовании многопоточности процессора, не забудьте проставить соот. галку «многопоточная оптимизация».
Ну и пожалуй из всего этого остался главный пункт — предустановка x264 CPU. Он отвечает за качество дискретизации картинки. Вдаваться в материал 8-9 классов информатики не хочу, но именно этот пункт отвечает за эффект мозайки, который происходит в следствии дискретизации. Ну и как правило зависимости:
  1. Чем быстрее происходит дискретизация, тем ниже нагрузка на CPU и качество картинки
  2. Чем меньше размер кадров, тем меньше можно выставить предустановку
Больно признавать, но процессор Intel Core 2 Duo E8400 еле справляется с 1280х720 30fps 2000Kbps на предустановке superfast. К сожалению я не могу привести примера качества с данного CPU, но поверьте на слово: зрелище отвратительное. Падения FPS, дропы кадров, эффект мозайки и прочие прелести, которые печалят, нежели само слово стример.
И последнее что хочется сказать по поводу стрима средствами CPU. Не выставляйте масштабирование изображения, если не уверены в силах процессора! Это лишь добавит объем работы и снизит качество изображения.

Кодирования, средствами GPU
К сожалению, или к великому счастью, я не смогу рассказать про платы видеозахвата, потому что попросту ими не обладаю. О них речи здесь не будет, но мы рассмотрим их альтернативу — API производителей GPU. Стоит отметить что технологии использования GPU в кодировании давно есть. У Nvidia — CUDA, а у AMD — UVD. И опять же к сожалению я не видел программ, которые использовали бы данные API для кодирования видео, средствами GPU, хотя могут! Однако положение на рынке спасает Intel, что бросает еще один камень в огород AMD.
Если мне память не изменяет, то все процессоры Intel, начиная с линейки i3, обладают собственным GPU — Intel Graphics и технологией QuickSync, что позволяет использовать их в качестве дешевых заменителей суровых видеокарт и снабжать офисные PC этими процессорами. В большинстве своих, пользователи не пользуются средствами GPU от Intel, и в частых случаях GPU процессора простаивает в отключенном состоянии. В итоге, Intel выдает народу новую технологию, которая делает небольшой прорыв или дешевые заменители дорогих плат видеозахвата — Intel Quick Sync Video. Отсюда можно процитировать википедию, чтобы понять PROFIT этой технологии
Quick Sync впервые появилась в процессорах Intel начиная с архитектуры Sandy Bridge (более старая архитектура Clarkdale имеет аппаратную поддержку только декодирования видео[4]), при этом отсутствует на малобюджетных CPU Sandy Bridge Pentium и Celeron[5]. Quick sync получила положительные отзывы за скорость работы[4]. Тестирование на сайте Tom’s Hardware показывает, что кодирование 449 МБ видео, длящегося 4 минуты, в формате 1080p в разрешение 1024×768 занимает 22 секунды. С использованием только программных средств этот процесс занимает 172 секунды. Такое же кодирование занимает 83 и 86 секунд с использованием видеокарт Nvidia GeForce GTX 570 и AMD Radeon HD 6870, соответственно[6].

Для сравнения привожу старых знакомых www.youtube.com/watch?v=BNbpfa3Dv6g (CPU) и www.twitch.tv/sparin/c/3354561 (Intel Quick Sync). Оба видео кодировались одним и тем же процессором Intel Core i5 3570k с заводскими частотами.
Итак, мы поняли что у нас возможно есть GPU, который простаивает почем зря, ну так давайте его использовать! Для начала вбиваем в гугл модель своего процессора и на сайте ark.Intel.com (Пример 3570) ищем поддержку Intel Quick Sync. Если вы АнимеМD или процессор не поддерживает технологию Intel Quick Sync, то придется довольствоваться платами видеозахвата или CPU, а для остальных инструкция ниже.
  1. Скачиваем и устанавливаем Intel Quick Sync SDK
  2. Ищем в BIOS'е флаг о включенном GPU процессора или включении технологии Intel Quick Sync (Лично у меня на плате MSI Z77A-G41 нету таких флагов, но по отзывам другие пользователей он есть)
  3. Проверяем работоспособность GPU в диспетчере устройств
  4. Спойлер
Итак, у нас включен GPU, но не до конца. Из-за того на GPU не поступает видеосигнала, GPU будет в режиме простоя или проще говоря в спящем режиме. Для того чтобы заставить его работать, нужно создать рабочую область на время стрима, или проще говоря — дополнительный экран. Можете конечно подключить второй монитор, но суть в одном. Мы должны подключить неизвестно устройство на разъем VGA с расширением экрана (Этот тот самый разъем для мониторов на материнской плате.
Спойлер
Применили, сохранили, хорошо. Но учтите! Второй дисплей считается продолжением рабочего стола, поэтому не удивляйтесь куда пропадает мышка или почему расширенное изображение скриншота
Дальше все еще проще. Настройки в OBS не изменяются кроме одной вещи. Во вкладке расширенные будет активна галочка Intel Quick Sync, если вы включили правильно GPU и установили SDK. Если галочка поставлена, то CPU будет использоваться лишь для основных действий, в то время как GPU будет кодировать видео для сервера. Настроить технологию смогут лишь знающие пользователи, остальным бы не советовал окунаться в суровую реалию этого мира :3

Площадки

Да настанет моя самая не любимая тема. Из-за которой больше всего испытываю разрывы в области таза, а обсуждения на тему кто из поней лучшая и рядом не стояли. Ну раз пошла такая пьянка, то я расскажу про три, абсолютно, разные, площадки: Twitch, CybergameTV, YouTube.
Twitch.tv
Пожалуй одна из самых отвратительных, в плане коммерции, площадок для стримов. Честно, я не знаю что было в те года и почему она завоевала столь огромную популярность среди игроков и стримеров. Но если рассматривать ее плюсы и минусы, то сразу можно понять что площадка не для обычных пользователей, особенно жителей СНГ.
Ну пожалуй подкрепим почему и рассмотрим настройку стрима. С этим все просто. TwitchTV выдает исключительно один Access_Token он же и PathKey, который вы вводите в настройках OBS (Вкладка трансляция). В дальнейшем вы просто запускаете стрим. Так же у Twitch'а есть приборная панель, но, к сожалению, от нее пользы никакой. Найти инструкцию для настройки кодировщиков и сам PathKey можно здесь — ru.twitch.tv/broadcast
Почему же такая открытая ненависть к Twitch.TV, когда все легко и просто? Ну на это есть несколько причин. Во первых, политика Twitch'а очень динамична. Буквально полгода назад администрация Twitch отказывала в broadcast'е при битрейте от 2500Kbit. Стоить заметить что вести стрим в 1080р в 2500Kbit черевато, т.к. эффект мозайки очевиден от нечего делать. Выглядело это примерно так. Вы выставляли битрейт 3500 или выше и ваша трансляция показывала черный экран. В Dashboard'е можно было прочитать причины, по котором сейчас не ведется трансляция. Пожалуй это одна из самых главных причин, из-за которой Твичу я не доверяю. Сейчас максимальный битрейт установлен на отметке 3500Кбит/с. Если поставить битрейт выше рекомендуемых настроек, то можно наткнуться на дропы кадров и «стабильность».
Вторая причина по которой я хотел бы раскритиковать Twitch, так это поддержка новых стримеров. Ее нет. Стоит заметить, что стримы в 10 человек не отображаются даже в поиске, партнерство с администрацией говорит уже о том, что конкурировать практически невозможно. Если на YouTube вы можете сами продвигать различными средствами собственные стримы, то здесь вам уже придется из кожи вон лесть чтобы заполучить зрителей.
Честно, мне эта тема немного противна, поэтому я просто приведу список.
Минусы:
  • Динамичное изменение политики сервиса в непонятные стороны
  • Стабильность серверов оставляет желать лучшего
  • Dashboard пытается копировать YouTube, но смысла от него мало
  • Нет поддержки новых стримеров
  • Коммерческая основа доминирует по всем аспектам над обычными пользователями
  • Нет поддержки зрителей с ограниченными возможностями интернет-канала

CybergameTV
Поделка наших программистов. Стоить отметить что это копирка Twitch'а, но уже к более человеческим ценностям. Тут нет жесткого доната, админы добры, да и вообще понифаги.
Спойлер
Главной особенностью станет то, что никто не ограничивает вас в настройках, но и дополнительно мотивируют платой за рекламу. Вся необходимая информация находиться в кабинете пользователя, в котором можно так же прочитать инструкции по настройке вещания. Все тот PathKey, который запускает ваш стрим.
Минусы:
  • Низкая популярность сайта
  • Нет поддержки зрителей с ограниченными возможностями интернет-канала
  • Российское законодательство
  • Некорректное управление с записями стримов
Плюсы:
  • Поддержка новых стримеров
  • Запланированные стримы, вне зависимости от коммерции, есть в расписании на главной странице
  • Стрим без ограничений по настройкам
  • Способность заработка без головной боли с юридической частью
Если честно, то пока и я сам мало что могу рассказать о сайте. По мне так это идеальная площадка для русского сегмента, которая уже дальше для себя решит в какой монастырь идти со своим уставом.

YouTube
Ну и пожалуй мы приехали к самой новой платформе на рынке. Youtube стал предоставлять стримы относительно недавно и уже успел завоевать популярность и отбить большую часть рынка. К сожалению, со стримами на YouTube дела обстоят сложнее. Начнем пожалуй с самого начала. Мы зарегистрировались в сервисах Google и создали канал. Он пустой, зрителей нет, подписчиков тоже, прав тоже нет.
Для начала стоит обратить внимание на дополнительные функции вашего канала, которые внезапно скрыты и не выделены огромной кнопкой. Найти их можно в настройках YouTube или www.youtube.com/features
Спойлер Итак мы понимаем что заспамить Youtube с трансляцией порнографии невозможно, но не все потеряно. Для начала давайте подтвердим что мы не школьник и подтвердим номер мобильного телефона. После подтверждения нам дается ряд функции, которые раньше были доступны лишь для коммерческих каналов, но функция трансляций остается закрытой. YouTube не объясняет зачем это сделано и как разблокировать, но условия просты и достижимы. Нужно набрать 30 подписчиков.
Данное условие связано видимо с тем, чтобы не терять основную функцию портала — видеохостинг. Если люди не будут делать кратковременные ролики, а делать многочасовые стримы, которые и так никому не интересны, то сайт утратить популярность, которая росла с 2005 года. Так или иначе, по достижению 30 подписчиков у нас открывается возможность проводить трансляции. После активации функции нам станут доступны мероприятия в прямом эфире — это и есть стримы. Правила просты, создаете как видео, задаете время, даете объявление по соц. сетям, задаете условия проведения и если есть желание, то можно попробовать заработать на рекламе, которая будет идти при заходе на страницу стрима.
После того как вы создали трансляцию, вам открывается страница с настройками кодирования. Здесь все просто, у YouTube есть простой набор конфигов с желаемым для вас битрейтом или разрешением и выдает уникальный streamkey (Название потока) для трансляции. Да, не обязательно отдавать общий ключ от стрим канала стримеру, достаточно дать ключ на время стрима, который вы собираетесь провести. Инструкций, к сожалению нет, но даже после этой статьи, там должно показаться «сделано для людей». Так и есть, там действительно легко до безобразия. Хочешь рекламу? Вставляй. Хочешь объявление? Вставляй! Хочешь свистелку перделку? Вставляй!
Одной из главной функцией стримов, которой нет у аналогичных сервисов, так это «Магнитофон». Всю трансляцию от начала до конца можно смотреть как обычное видео. Если вы пропустили момент, из-за которого дальше смотреть просто жаба душит, то вы можете отмотать назад трансляцию и заного просмотреть момент, а затем вернуться к трансляции обратно. Описывать все нет смысла, поэтому приведем простой список.
Минусы:
  • Есть проблемы с объединением видео, после разрыва сигнала с сервером
  • Долгий запрос перед началом стрима
  • Авторское право (Его очень легко нарушить)
  • 30 кадров максимум
Плюсы:
  • «Магнитофон»
  • Умеренная в коммерческом плане поддержка стримеров и каналов в целом
  • Свободная тематика
  • Заработок с рекламы
  • Стабильные сервера
  • Поддержка трансляций во всех доступных разрешениях (Дополнительное кодирование берет на себя YouTube)
Примеры трансляций в 1080p — www.youtube.com/watch?v=5zGy3qepekk и www.youtube.com/watch?v=PHOgiz07mxI


Ну вот и пожалуй все. Добавляйте свои любимые игрушки в источники стрима и бегом стримить Minecraft. Знаю что за стену текста меня никто не поблагодарит, да и мало поймут, но как же вы немного надоели с «ХОЧУ СТРИМИТЬ ПОМОГИ НАСТРОИТЬ». Кому нужна все таки помощь с настройкой каналов или стримов, обращайтесь в комментариях или ЛС. Не откажем и на юг не пошлем.

P.S. Очень боялся нажимать кнопку «Опубликовать», но все таки нажал.

11 комментариев

Позновательно. Лично я, когда мне надо было стримить рабочий стол и звуковую дорожку с микрофона (такое, правда, было всего однажды), делал обычный поток VLC, который ретранслировался тем же VLC, пущенном на ВМ на Азуре (6600 халявных рублей на месяц пользования, хули не юзать). Вот такой вот кустарный способ…
viperserj
0
Очень интересно. Такой вопрос — некоторые сервисы, скажем livestream, предоставляют свои программы, делающие захват рабочего стола/игры и сжимающего информацию в тот же H.264 своими средствами. Поможет ли такой программе OBS, или третье колесо не нужно, со сжатием все и так хорошо, а задержки пинга происходят из-за малой скорости интернета/слабого железа?
Также интересно имел ли автор дело с какими-либо площадками, помимо указанных трех. Просто со стримами приходится работать не редко, по большей части захват рабочего стола, хотя помню некоторое время и бродкастом игр баловался. Заодно думаю в скором времени новый ПК собирать, хотелось бы чтобы железо позволяло периодические стримы, так что обязательно приму указанную здесь информацию к сведению.
InvisiblePony
+3
С одной стороны, программы которые предоставляет сервис должны быть лучше, но если все таки сервис предоставляет данные для стрима в альтернативных программах, тот же OBS, то я не вижу смысла использовать их софт. Технология та же, кодирование одинаковое, в обиходе возможно не использовалось. Я бы пользовался, если бы была поддержка UVD или CUDA.
Sparin
0
про твич:
Придирка про невозможность стримить 1080р 3500+ битрейт, если честно кажется надуманной. У меня постоянно на втором мониторе что-то оттуда работает, и никогда не было проблем с мозаикой, распаданием и прочим на разных каналах.
Стабильность серверов оставляет желать лучшего

что особенное видимо значит?
Потому что вот этот www.twitch.tv/lethalfrag/ отшельник стримил 2 года каждый день по 5-6 часов, и только 1 раз за 2 года не удалось постримить. Т.е. не было проблем, которые не решались бы.

Еще в минусы твича — мне кажется или там только игрушечки можно стримить?
Zayka
0
Кажется.
Gwiny
0
Zayka
0
Окей, тогда эти ограничения просто никто не соблюдает.
Gwiny
0
Ну да типо того

www.twitch.tv/lethalfrag/c/3224853
Zayka
0
Администрация оставляет за собой дропать соединение или дистабилизировать соединение, с целью поддержки тех же
Subscribe $4.99
Sparin
0
Тьфу, винда only, а ведь чуть плюс не поставил.
andreymal
-1
Sparin
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.