# This is nginx setup of sneakyjoe.ru # Based on obs forums and helping squad articles. # Made for personal use and sharing with the crowd. # Updated with new tweaks for the best job each time I learn something new. # WARNING! Streaming WILL drop all the fucking time if you stream to server higher than 1920x1080/60 # WARNING! This will 100% work only on UBUNTU 16.04 with HWE Kernel enabled on installation. LOCALE change file set to "LANG=en_EN.UTF-8" /etc/default/locale ________________________________________________________________________ SETUP IP AND DNS: sudo mcedit /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto enp35s0 iface enp35s0 inet static address 192.168.0.55 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 208.67.222.222 8.8.8.8 _______________________________________________________________________ FFMPEG install sudo wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz sudo wget http://sneakyjoe.ru/go/ffmpeg-release4.1.3-amd64-static.tar.xz sudo tar -xJf ffmpeg-release-amd64-static.tar.xz sudo mkdir /usr/bin/ffmpeg-dir sudo mv -v ~/ffmpeg-4.1.3-amd64-static/* /usr/bin/ffmpeg-dir sudo ln -s /usr/bin/ffmpeg-dir/ffmpeg /usr/bin/ffmpeg ______________________________________________________________________ NGINX install: sudo mkdir nginx cd nginx sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev sudo wget http://nginx.org/download/nginx-1.13.8.tar.gz sudo wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip sudo tar -zxvf nginx-1.13.8.tar.gz sudo apt-get install unzip sudo unzip dev.zip cd nginx-1.13.8 sudo ./configure --with-http_ssl_module --without-http_gzip_module --add-module=../nginx-rtmp-module-dev sudo make sudo make install sudo /usr/local/nginx/sbin/nginx ______________________________________________________________________ CONFIGURE template: sudo mcedit /usr/local/nginx/conf/nginx.conf sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ______________________________________________________________________ AUTOSTART with diagnostics: sudo mcedit /etc/rc.local exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file exec 1>&2 # send stdout to the same log file set -x # tell sh to display commands before execution sleep 5s # sudo ethtool -s enp35s0 speed 1000 ## This is for gigabit networks to enable higher speeds /usr/local/nginx/sbin/nginx ______________________________________________________________________ If cant stream to youtube because of IPv6 error add 3 lines to the end of file: sudo mcedit /etc/sysctl.conf net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 ______________________________________________________________________ RESTART template: sudo /usr/local/nginx/sbin/nginx -s stop sudo /usr/local/nginx/sbin/nginx ______________________________________________________________________ VODCAST template: # Streams files from such template adding a text over my webcam position. File formats my custom %Y.%m.%d___%H-%M___1080.flv and OBS no spaces: # 2018.12.31___23-59___1080.flv for 1080p files # 2018-02-06 03-31-46.mkv for 1440p files # Requires a read-access for file /home/sneakyjoe/RECS/font/consolas.ttf filename=$1 extension=${filename:26:3} echo $extension if [ "$extension" = "flv" ]; then fdate=${filename:0:10} ftime=${filename:13:5} vodtime="$fdate $ftime" echo $vodtime sudo ffmpeg -re -i ~/RECS/$1 -b:v 6000k -minrate 5500k -maxrate 6500k -bufsize 7000k -vcodec libx264 -preset faster -s 1920x1080 -sws_flags bicubic -r 60 -x264-params nal-hrd=cbr:force-cfr=1:keyint=120 -vf drawtext="fontfile=/home/sneakyjoe/RECS/font/consolas.ttf:text='Запись от $vodtime':fontcolor=white:fontsize=12:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)-150:y=(h-text_h)-10" -acodec aac -ab 160k -f flv rtmp://localhost/vodcaster/ else fdate1=${filename:0:4} fdate2=${filename:5:2} fdate3=${filename:8:2} ftime=${filename:11:5} vodtime="$fdate1.$fdate2.$fdate3 $ftime" echo $vodtime sudo ffmpeg -re -i ~/RECS/$1 -ss 00:00:03 -b:v 6000k -minrate 5500k -maxrate 6500k -bufsize 7000k -vcodec libx264 -preset faster -s 1920x1080 -sws_flags bicubic -r 60 -x264-params nal-hrd=cbr:force-cfr=1:keyint=120 -vf drawtext="fontfile=/home/sneakyjoe/RECS/font/consolas.ttf:text='Запись от $vodtime':fontcolor=white:fontsize=33:box=1:boxcolor=black@0.5:boxborderw=5:x=(w-text_w)-380:y=(h-text_h)-20" -acodec aac -ab 160k -map 0:v:0 -map 0:a:5 -strict -2 -f flv rtmp://localhost/vodcaster/ fi ______________________________________________________________________ Stream to receiver application. NGINX template: rtmp { server { listen 1935; chunk_size 4000; # max size 16777215 ## Uncomment in case of frequent disconnections ## PacKoMMEHTuPyu ECJlu O6C 4ACTO OTKJll04AETC9\ # ping 1m; # ping_timeout 10s; # drop_idle_publisher 10s; application receiver { live on; meta copy; # This sends stream to transcoder push rtmp://127.0.0.1/transcoder/; # Add source streams here you don't want to transcode # Twitch source # push rtmp://live-fra.twitch.tv/app/************************; # Youtube source # push rtmp://b.rtmp.youtube.com:1935/live2/************************; } application transcoder { live on; meta copy; # 1080 all sites exec ffmpeg -i rtmp://127.0.0.1/transcoder/ -b:v 6000k -minrate 5500k -maxrate 6500k -bufsize 7000k -vcodec libx264 -preset faster -s 1920x1080 -sws_flags bicubic # -vf unsharp=3:3:1.5 # Video sharpening -r 60 -x264-params nal-hrd=cbr:force-cfr=1:keyint=120 -acodec aac -ab 160k # -strict -2 -f flv rtmp://127.0.0.1/transcoded-1080/ # -loglevel verbose # 2>>/home/sneakyjoe/ffmpeg-log.txt ; # 560 periscope # exec ffmpeg -i rtmp://127.0.0.1/transcoder/ # -b:v 740k # -minrate 600k # -maxrate 800k # -bufsize 800k # -vcodec libx264 # -preset fast # -s 960x540 # -sws_flags lanczos # -r 30 # -x264-params nal-hrd=cbr:force-cfr=1:keyint=60 # -acodec aac # -ab 90k # -strict -2 # -f flv rtmp://127.0.0.1/transcoded-560/; } application transcoded-1080 { live on; meta copy; # Twitch transcoded # push rtmp://live-fra.twitch.tv/app/************************; # youtube transcoded # push rtmp://b.rtmp.youtube.com:1935/live2/************************; # Restream.io transcoded # push rtmp://eu-east.restream.io/live/************************; # dailymotion transcoded # push rtmp://publish.dailymotion.com/publish-dm/************************; # Cybergame transcoded # push rtmp://premium.cybergame.tv:1953/************************; # GoodGame transcoded # push rtmp://msk.goodgame.ru:1940/live/************************; # Mixer (beam.pro) transcoded # push rtmp://ingest-fra.mixer.com:1935/beam/************************; ## This block will save your transcoded stream to record_path. Remember to create ~/RECS and do "chmod 777 ~/RECS" # recorder myrec # { # record all; # record_path /home/sneakyjoe/RECS; #Change sneakyjoe with your username # record_suffix _%Y.%m.%d___%H-%M___1080.flv; # } } } }