LINUX.ORG.RU

Стрим на собственный сервер

 , , , ,


1

2

В общем, задача такая: есть свой LAMP сервер дома, на котором работает сайт на вордпрессе. Хочется сделать пост, в котором будет окно с видеотрансляцией моего экрана, типа как твич. Как это осуществить я не понимаю совсем, может кто-то объяснить насколько это возможно вообще и с чего начать?

Лампа работает из-под вмбокса на вин10. Допустим, на вин10 запустить стрим игры, чтобы шло на сервак с лампой. Что мне понадобиться? Чем снимать картинку с экрана, чем энкодить, как направить на серв?

Чем снимать картинку с экрана

Ну вам проще всего будет взять OBS

чем энкодить

Там есть энкодеры. Если вопрос про железо то лучше видюхой, чем cpu, потому что процессор это сильно нагрузит и на вашу игру ресурсов ему может и не хватить (конечно если видеокарта может энкодить)

как направить на серв

Там тоже это будет, в настройках будут параметры сервера

с чего начать

Поставьте nginx с rtsp, научитесь запихивать в него поток (проверять можно каким-нибудь vlc). Затем у вордпресса есть плагины для того чтоб трансляции показывать, но тут я не подскажу - с ними не сталкивался, так что гуглите и экспериментируйте.

micronekodesu ★★ ()

на вин10 запустить стрим игры

возьмём официальную статистику, более 50% зрителей предпочитает смотреть стримы в 720p, лишь около 20% смотрят в 1080p. плюс сделаем тебе скидку, что стримить ты будешь не 60, а 30 кадров в секунду.

720p30 при битрейте 2500 тире 4000 kbps это будет 3,5мбит до 5мбит. интернет дома у тебя 100мбит. возьмём среднее 4мбита.

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

стримь на твич как все, и не сношай моск ни себе ни людям.

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

стримь на твич как все

И это говорит человек который всеми руками и ногами за хендмейд и локалхост оО

На своем сервере за то можно будет говорить п-слово, n-слово и ставить музыку с копирайтами.

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

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

его идея нежизнеспособна при всём желании. онлайн трансляция требует крайне высокую производительность ПК и низкую задержку сети. второй ПК для стрима — это то, с чего вообще стоит начинать разговор для создания стрима. :)

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

стрим с того же игрового компьютера для дилетантов, и при первой же возможности всегда приобретается второй ПК, и не «для стрима сойдёт», а хотя бы 4 ядерный. по-хорошему 6-8 поточный процессор. устанавливается плагин OBS NDI, на него с игрового ПК делается стрим сырого трафика, и уже он занимается кодированием и отправкой потока на площадку типа твич.

я ради интереса пробовал стримить старкрафт, не всё так просто. например, пк для стрима я использовал Pentium G4620. использование процессора доходило 80%. дропы кадров были, но терпимо. это при не самом лучшем качестве, битрейт был в пределах 3700, 1080p30. потом у меня появился Ryzen 1700X для стрима и Ryzen 2700X для игр, и только тогда стрим заиграл новыми красками, я смог выставить пресет повыше, 5300 битрейт и 1080p60. а на фризящий стрим просто никто не будет смотреть. P.S. не с целью рекламы, а для информативности, мой канал на твиче. вполне возможно я ещё постримлю как немного разгребусь с работой и делами. :)

Spoofing ★★★★★ ()
Ответ на: комментарий от Spoofing

Если свой видеосервер, то можно выбрать любой кодек и тонко настроить. Можно собрать ffmpeg с максимальной оптимизацией под конкретный проц

Все это может дать сильное снижение нагрузки

ism ★★★ ()
Последнее исправление: ism (всего исправлений: 2)
Ответ на: комментарий от Spoofing

Справедливости ради стоит заметить вот это

https://www.nvidia.com/en-us/geforce/guides/broadcasting-guide/

https://www.hardwareluxx.ru/index.php/news/software/anwendungprogramme/46602-obs-nvidia-rtx-encoder.html

