Я давно хотел собрать воедино всю ту информацию, которую накопал о процессе стриминга на твиче или ютубе за последние полтора года. Мой родной Geektimes издатели пристрелили, этому материалу на Хабре не особо место, так что я здесь. Да, это была ремарка для тех, кому мой никнейм показался знакомым по другому ресурсу.
По всей видимости, статья получится большая, так что устраивайтесь поудобнее. Мы рассмотрим все стадии и аспекты стриминга, начиная от работы на самой простой «средненькой» станции и до обмазывания стрим ПК, пантографом и хромакеем. Вообще это был увлекательный путь: стриминг на процессоре, стриминг через видеокарту, потом стриминг с двух видеокарт (sic! расскажу подробно) и, в итоге, сборка стрим ПК.
Сегодня я расскажу про стрим с одного ПК. Если статья зайдет — продолжим и про конфиг с двумя машинами. Ну, поехали.
У многих игроков время от времени возникает желание начать самим стримить что-либо. Кто-то очень хорош в игре, кому-то хочется пообщаться с чатом. Я вот из последних. Началось все полтора года назад, осенью 2018 года, когда я решил для собственной коммуночки постримить Stellaris и попутно пообщаться, благо многие люди из моей закрытой конференции проявляли интерес к этой игре. На тот момент я как полгода пересобрал свой ПК и был им достаточно горд. Давайте посмотрим на конфигурацию:
- шестиядерный i7-8700 + мать на чипсете z370 от AORUS;
- 16 Gb 3200 Mhz RAM;
- GTX 1060 6 Gb Xtreme Edition (это уже снятая с продажи дура на 3,5 слота с разогнанными на заводе частотами до уровня практически 1070);
- SSD m.2 samsung Evo 950.
Сразу скажу, что эта конфигурация для стримов сейчас слабовата.
В 2018 году все стримили на процессорах через x264 и были более-менее счастливы. Мой камень под требования к стримингу того времени подходил как нельзя лучше. Первый стрим прошел сразу в 1080р на veryfast пресете OBS и тогда же от меня потребовали веб-камеру. Стоила она мне примерно 2000 рублей и это были первые траты в череде бесконечных расходов на стриминг. Но сейчас не об этом. Поговорим о настройках OBS, потому что мне до сих пор приходится копаться в недрах интернета, чтобы выудить хоть какую-нибудь информацию.
Бесконечная борьба с OBS и как правильно настроить эту программу
Сейчас в OBS есть два основных типа кодировщиков: классический x264 и NVENC (new), выпущенный +- год назад совместно с командой NVIDIA. Начнем с азов.
x264
Кодировщик x264 работает за счет ресурсов центрального процессора, причем любого производителя, будь то Intel или AMD. Для персональных компьютеров до недавнего времени были доступны пресеты кодирования не ниже Medium:
Теперь давайте проясним раз и навсегда, что значит «(выше = меньше)» на скрине выше. Чем быстрее использование CPU, тем меньшую нагрузку он испытывает при рендере кадра. То есть условный ultrafast запустится почти на чем угодно, но так как ресурсов на рендер было затрачено минимально, то и качество картинки будет соответствующее. Хорошая картинка с минимумом артефактов получается на пресетах Medium и Slow — это пороговые значения для современных персональных компьютеров. Для рендера в Slow вам понадобится, по моим прикидкам, Ryzen 3900X и самая быстрая память к нему, но не факт, что он вытянет 1080р качество. Для стрима в Slower-Placebo нужен полноценный сервер с Threadripper или топовым Xeon, возможно, с двумя такими процессорами. Так что Medium — наш психологический порог.
При этом нужно понимать, что при рендере в Medium в качестве даже 720р потребление вашего CPU из линейки i7-8xxx и выше (или Ryzen 5-7 2xxx) составит не менее 40-45% с высоким приоритетом самого OBS. Любое другое приложение, например, CPU-зависимая игра вида CS:GO, получит либо просадки FPS, либо вызовет потерю кадров при рендеринге в OBS. Но есть и игры, где основную нагрузку испытывает только видеокарта, так что для каждой из них значение этого пресета надо подбирать отдельно.
Битрейт
Теперь поговорим о битрейте.
Вики говорит: Битре́йт (от англ. bitrate) — количество бит, используемых для передачи/обработки данных в единицу времени. Битрейт принято использовать при измерении эффективной скорости передачи потока данных по каналу, то есть минимального размера канала, который сможет пропустить этот поток без задержек.
Но в нашем случае битрейт — это степень сжатия потока. Причем степень эта обратнопропорциональна качеству. Чем ниже битрейт, тем больше сжатие и тем больше потери качества на выходе.
Сейчас пороговые значения Twitch по битрейту для не-партнеров (то есть для ребят без галочки и онлайна 100+) составляют 6000 kbps, а для партнеров — 8000 kbps. На ютубе этот параметр повыше и, вроде как, составляет 8000-10000 kbps для кого угодно.
Битрейт крайне важен, потому что он наравне с пресетом кодировщика определяет качество картинки, которую вы отправляете на стрим. Чем выше битрейт — тем лучше.
Для примера: картинка в пресете Medium с битрейтом 1500 будет намного хуже, чем картинка в Fast с битрейтом 6000, хотя вроде как, мы кодируем с большей нагрузкой на CPU. При этом параметр битрейта дает свою нагрузку на кодировщик, то есть это еще одна обуза для процессора. Таким образом, при подборе параметров кодировки вам нужно найти оптимальный пресет для максимального битрейта выбранной вами площадки.
При этом выставлять максимальный битрейт, то есть 20000 вместо 6000 бесполезно: на сервера Твича пролезет только 6000, все остальное канет в Лету. Задирать битрейт имеет смысл только при записи VOD-ов или других видео со своего ПК.
В параметр «Управление битрейтом» лучше не лезть. Достаточно знать, что CBR — это значение постоянного битрейта и все площадки дают характеристики своих серверов именно в CBR. Другие виды битрейта стоит изучать, если вы занимаетесь видеопродакшеном, но, в таком случае, вы должны знать в этой теме намного больше меня. А я тут про стриминг рассказываю.
Что такое «Профиль»
Под пресетами использования ЦП есть параметр «Профиль», смысл которого понимают не многие. Олды-пираты знают, что у транскодера х264, как и у H.264, есть целая уйма параметров того, как он рассчитывает картинку и потом ее собирает. Чтобы не взрывать мозг школьникам и простым работягам, разработчики упаковали часть этого зоопарка в три простых слова: «baseline», «main» и «high».
Интуитивно понятно, что лучше использовать параметр «High», но что это значит?
В «Baseline» поддерживается только ограниченное подмножество методов транскодирования, что проще для процессора и требует меньше вычислительной мощности. Следовательно, этот профиль подходит для маломощных устройств или для процессоров с низким энергопотреблением и т.д. и т.п.
Профиль «Main» поддерживает большинство методов транскодинга x264, так что и жрет он больше памяти и вычислительных мощностей процессора. Основной профиль обычно используется средними или специальными устройствами, типа ТВ-приставок и т.п.
А вот профиль «High» поддерживает практически все методы транскодирования x264. Он предназначен для создания HD (720p) и FullHD (1080р) потоков или записей, а также для вещания уровня Blueray и HD Satellite. Именно профиль «High» обычно поддерживается программными декодерами, к которым относится OBS.
Так что если собираетесь стримить в хорошем качестве — выбираем «High».
«Настройка»
Ну и последний, но самый коварный параметр кодировщика x264 — «Настройка». В нем спрятаны те параметры x264, которые не вошли в тройку «Baseline», «Main» и «High».
И тут мы сталкиваемся с мистификацией уровня «Ежик ест яблоки и добрый», хотя на самом деле это жестокий всеядный хищник, который устроит мышам, змеям и другим гадам на вашем участке форменный Вьетнам с гуками и волчьими ямами.
ВО ВСЕХ «МАНУАЛАХ» СОВЕТУЮТ ДЛЯ СТРИМОВ ИСПОЛЬЗОВАТЬ ПАРАМЕТР «Zerolatency» или «Fastdecode». И ЭТО ОШИБКА.
Но что на самом деле они делают, если задуматься? Они оба ограничивают время, которое процессор может рендерить кадр и потом сжимать его для передачи на сервер. А что получается при спешке? Правильно, более простые алгоритмы сжатия и кодирования, что приводит к шакализации изображения на ровном месте.
Вообще, все параметры из «настройки» — скорее про запись видео, чем про стриминг. Поэтому самым правильным является следующая модель поведения: ничего не трогать и оставить это поле пустым. Именно без каких-либо настроек вы получите наиболее чистую картинку.
Стрим в 1080р не всегда хорошо
Из информации выше можно сделать простой вывод: стрим в 1080р не всегда будет выглядеть лучше, чем стрим в 720р.
В настройках OBS есть прекрасная вкладка «Видео», в которой вы выставляете, с какого разрешения вы забираете картинку с экрана и в каком разрешении получите результат вашего транскодирования. Стрим в 1080р — это серьезная нагрузка на CPU, да и в фуллскрине стримы смотрят нечасто. Так что лучшим выбором является либо HD-качество 720р, либо промежуточное 900р.
С фильтром масштабирования все просто: лучший — Метод Ланцоша с 36 выборками. Все остальные будут квадратить изображение в той или иной степени.
Внимательный пользователь заметит, что в настройках OBS нет качества 900р, идет 720, потом 864р и потом сразу 1080р.
На самом деле это поле можно заполнять вручную и указать любое значение, хоть 920р, хоть 777р, главное соблюдать соотношение сторон 16:9, чтобы вашу картинку не растянуло в рандомном направлении:
Стрим менее, чем в 60 FPS в 2020 году — моветон. И, как можно догадаться, высокие значения FPS дают дополнительную нагрузку на процессор. Конечно, некоторые новички настраивают стрим так, что у них идет картинка в 1080p на быстром пресете в 30 FPS, но смотреть это невозможно — нет плавности. Хотя их оборудование позволяет стримить в 720р и 60 FPS с Ланцошем 36. Тут опять надо экспериментировать, так что рекомендую завести фейковый канал и отсматривать, что происходит на экране при тех или иных настройках.
Его величество NVENC
NVENC — это одновременно и кодировщик, и чип на видеокарте NVIDIA. Но не надо путать его с графическим процессором и CUDA-ядрами. NVENC-чип — это отдельная приблуда на текстолите, у которой есть только одна задача. И эта задача — рендеринг.
То есть, покупая современную видеокарту от NVIDIA в комплекте с ней идет и встроенный кодировщик, а с выпуском нового кодека NVENC (new), он еще стал и лучше работать.
Зачем нужен был новый NVENC и почему он появился около года назад? Ответ прост: серия RTX.
Серия видеокарт RTX от NVIDIA стали оснащаться чипами NVENC нового поколения, лучше, чем на серии GTX 1xxx. Причем по заверениям производителя, чипы NVENC на всех карточках RTX одинаковы, как на 2060, так и на 2080 Ti Trio.
Вопрос в том, что при всей крутости NVENC, он все равно обращается к CUDA-ядрам видеокарты, но отбор мощности, на самом деле, невелик. Для моей GTX 1060 Xtreme стрим в 720р с ланцошем 36 и битрейтом 5500 создавал нагрузку в 9-11% от всей мощности видеокарты.
На серии RTX чипы NVENC намного мощнее. Фактически, RTX 2080 Ti Trio 11 Gb способна выдавать 1080p стрим в 8000 kbps битрейте на максимальных пресетах видеокарты, что будет очень близко к качеству картинки через процессор на пресете Medium. При этом карта толком этого не почувствует.
При всей самодостаточности NVENC, у него есть несколько слабых мест:
В случае одновременной отрисовки на мониторе, и рендере на NVENC динамических сцен, приоритет, ожидаемо, отдается монитору, так что даже на 2080 Ti картинка в слишком быстрых моментах или при взрывах может начать сыпаться;
специальный параметр «предугадывание», который создает дополнительные бета-кадры, с высокодинамичными сценами не работает, о чем втихаря заявляют и сами разрабы карточки.
В остальном настройки NVENC даже проще, чем у х264:
Только в случае с NVENC разработчики не стали дразнить пользователей и пресет «Макс. качество» доступен любому владельцу более-менее мощной видеокарты, начиная где-то с GTX 1050 и выше. Дальше все зависит исключительно от нагрузки на саму видеокарту.
Про B-кадры отдельно расписывать не буду, скажу лишь то, что это кадры повышенного разрешения, которые встраиваются в поток для того, чтобы увеличить четкость картинки. Они нужны, обычно 2 кадра на цикл и на этом все.
С 1080р и вкладкой «видео» у NVENC примерно такие же отношения, как и у х264. При этом стриминг через карту намного комфортнее и проще. Так что если хотите хорошего качества — берите RTX 2080 Ti Trio 11 Gb и закрывайте этот гайд.
А теперь начинается мякотка.
Приоритет OBS, скорость захвата игры и игровой режим в Windows
В этой подглаве я объединил три популярные проблемы.
Многие, в том числе и я, сталкивался с лаганием стрима, когда с игрой все хорошо. Очень часто в этом виноват недостаточный приоритет процесса OBS, ведь ему надо работать без перебоев в режиме реального времени.
Один из вариантов — повысить приоритет процесса в настройках самого OBS до «высокий». И чаще всего это решает большинство проблем с ресурсовыделением:
Но есть в Windows еще и подводный камень, который должен помогать геймерам, но подбрасывает головную боль. Прячется ОНО вот тут:
Что это такое и чем оно не угодило стримерам? По факту, игровой режим — это полицай, который винтит все процессы кроме процесса запущенной прямо сейчас игры на переднем плане. То есть, когда OBS пытается отобрать хоть сколько-нибудь пусть и простаивающих мощностей, игровой режим начинает ограничивать его. В некоторых случаях эта скотина и вовсе резервирует чуть ли не 99% видеокарты под игру, нагло показывая фиги всем остальным.
Отключение игрового режима выгоняет этого поехавшего из хаты и позволяет OBS спокойно работать. И тут уже все зависит от ваших настроек и конфигурации ПК, будет ли OBS и игра жить вместе, либо нет.
В некоторых случаях рекомендуется вручную внести в Windows высокую производительность графики в OBS, если вы стримите через NVENC:
Еще один момент — параметр скорости захвата изображения самим OBS. Прячется в настройках захвата в сцене:
Эту настройку вообще не рекомендуется трогать, если у вас нет проблем с производительностью. Мне же пришлось с ней познакомиться, так как я стримил крайне прожорливый Apex Legends. Смена скорости захвата на «Быстрейшая» позволила избавиться от лагов на стриме, но немного ухудшила качество картинки.
Если у вас есть такие же проблемы, то есть стрим дергается — советую обратиться к этому параметру.
Далее расскажу еще пару лайфхацков для начинающего стримера.
Как пускать музыку на стрим и самому ее не слышать
А теперь плавно перекатываемся к теме звука. OBS позволяет подключать множество источников медиа к себе, в том числе определенные устройства воспроизведения звука.
Многие хотят, чтобы зрители в фоне слушали музычку, когда на стриме ничего не происходит или стример молчит, но самому автору эта музыка может мешать.
Большинство туториалов и гайдов сводятся к тому, что вам потребуется звуковая карта или voicemeter Banana — ПО, чтобы разобраться в котором надо быть Илоном Маском. Во всяком случае, я не разобрался.
На самом деле со музыкой есть крайне простое и элегантное решение. Нам потребуется:
- программа Virtual audio cable;
- плеер AIMP;
- полграмма мозга.
Дальше все до смешного просто.
Устанавливаем Virtual audio cable и монтируем его в систему. Включаем виртуальный кабель в аудиоустройствах. Выглядит это так:
А теперь следите за руками. AIMP — очень олдовый плеер и в отличие от зуммерских прилаг с одной кнопкой, там под капотом скрыт целый мир. Например, AIMP умеет выводит звук на конкретное устройство системы, то есть имеет собственный конфигуратор устройств.
Видите все мои устройства уже в AIMP? Тут есть и Line 1 нашего виртуального кабеля. А дальше все элементарно. Пускаем звук из AIMP на этот кабель, а сам Line 1 добавляем как звуковое устройство в OBS:
Вот и все. Вы великолепны. Звук идет по виртуальному кабелю прямиком из AIMP в OBS мимо ваших наушников. При этом сам AIMP — это целый кухонный комбайн. Он умеет выгружать название трека и артиста в файл, который можно потом забирать в OBS в полоску «сейчас играет», и даже подключить в него плейлист из Яндекс.Музыки и, вполне возможно, из Spotify (но я пробовал только с Яндексом), который можно будет слушать онлайн.
Если захотите, могу написать про AIMP и стриминг отдельный туториал, но вот фишка с виртуальным кабелем — основная. И что самое важное, тут соблюден принцип бритвы Оккама: самое простое решение самое правильное. Никаких микшеров и плясок с бубном. Две элементарные софтины и три клика мышкой, справится даже моя мама, если ей подробно объяснить.
Мониторы разных герцовок и просадки FPS
Рано или поздно стример покупает себе второй монитор, чтобы мониторить OBS и не читать чат с мобилки. Чаще всего вторым монитором становится старый на 60 Hz, а на замену ему покупается новенький на 144, 165 или 240 Hz.
И вот тут начинается гребаная мистика.
Сперва драйвер NVIDIA очень любит играть в строительство коммунизма и принудительно сбрасывает герцовку на «общую», то есть на 60 Hz. Тут нам поможет создание кастомного разрешения с нужной герцовкой для нового монитора в панели управления NVIDIA:
Внутри создаем пользовательское разрешение с нужной частотой и применяем к нужному монитору.
Если у вас есть встроенное видео от CPU, то можно перебросить второй монитор на 60 Hz на него, но тут будьте аккуратнее: на работу этого экрана вы задействуете ресурсы CPU, что может повлиять на стриминг в x264.
Второй прикол с системой из разных герцовок: странное поведение OBS, точнее его странное влияние на второй монитор. Некоторые пользователи с разногерцовыми экранами, в том числе и я, сталкивались с тем, что если OBS находится на втором экране 60 Hz, то в игре на первом экране тоже становится 60 Hz. Причины такого поведения — это как вопрос об НЛО, то есть никто точно не знает, что происходит. Единственный фикс, который я нашел в сети и который реально работает — перенести OBS на экран с наибольшей герцовкой, то есть под игру. Тогда никаких просадок не будет.
Второй вариант для буржуев: иметь мониторы с одинаковой герцовкой, тогда OBS работает корректно.
Стрим с двух видеокарт
Если вы в какой-то момент решили обновить свою видеокарту на модель поновее, но ограничены в деньгах и не можете позволить себе RTX 2080 Ti и у вас игровая мать с двумя PCI-e, не спешите выбрасывать старую карточку.
Так получилось, что я обновил свой ПК и купил RTX 2060 Super, но для стрима Apex Legends и одновременной комфортной игре в 144 FPS речи не шло. Так что я пошел извращенным путем и научил OBS жрать ресурсы старой GTX 1060, которую я оставил во втором порте PCI-e.
Сразу говорю, что кейс странный и работает не на 100%, но позволяет снизить нагрузку с основной карты примерно вдвое.
В настройках панели NVIDIA можно задать приоритеты использования CUDA-ядер и устройств для рендеринга в отдельных приложениях. Точно так же, при использовании кодировщика NVENC в OBS можно указать, какую карточку использовать. Значение 0 — первый (верхний) слот, значение 1 — второй (нижний слот) PCI-e.
Да, сразу две карточки разных моделей не могут работать вместе над одним процессом, но они связаны между собой платформой и могут работать над разными процессами, а настройки OBS позволяют выполнить подобное подключение. Так что если вам важен перфоманс системы в играх и есть «лишняя» видеокарта — то это ваш выбор. Фактически, на вторую карту будет переложен весь энкодинг, то есть упаковка картинки, которую будет отдавать ей основная карта, на которой крутится игра, через захват экрана OBS. Это, скажем так, промежуточное решение между стримом на одной видеокарте и полноценным стрим ПК.
Что нужно знать о хромакее
Первое — хромакей это прикольно. Второе — это просто. Третье — это дешево.
Ну, вообще как бы профессиональный хромакей стоит, как маленький паровозик, но при наличии шуруповерта, четырех палок и магазина тканей можно уложиться где-то в 1400-1800 рублей с учетом проезда. Как скрутить хромач в домашних условиях можно нагуглить в сети, там просто рама с упорными уголками и натянутая сложенная в несколько раз зеленая матовая ткань.
А вот с технической точки зрения тут все немного интереснее.
Первое — для хромача подойдет любая HD-вебкамера, то есть буквально любая, что есть сейчас на рынке. Моя вебка Logitech c270 имеет матрицу 1,3 Мп, но отлично справляется. Так что забейте болт на «стримерские» вебкамеры за 100500 рублей, хотя они дают картинку чуть лучше, но своих денег не стоят. Для хромакея намного важнее свет.
Вот со светом все плохо. Если освещенность полотна недостаточна, то вы не сможете выставить цветовой ключ правильно, то есть где-то что-то будет рябить. Я советую использовать два источника света для хромакея: настольную лампу, которая будет светить в стену перед лицом и давать рассеянный свет на вас и хромач, и строительный софит на 15-20 Вт, который вы поставите прямо под хромакеем, у себя за спиной. Также потребуются темные шторы или стримы в ночное время, потому что солнечный свет — злейший враг хромача.
Если вы работаете с Adobe Premier или Sony Vegas и сейчас криво ухмыльнулись, то у меня есть для вас новости: OBS в плане хромача намного приятнее этих программ. Графические редакторы от Sony или Adobe требуют почти идеально ровной поверхности и света, иначе начинают «фонить». Но при этом дают очень хорошую замену фона.
OBS же — программа для работяг. Ему для создания фона хромакея (то есть чтобы убрать его) достаточно кое-какого света, чтобы хромач в целом попадал в полтора-два тона. Потом на глаз выбирается цвет основы и все, вы великолепны и висите в воздухе.
Ну, на этом +- все. Задавайте свои вопросы и говорите, нужна ли статья по стриму сразу с двух ПК. Там есть моменты по конфигурации и как минимум проблемы со снятием звука, которые я элегантно решил без внешних звуковых карт и прочего стаффа. Там я тоже добился максимально простых и элегантных решений в вопросах задержки и рассинхрона звука. Ну и конечно же отдельно расскажу за карты захвата, тут я тоже хапнул горя.