Петр Семилетов

Настройка видеотрансляций в Ютуб под Линукс


Передо мною возникла задача - делать лайв-стримы игр в Ютубе. А именно - игровое видео и звук брать из окна эмуляторов Mednafen и DOSBox, а также показывать свою рожу через вебкамеру где-то в углу экрана, да захватывать звук с микрофона.


НАСТРОЙКА ЮТУБА


Со стороны Ютуба дело обстоит просто - вы идете там в "Мой канал", "Менеджер видео" (в горизонтальном меню), потом в меню слева в один из разделов - "Прямые трансляции", где внизу в разделе "Настройка видеокодера" получаете "Название/ключ трансляции" - числовой код, который надо будет использовать в программе-вещателе. Всё, больше тут нам делать нечего. Трансляция, будучи запущенной, станет доступна на вашем канале, и по ссылке вида https://www.youtube.com/user/имя_пользователя/live, а позже появится еще в виде записи в Менежере видео, где вы сможете расшарить на публику.


НАСТРОЙКА ИСТОЧНИКОВ


Откуда мы будем захватывать видео и звук? Всё не так просто, как может показаться.


НАСТРОЙКА ЗАПИСИ ЗВУКА ИЗ ЭМУЛЯТОРОВ


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

Звук из эмуляторов надо перенаправить на виртуальное ALSA-устройство, с которого потом мы сможем записывать этот звук в программе вещания.

По умолчанию модуль такого устройства не установлен. Его надо подключить командой


modprobe snd_aloop


Куда прописать команду подгрузки модулей, зависит от вашего дистрибутива. Например в Mageia я добавил файл "soundstuff" в каталог /etc/modprobe.preload.d, а в самом файле прописал:


modprobe snd_aloop


А также в /etc/modprobe.d/00_modprobe.conf я добавил строчку:


options snd-aloop pcm_substreams=1


Для быстроты можете под рутом просто в консоли дать команду


modprobe snd_aloop pcm_substreams=1


Но это будет работать только до первой перезагрузки, если вы ничего в конфиги не прописали.

После установки модуля должна появиться виртуальная звуковая карта Loopback. Она видна в микшере, а по-быстрому можно проверить ее в консоли командой:


aplay -l


Будет примерно такой вывод:


**** List of PLAYBACK Hardware Devices ****

card 0: M2496 [M Audio Audiophile 24/96], device 0: ICE1712 multi [ICE1712 multi]

Subdevices: 1/1

Subdevice #0: subdevice #0

card 1: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog]

Subdevices: 1/1

Subdevice #0: subdevice #0

card 1: PCH [HDA Intel PCH], device 1: ALC887-VD Digital [ALC887-VD Digital]

Subdevices: 1/1

Subdevice #0: subdevice #0

card 3: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]

Subdevices: 1/1

Subdevice #0: subdevice #0

card 3: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]

Subdevices: 1/1

Subdevice #0: subdevice #0


Тут видно, что у меня две аппаратные звуковые карты и одна виртуальная. Карты пронумерованы от нуля до двух.

Жесткий порядок нумерации карт задается в

modprobe.conf, например в моем случае так:


options snd slots=snd_ice1712,snd_hda_intel,snd-aloop,snd_usb_audio


Таким образом у меня:


card 0: M2496 [M Audio Audiophile 24/96] - карта номер 0, карта PCI-слоте


card 1: PCH [HDA Intel PCH] - карта номер 1, встроенная звуковуха


card 2: Loopback [Loopback] - виртуальная карта.


Обращаем внимание на то, что у последней есть два устройства, 0 и 1:


card 2: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]

Subdevices: 1/1

Subdevice #0: subdevice #0

card 2: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]


При использовании в программах к ним надо обращаться как plughw:2,0 и plughw:2,1. Звук, выводимый на plughw:2,0, молча перебрасывается на plughw:2,1 - откуда его можно записать (захватить) любой программой.

На колонки он не поступает (но идет в трансляцию, если его туда захватывать).

Существуют способы слышать звук и одновременно перебрасывать его через виртуальную карту, однако у меня это толком не получилось.


Теперь настроим mednafen для вывода звука на это виртуальное устройство.

В файле ./mednafen/mednafen-версия.cfg делаем правильные настройки:


sound.buffer_time 24

sound.period_time 0

sound.rate 48000


sound.driver alsa


Теперь самое важное:


sound.device устройство


В качестве устройства мы можем прописать например


sound.device plughw:0,0


И звук будет воспроизводиться звуковой картой 0 устройством 0, в моем случае это основная карта. Если бы я хотел пускать звук через встроенную, я бы написал:


sound.device plughw:1,0


А для посыла на виртуальную карту, как вы догадались, надо:


sound.device plughw:2,0


Двойка - у вас может быть другое число.


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


Теперь настроим DOSBox.


Для вывода звука он использует звуковую подсистему SDL, а та посылает звук на звуковое устройство по умолчанию.

Поэтому его надо временно (на сеанс работы DOSBox) переопределить, задав в качестве устройства по умолчанию нашу виртуальную карту. ее порт номер ноль. Для этого запускаем dosbox командой:


AUDIODEV=hw:2,0 dosbox


То есть мы предваряем имя программы установкой переменной окружения AUDIODEV.



НАСТРОЙКА ЗАПИСИ ЗВУКА С МИКРОФОНА


При использовании встроенной звуковой карты, на "стационарных" компах, в отличие от ноутбуков, обычно есть два разъема для микрофона - передний (FRONT MIC) и задний (REAR MIC). В микшере (любом - alsamixer, QasMixer, какой угодно) надо выбрать правильный порт микрофона в качестве Input source (входной источник). Ползунком Front/Rear Mic Boost управляем усилением уровня микрофона. Громкость и усиление другого микрофонного порта приглушаем. Порты Capture оставляем включенными, но уровень Line Boost и уровни записи Capture 1, Capture 1 оставляем минимальными.

Параметр Loopback Mixing ставим в Disabled.

Всё.



НАСТРОЙКА ВЕБ-КАМЕРЫ


Если у вас старая вебка, скорее всего при включении какой-нибудь тестовой программы для веб-камеры вы увидите тупо зеленый экран, или серый экран, или как повезет.

Чтобы камера заработала, надо где-нибудь в системном конфиге прописать:


export LD_PRELOAD=/usr/lib64/libv4l/v4l1compat.so


Либо запускать нужную программу так:


LD_PRELOAD=/usr/lib64/libv4l/v4l1compat.so программа


Путь привожу согласно моему дистрибутиву.


Для настройки и тестирования вебки я советую утилиту:


qv4l2


Запустив ее и нажав на "воспроизведение", вы можете поиграться с настройками вебки и посмотреть, на что они влияют. Есть еще подобная программа - v4l2ucp.

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

Итак, если картинка темная, обращаем внимание на вкладку User Controls, параметр Power line frequency, там есть три пункта:


Disabled

50 Hz

60 Hz


Ставим в 50 герц - и картинка становится действительно нормальной по яркости и контрасту! Но как сохранить установку этого параметра? Из qv4l2 никак.

Надо в какой-то системный конфиг прописать:


v4l2-ctl -c power_line_frequency=1


При этом power_line_frequency=значение, а значение может быть:


0 - выключено

1 - 50 герц

2 - 60 герц


С картинкой разобрались.

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

Теперь у нас почти все готово для начала вещания онлайн.



НАСТРОЙКА OBS


OBS - Open Broadcast Studio (https://obsproject.com/download), свободная программа для видеовещания на разные серверы вроде Youtube или Twitch.

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

То, что вы видите на экране сцене - будет видеть и зритель.


Под областью сцены находятся списки:


Сцены - список созданных вами сцен, то есть наборов "наполнения" экрана.

Источники - набор источников для каждой сцены.

Микшер - микшер звуковых источников, где настраивается громкость каждого источника и другие его параметры.

Переходы между сценами - эффекты, отображаемые при переключении сцен.


По умолчанию у вас всего одна сцена.

Но прежде чем мы приступим к ее наполнению, настроим сам OSB, для чего существует кнопка НАСТРОЙКИ.


Попадаем в окно со вкладками.


На вкладке Вещание выбираем, в простейшем случае:

Сервис = YouTube / YouTube Gaming

Сервер = Primary YouTube ingest server

Ключ потока = тот "Название/ключ трансляции", который вы получили на странице Ютуба.


На вкладке Вывод выбираем "Режим вывода" - "Расширенный", затем в разделе "Потоковое вещание" возимся с настройками кодека x264.

Это отдельный разговор и настройкам посвящено немало статей в инете. Можно управлять качеством видеопотока разными способами - раньше предпочитали указывать постоянный битрейт (CBR), сейчас CRF (Constant Rate Factor, но это не постоянный битрейт). CRF = 23 подойдет для обычной трансляции, 18 - для записи в видеофайл для последующего монтажа. Словом, изучайте сами и играйтесь с настройками - надо подобрать их таким образом, чтобы потянул ваш процессор и не было затыков при трансляции.

OBS позволяет также делать не трансляцию, а записывать видеофайл. Куда записывать и в каком формате, надо выбрать на той же вкладке, но во вложенной вкладке "Запись".

Далее, во вложенной вкладке "Аудио" выбираем битрейт звука, например 320.


Теперь переходим к другой, основной (слева) вкладке "Аудио". Частоту дискретизации ставим в 48 килогерц. Остальное не трогаем.


На вкладке "Видео" выставляем разрешение, в котором происходит захват, и разрешение, в котором уже смонтированное на лету видео идет в трансляцию. Там же выбираем FPS - частоту кадров.


Всё.


Наборы настроек можно сохранять как профили через меню "Профиль", и переключаться между ними под разные задачи.


СОЗДАНИЕ СЦЕНЫ В OBS


Возвращаемся в главное окно OBS, выбираем нужную сцену в списке "Сцены", и добавляем источники в список "Источники". Отмечу, что наборы сцен сохраняются через меню "Коллекция сцен".

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


Что же, добавим источники.

Под списком "Источники" нажимаем "+", в появившемся окне добавляем источники. Вот некоторые из доступных:


Захват экрана - захватывает весь экран.


Захват окна - предлагает для захвата выбрать отдельное окно из списка. Если нет видео из окна, надо ПРОКРУТИТЬ параметры диалога добавления источника ниже и поставить галочку на "Использовать формат текстур без прозрачности". Таким образом захватываются все окна, включая с выводом через OpenGL. Именно так я советую захватывать видео из эмуляторов Mednafen и DOSBox. Запустите Mednafen, выберите его окно из списка (в настройках захвата окна), и потом при каждом запуске сессии этот захват будет автоматически возобновляться.


Устройство захвата видео (V4L2) - захват с вебкамеры.


Устройство захвата аудио (ALSA) - добавьте несколько таких источников, и в каждом задайте нужное устройство захвата. Для микрофона одно, для эмулятора другое. Как вы помните, мы воспроизводим звук из эмулятора на устройство plughw:2,0 - один из портов нашей виртуальной звуковухи. Значит, для получения оттуда звука мы теперь прописываем в устройстве захвата порт plughw:2,1 - куда попадает звук из plughw:2,0.

Поступает звук или нет, мы видим по индикаторам в разделе "Микшер" внизу окна OBS. Там же подстраиваем уровни громкости каждого источника, либо делаем это через "системный" микшер.


Также можно добавлять захват со звукового сервера JACK (очень полезная штука, если вы снимаете видео о звуковых программах), текст, список видеофайлов для воспроизведения их VLC, вложенную сцену, слайдшоу, захват с портов Pulse audio, медиа-файлы (помимо VLC, есть встроенный плейер) и фоновый цвет. Из этих источников и составляется сцена.


ЗАПУСК


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


Чтобы всё отладить или для дальнейшего монтажа, советую сначала записать трансляцию в файл, нажав в OBS кнопку "Начать запись", а потом когда будет нужно - "Остановить запись".


Ну а для начала трансляции в Ютубе жмем кнопку "Запустить трансляцию" и начинаем действо.


А чтобы остановить трансляцию есть кнопка "Остановить трансляцию". Для пауз в трансляции советую не выключать ее, а сделать отдельную сцену с текстом вроде "Временный перерыв, скоро вернусь", и включать эту сцену, когда вас что-то отвлекает от вещания.