Но для этого нужна RTX видеокарта. Правда я на 100% уверен что это только под венду.

bhfq ★★★★★ ()
Ответ на: комментарий от Spoofing

крайне высокую производительность ПК

Если кодировать на процессоре - согласен. Но про это ниже.

низкую задержку сети

Нет - требуется стабильная задержка, если она будет большая (в разумных пределах, конечно), то с этим справится кэширование на стороне сервера. Реалтайм пострадает, но все равно. Знаю людей кто стриммил через мобильный интернет, там пинг 200-300 - норма.

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

Так очень мало кто делает по той причине что производительности какого-нибудь современного i5 не хватит чтоб обеспечить ту же картинку, что может выдать нвидиевская затычка за 5К. А покупать 9900К для стримов может позволить себе далеко не каждый.

устанавливается плагин OBS NDI, на него с игрового ПК делается стрим сырого трафика

Все проще - покупается карта захвата.

потом у меня появился Ryzen 1700X для стрима <...> я смог выставить пресет повыше, 5300 битрейт и 1080p60

Ради интереса давай возьмем одинаковый видеофрагмент, договоримся об опциях ffmpeg, ты кодируешь на цпу, я на нвидиевой затычке вдвое дешевле твоего камня в оем-комплектации и сравниваем качество картинки?

битрейт был в пределах 3700, 1080p30

С таким битрейтом тебе надо было 720p30 использовать, для 1080p60 нужно 6000..8000

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

после настройки шрифтов ещё глазки не отошли, а вы настаиваете на special olympics по сравниванию мыла. :)

пусть каждый останется при своём, я продолжу кодировать на процессоре, а вы на видеокарте. :)

Spoofing ★★★★★ ()
Ответ на: комментарий от micronekodesu

В целом, я установил нгинх с rtmp и удается стримить через ОБС как вы и предложили. Но проблема в том, что я не могу одновременно запустить нгинх и апач, потому что, как я понял, они на одном порту слушают. А задача стоит сделать возможным просмотр потока с сайта, который на апаче.

magrega ()
Ответ на: комментарий от Anoxemian

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

wait a minute guys rtmp что ли только по флэшу и передает что ли?

magrega ()
Последнее исправление: magrega (всего исправлений: 1)
Ответ на: комментарий от magrega

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

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

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

Formerly FV WordPress Flowplayer. Supports MP4, HLS, MPEG-DASH, WebM and OGV. Advanced features such as overlay ads or popups. Uses Flowplayer 7.2.7.

Мне, как я понял, нужен HLS и MP4, чтобы всё работало на большинстве устройств. Никак понять не могу как это запустить и почему по умолчанию у меня флэш.

magrega ()
Последнее исправление: magrega (всего исправлений: 2)
Ответ на: комментарий от magrega

Да, все верно, я прогнал, RTMP только флешем оказывается можно играть. Вообще в nginx можно сделать hls, я поковыряю и расскажу что и как получилось, потому что пока не могу дать точного решения.

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

Вот я делаю по такому руководству, но у меня не компилится нгинх с модулем rtmp. Когда запускаю нгинх пишет мол непонятная директива rtmp.

guide

pic

magrega ()
Последнее исправление: magrega (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

Ну вот конфиг, но мне кажется дело в том, как установлено всё это дело. Я пробовал две разные версии нгинха. 11 и 14, и обе компилились с ошибками.

worker_processes  auto;
events {
    worker_connections  1024;
}

# RTMP configuration
rtmp {
    server {
        listen 1935; # Listen on standard RTMP port
        chunk_size 4000;

        application show {
            live on;
            # Turn on HLS
            hls on;
            hls_path /mnt/hls/;
            hls_fragment 3;
            hls_playlist_length 60;
            # disable consuming the stream from nginx as rtmp
            deny play all;
        }
    }
}

http {
    sendfile off;
    tcp_nopush on;
    aio on;
    directio 512;
    default_type application/octet-stream;

    server {
        listen 8080;

        location / {
            # Disable cache
            add_header 'Cache-Control' 'no-cache';

            # CORS setup
            add_header 'Access-Control-Allow-Origin' '*' always;
            add_header 'Access-Control-Expose-Headers' 'Content-Length';

            # allow CORS preflight requests
            if ($request_method = 'OPTIONS') {
                add_header 'Access-Control-Allow-Origin' '*';
                add_header 'Access-Control-Max-Age' 1728000;
                add_header 'Content-Type' 'text/plain charset=UTF-8';
                add_header 'Content-Length' 0;
                return 204;
            }

            types {
                application/dash+xml mpd;
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            root /mnt/;
        }
    }
}
magrega ()
Последнее исправление: magrega (всего исправлений: 1)
Ответ на: комментарий от magrega

Добавьте include /etc/nginx/modules-enabled/*.conf; в начало (ну или проверьте какой у вас путь к конфигам модулей). Ну и проверьте что там есть

$ cat /etc/nginx/modules-enabled/50-mod-rtmp.conf 
load_module modules/ngx_rtmp_module.so;

Ну или просто подгрузите модуль в конфиге.

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

Тоже ошибка invalid number of arguments in «include» directive in /etc/nginx/nginx.conf

Но у меня всё тоже самое, что вы написали. В файле конфига модуля, я имею в виду.

Вот я скачал нгинх 1.19 и он скомпилился с одной ошибкой. в ngx_rtmp_eval

Я хз что надо сделать, чтобы последний элемент этот завершился.

magrega ()
Последнее исправление: magrega (всего исправлений: 2)
Ответ на: комментарий от magrega

Да не нужно самостоятельно собирать ничего. (У меня, кстати, 1.16.1.)

invalid number of arguments

У меня такое чаще всего возникает когда точку с запятой забываю написать =)

Можно посмотреть модули в /etc/nginx/modules-enabled/, может там конфиг какой кривой попался. Давайте проверим если хотите - tail -n +1 /etc/nginx/modules-enabled/*.conf. Ну и там могут быть тоже инклюды какие-то, так что их тоже придется смотреть.

micronekodesu ★★ ()
Ответ на: комментарий от micronekodesu

я сейчас с другой проблемой столкнулся. У меня уже началась паранойя и я начал думать, что может из-за того, что у меня так много уже версий в системе, что может какой-то конфликт и одновременно несколько версий нгинха работать пытаются. В общем, я –purge удаление сделал и удалил nginx ручками в /usr/sbin/nginx.

После переустановки нгинха он не запускается теперь, потому что не может собственно найти /usr/sbin/nginx, потому что я его только удалил)))) Я был уверен, что он заново все поставит, но я еще никогда так не ошибался… теперь не знаю как вернуть.

Короче я всё сломал. Завтра буду разбираться, на сегодня сил у меня больше нет. Это дичь какая-то. Если у меня установлен libnginx-rtmp-mod, то почему он директиву не признает, учитывая, что я запускал уже у себя сегодня поток на серваке?

magrega ()
Последнее исправление: magrega (всего исправлений: 1)
Ответ на: комментарий от magrega

у меня так много уже версий в системе

Так на сколько я понял они у вас не собирались, думал до установки дело не дошло.

Как-то странно если при установке сам бинарь пакетный менеджер не положил. Ошибок никаких не было? Хотя с учетом того что вы его руками удаляли похоже и purge у вас нормально не прошел.

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

Если у меня установлен libnginx-rtmp-mod, то почему он директиву не признает, учитывая, что я запускал уже у себя сегодня поток на серваке?

С конфигом что вы выше кидали это происходит потому что модуль не подгружен.

micronekodesu ★★ ()
Последнее исправление: micronekodesu (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

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

guide

Сейчас ради интереса я снова это сделал, но директива rtmp не признается.

Сейчас в конфиге даже есть include /etc/nginx/modules-enabled/*.conf; и нет ошибки на этот счет, но сама папка modules-available пустая, я создал там 50-mod-rtmp.conf и добавил в него команду, которые вы мне писали добавить. Как теперь этот конфиг запустить, чтобы он был в modules-enabled?

Это вообще очень странно, что у меня все папки модулей пустые абсолютно. Это же ненормально.

Хотя я нашел папку с модулями в /usr/lib/nginx/modules и тут вроде все есть.

magrega ()
Последнее исправление: magrega (всего исправлений: 5)
Ответ на: комментарий от micronekodesu

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

ОБС подключается к серву и стримит, но в влс не открывается поток. Ошибка. VLC in unable to open the MRL ‘rtmp adress’. Check the log for detals. В логе написано failed to open ‘rtmp adress’. Input/output error.

В папка site-available есть default, но он не отображается в site-enabled. Должен ли он быть активным, чтобы принимать стрим?

magrega ()
Последнее исправление: magrega (всего исправлений: 2)
Ответ на: комментарий от micronekodesu

Ну в общем, немного разобрался, удалось запустить поток опять с тем же конфигом, с которым я пускал стрим на флэше. Вот он:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
load_module modules/ngx_rtmp_module.so;


events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
	ssl_prefer_server_ciphers on;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;

	# gzip_vary on;
	# gzip_proxied any;
	# gzip_comp_level 6;
	# gzip_buffers 16 8k;
	# gzip_http_version 1.1;
	# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
# 
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

 rtmp {
	server {
		listen 1935;
		chunk_size 4096;

		application live {
		live on;
		record off;
		    }
	    }
}

Как видно из конфига, он абсолютно минимальный. А мой навороченный с hls запускаться не хочет. Точнее, я получаю ошибку ввода\вывода и посмотреть поток не могу, хотя ОБС пишет вроде как и никаких ошибок не показывает. Навороченный конфиг находится выше в теме, если кому-то интересно взглянуть.

magrega ()
Последнее исправление: magrega (всего исправлений: 1)
Ответ на: комментарий от micronekodesu

Окей, запустил hls. Столько интернет руководств, хоть бы в одном написали, что раз стрим по hls, то и ссылка на него через http, а не rtmp))))))) 8 часов потратил просто на то, чтобы в коментах на каком-то форуме найти такого же дауна как я, который указал, что надо адрес на стрим через http стучаться.

Даже удалось в онлайн вывести стрим. На айфоне показывает, все чики-пуки. Остались детали: из-за того, что мой сайт на вордпрессе на https, а стрим нет, плеер отказывается запускать стрим на андройдах и десктопах. Как мне обезопасить стрим с помощью ssl? Я ведь по сути никакого сайта не запускаю, у меня нет домена для этого. Можно ли как-то сертификат впихнуть? Или надо теперь еще на нгних еще и сайт делать с доменом просто во имя сертификата?

magrega ()
Ответ на: комментарий от magrega

У меня есть сайт на вордпрессе на апаче с доменом на eu.org и сертификатом от летсенкрипт. Могу ли я как-то под этот сертификат запихать свой nginx со стримом? Самописный запихать не получается, при открытии стрима в консоли оперы - ERR_CERT_COMMON_NAME_INVALID

magrega ()
Последнее исправление: magrega (всего исправлений: 1)

Стрим на собственный сервер

как твич

вин10 запустить стрим игры, чтобы шло на сервак с лампой.

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

  1. Сколько денег ты готов вложить в это мероприятие?

  2. Что будешь делать, если решишь прекратить этим заниматься?

В качестве бонуса предлагаю задуматься: нужно ли отказываться от твича или аналогичного сервиса? Они уже заточены (инструменты, документация и пр.) под процесс, что даёт любому быстрый, проверенный и легальный старт.

anonymous ()
Ответ на: комментарий от Spoofing

я ещё постримлю как немного разгребусь с работой и делами

Добавил в закладки. Сразу прошу учесть небольшие пожелания: постримь какие-то локальные турниры, и добавь больше стороннего звука (голос/музыку/соседей), так как слушать «голый» StarCraft сомнительное удовольствие.

anonymous ()
Ответ на: комментарий от Anoxemian

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

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

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

magrega ()
Последнее исправление: magrega (всего исправлений: 1)