Показано с 1 по 11 из 11

Тема: Рестрим/реэнкодинг на одном компьютере

  1. #1
    OBS-информер
    Регистрация
    14.01.2011
    Адрес
    Саранск, Мордовия
    Сообщений
    1,065

    Exclamation Рестрим/реэнкодинг на одном компьютере

    Решили стримить 1080р с поднятием битрейта, но зрители оказались нищебродами и у них лагает? Стримили 5 лет, но так и не прошли конкурс на получение партнерки? Получили партнерку на твиче, но он оказался говном? Ваш любимый и никому не известный сервис не умеет делать рестрим на нужный вам ресурс? Нашли похожую тему, но автор забил на хостинг и подробное описание?
    Не вешайте нос, решение есть у нас!

    Использование nginx-rtmp (и ffmpeg) для нескольких потоков с одним или разным качеством.

    0. Требования к оборудованию и Интернет.
    Для обычного рестрима на несколько ресурсов без перекодирования потребуется пропускная способность, равная сумме битрейтов + 20% для однозначного перекрытия служебного трафика и спайков. На пальцах: хочется стримить 4к поток на два сервиса - запасайтесь интернетами не меньше 10 мбит.
    Для рестрима с реэнкодингом помимо вышеуказанного условия потребуется запас по мощности процессора. Реэнкодинг занимает приблизительно 0.6-0.75 от процессорного времени основного стрим-процесса, а забирать его придется от остальных процессов, в том числе и самой игры, поэтому возможно небольшое снижение fps.
    1. Приступаем к настройке. Скачиваем скомпилированный с rtmp-модулем nginx, например, отсюда.
    Распаковываем в удобное место (я рекомендую класть в корень диска C, во избежание проблем с путями).

    Создаем в папке nginx\conf файл nginx.conf (прожженые it-спецы, использующие nginx под виндой в качестве боевого сервера просто открывают этот файл ) и в него пишем нечто, похожее на:
    #user nobody;
    # multiple workers works !
    worker_processes 1;

    #error_log logs/error.log;
    error_log c:/nginx/logs/error.log debug;
    #error_log logs/error.log info;

    pid logs/nginx.pid;

    events {
    worker_connections 8192;
    }


    rtmp {
    server {
    listen 1935;
    chunk_size 8192;

    application fullhd { #название может быть изменено по вашему желанию
    live on;
    push <your_stream_path>/<your_stream_key>;
    push <your_stream_path2>/<your_stream_key2>;
    #по желанию добавляете дополнительные сервисы
    }
    }
    }
    Далее, нужно протестировать настройки и попытаться запустить nginx. Открываем командную строку, переходим в папку nginx и пишем nginx -t, жмем Enter. Наша цель - получить следующие сообщения:
    nginx: the configuration file C:\nginx/conf/nginx.conf syntax is ok
    nginx: configuration file C:\nginx/conf/nginx.conf test is successful
    Если выводит нечто другое - вчитываемся в ошибку, пытаемся исправить (обычно это не поставленная точка с запятой или забытая скобка).
    Получили одобрение? Запускаем nginx: набираем nginx, жмем Enter. Командная строка зависнет - это нормально. Чтобы корректно остановить, можно запустить вторую командную строку, перейти в папку nginx, набрать nginx -s stop. Или просто некорректно вырубить из диспетчера задач процесс.
    2. Настраиваем стрим-программу. Тут все совсем просто: нужно указать в качестве сервера наш компьютер. То есть в OBS получается примерно так:

    На этом, собственно, настройка рестримов закончена. Просто запускаете стрим и смотрите, куда у вас уходит поток. Если куда то поток не доходит, проверяйте fms url для данного сервиса в конфиге nginx.
    3. Настройка реэнкодинга.
    Для этого нам понадобится ffmpeg. Берем его примерно отсюда, выбирая правильную разрядность и shared версию, в которую напихано "все и сразу". Таким же макаром распаковываем в любое удобное для вас место (тут уже можно не в корень, ffmpeg не такой неженка). Затем лично я предпочитаю сразу добавить его в переменные окружения, дабы не париться с путями. Это делается через свойства компьютера - дополнительные параметры системы - переменные окружения на первой же вкладке - добавляем в системную переменную Path путь до папки с ffmpeg. Добавляем, а не заменяем все переменные вообще!
    Далее правим конфиг nginx, добавляя следующий блок:
    application hd {
    live on;
    push <your_stream_url3>/<your_stream_key3>;
    }
    Добавляется он прямо под предыдущий блок application.
    Делаем nginx -s reload (помните про командную строку?) и тест настроек. Впрочем, при reload'e nginx сам сделает тест.
    Теперь нам нужно накалякать пакетный файл для реэнкодинга, ибо виндовый nginx еще не умеет exec
    Создаем текстовый файл приблизительно следующего содержания:
    ffmpeg -i rtmp://localhost/fullhd -vcodec libx264 -preset veryfast -b:v 2000k -maxrate 2000k -bufsize 2000k -s 1280x720 -sws_flags lanczos -r 30 -acodec copy -f flv rtmp://localhost/hd
    Пытливые умы быстро разберутся что здесь к чему, а для лентяев поясню: данный скрипт преобразовывает входящий поток в поток 720р с постоянным битрейтом 2000к с изменением размера с использованием алгоритма Ланцоша и частотой кадров 30 к/с. Аудиопоток остается без изменений. Внимание: для твича и ютуба необходимо добавить опцию -libx264opts keyint=60, где 60 - частота кадров видео помноженная на 2.
    Сохраняем файл как ffmpeg to hd.bat в любое удобное место. Теперь, чтобы начать рестрим с реэнкодингом достаточно запустить основной стрим, а затем этот файл. Измененный поток пойдет на выбранный вами плеер. Чтобы потестить правильность настроек, я рекомендую поменять разрешение в bat-файле на квадратное (или ширкоформатное, если основной поток идет в 4:3), ибо с первого взгляда сложно определить где основной поток, а где измененный.
    4. Автоматизация запуска.
    Разумеется, постоянно пускать nginx через консоль не совсем удобно. Поэтому катаем скрипты
    nginx-start.bat - для старта
    @ECHO OFF
    set root=C:\nginx
    cd /D %root%
    start nginx.exe
    nginx-reload.bat - для применения изменения конфигов
    @ECHO OFF
    set root=C:\nginx
    cd /D %root%
    nginx.exe -s reload
    nginx-stop.bat - для остановки
    @ECHO OFF
    set root=C:\nginx
    cd /D %root%
    nginx.exe -s stop
    При этом, nginx-start.bat можно положить в автозагрузку.
    5. Разумеется, под линухом все будет красивее, не нужны скрипты, ffmpeg можно обернуть прямо в конфиге nginx'а, да и вообще linux power.

    В общем то на этом все, пробуйте, пинайте за недочеты. Кто знает, как корректно запихнуть nginx в сервисы винды (а то он у меня на пути ругается ) - напишите, будете молодцом.
    Копипастеры с танков, блин, если уж спираете статью, то хотя бы авторство указывайте.
    Основные идеи почерпнуты из этих статей
    Последний раз редактировалось Zerocul; 17.09.2014 в 03:45.
    Tell me, Eddie... Is that a rabbit in your cloak or you just happy to see me? :happy:
    Мозг комиссии по правам фан-стримеров

  2. #2
    Цитата Сообщение от Zerocul Посмотреть сообщение
    Основные идеи почерпнуты из этих статей
    тоже делал по этому мануалу и все получилось, кроме одного и очень важного момента!
    Когда пускаю поток через OBS на твич/ютуб/другие плееры, проблем с потерями нет и поток может быть не маленьким.
    Но, если пускать поток по мануалу jak0ra, то появляются те самые проблемы, что раньше были у xsplit/obs без "TCPrelay"
    В итоге, если юзать nginx, то обязательно с TCPrelay, т.к без него макс. отдача до 1 мб/с, с ним ~10+ мб/с (и макс на плеер твича, либо я хз)

    как решить этот трабл? (все никак руки не дойдут спросить у strikera)
    Последний раз редактировалось y32b4; 20.09.2014 в 16:29.

  3. #3
    Цитата Сообщение от y32b4 Посмотреть сообщение
    как решить этот трабл?
    решение проблемы

  4. #4
    Zerocul, приветствую. 3 часа с лишним бился над мануалом. У меня ситуация немного другая, мой сервер не на локальном, а на удаленном с открытыми портами. Если я меняю в ffmpeg localhost на ip сервера, то выдает ошибку 100061, а если возвращаю localhost - то ReadPacket ошибка. Пробовал кодировать ОДИН файл и вещать, все работает, но не могу проиграть плеером, так как он требует ключ, а вещать я могу только на rtmp сервер без ключа в адресной строке.

  5. #5
    Новичок
    Регистрация
    16.12.2012
    Сообщений
    5
    Цитата Сообщение от Solyanka Посмотреть сообщение
    ZeroculЕсли я меняю в ffmpeg localhost на ip сервера, то выдает ошибку 100061, а если возвращаю localhost - то ReadPacket ошибка
    Указывай тот же порт что в конфиге слушается. И будет тебе счастье..возможно То есть, источник/назначение потока должен выглядеть примерно так: rtmp://localhost:1935/bla-bla-bla
    Последний раз редактировалось ZltCity; 20.02.2015 в 12:53.

  6. #6
    Цитата Сообщение от ZltCity Посмотреть сообщение
    Указывай тот же порт что в конфиге слушается. И будет тебе счастье..возможно То есть, источник/назначение потока должен выглядеть примерно так: rtmp://localhost:1935/bla-bla-bla
    Счастье было и было хорошо и сказал я спасибо доброму человеку и поклонился до земли, но второй вопрос остался не решен - как вещать во JwPlayer, он без ключа не хочет показывать.
    Еще раз фенкс, только порт с локалхостом и не пробовал. А вот что с плеером

  7. #7
    Новичок
    Регистрация
    16.12.2012
    Сообщений
    5
    Цитата Сообщение от Solyanka Посмотреть сообщение
    второй вопрос остался не решен - как вещать во JwPlayer, он без ключа не хочет показывать
    Для решения слишком мало исходных данных. Было бы просто замечательно, если бы ты подробно расписал что хочешь сделать и как это хочешь сделать + конфиг.

    p.s. Все что может rtmp у меня играет мой стрим с моего же сервака без ключа. Единственное - я не пробовал web плееры.
    Последний раз редактировалось ZltCity; 20.02.2015 в 14:26.

  8. #8
    Новобранец
    Регистрация
    15.08.2011
    Сообщений
    37
    объясните чайнику что надо писать в обс если роутер есть, а то проходит несколько секунд выскакивает преподключение

  9. #9
    Цитата Сообщение от ZltCity Посмотреть сообщение
    Для решения слишком мало исходных данных. Было бы просто замечательно, если бы ты подробно расписал что хочешь сделать и как это хочешь сделать + конфиг.

    p.s. Все что может rtmp у меня играет мой стрим с моего же сервака без ключа. Единственное - я не пробовал web плееры.
    Какой плеер воспроизводит стрим?

  10. #10
    Новичок
    Регистрация
    16.12.2012
    Сообщений
    5
    Цитата Сообщение от Solyanka Посмотреть сообщение
    Какой плеер воспроизводит стрим?
    VLC, MPlayer.

    - - - Добавлено - - -

    Цитата Сообщение от Honorific Посмотреть сообщение
    объясните чайнику что надо писать в обс если роутер есть, а то проходит несколько секунд выскакивает преподключение
    Адрес сервера в локальной сети, например: rtmp://192.168.1.123:1935/bla-bla-bla, или, если сервер на той же машине что играешь: rtmp://127.0.0.1:1935/bla-bla-bla

  11. #11
    Редактор отдела фан-стримов
    Регистрация
    06.02.2013
    Адрес
    DC2
    Сообщений
    79
    привет
    Я не забивал был просто инактив, а чертов китаец перекупил домен
    Спс за манул.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Тормозит игра на мощном компьютере, нужна помощь
    от fee1good в разделе Технические вопросы
    Ответов: 38
    Последнее сообщение: 21.12.2012, 18:35
  2. Рестрим MLG
    от Alider в разделе LIVE-трансляции, Турниры
    Ответов: 11
    Последнее сообщение: 28.03.2012, 08:15
  3. Ответов: 10
    Последнее сообщение: 06.01.2011, 20:02

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •