SOLVED NGINX with RTMP?

XTREEMMAK

Dabbler
Joined
Feb 8, 2016
Messages
31
Hey all,

So I thought this wouldn't be too hard to install since I've installed NGINX thanks to the pkg installer, but I can't seem to find information on how to setup an RTMP server through NGINX using FreeNas. Most instructions I found have you make a custom installation of NGINX since you have to install a RTMP module on top of it, but not really sure what to do as far as config files.

I was able to download both NGINX, RTMP Module just fine, and I was able to for the most part follow instructions on how to make the modified installation, seems like everything went well, but still can't start NGINX since it still says it doesn't know what rtmp is. Here's my config atm:

Code:
#user  nobody;
worker_processes  1;

# This default error log path is compiled-in to make sure configuration parsing
# errors are logged somewhere, especially during unattended boot when stderr
# isn't normally logged anywhere. This path will be touched on every nginx
# start regardless of error log location configured here. See
# https://trac.nginx.org/nginx/ticket/147 for more info.
#
#error_log  /var/log/nginx/error.log;
#


root@rtmp_11:/usr/local/etc/nginx # cat nginx.conf

#user  nobody;
worker_processes  1;

# This default error log path is compiled-in to make sure configuration parsing
# errors are logged somewhere, especially during unattended boot when stderr
# isn't normally logged anywhere. This path will be touched on every nginx
# start regardless of error log location configured here. See
# https://trac.nginx.org/nginx/ticket/147 for more info.
#
#error_log  /var/log/nginx/error.log;
#

#pid		logs/nginx.pid;


events {
	worker_connections  1024;
}


http {
	include	   mime.types;
	default_type  application/octet-stream;

	#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
	#				  '$status $body_bytes_sent "$http_referer" '
	#				  '"$http_user_agent" "$http_x_forwarded_for"';

	#access_log  logs/access.log  main;

	sendfile		on;
	#tcp_nopush	 on;

	#keepalive_timeout  0;
	keepalive_timeout  65;

	#gzip  on;

	server {
		listen	   80;
		server_name  localhost;

		#charset koi8-r;

		#access_log  logs/host.access.log  main;

		location / {
			root   /usr/local/www/nginx;
			index  index.html index.htm;
		}

		#error_page  404			  /404.html;

		# redirect server error pages to the static page /50x.html
		#
		error_page   500 502 503 504  /50x.html;
		location = /50x.html {
			root   /usr/local/www/nginx-dist;
		}

		# proxy the PHP scripts to Apache listening on 127.0.0.1:80
		#
		#location ~ \.php$ {
		#	proxy_pass   http://127.0.0.1;
		#}

		# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
		#
		#location ~ \.php$ {
		#	root		   html;
		#	fastcgi_pass   127.0.0.1:9000;
		#	fastcgi_index  index.php;
		#	fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
		#	include		fastcgi_params;
		#}

		# deny access to .htaccess files, if Apache's document root
		# concurs with nginx's one
		#
		#location ~ /\.ht {
		#	deny  all;
		#}
	}


	# another virtual host using mix of IP-, name-, and port-based configuration
	#
	#server {
	#	listen	   8000;
	#	listen	   somename:8080;
	#	server_name  somename  alias  another.alias;

	#	location / {
	#		root   html;
	#		index  index.html index.htm;
	#	}
	#}


	# HTTPS server
	#
	#server {
	#	listen	   443 ssl;
	#	server_name  localhost;

	#	ssl_certificate	  cert.pem;
	#	ssl_certificate_key  cert.key;

	#	ssl_session_cache	shared:SSL:1m;
	#	ssl_session_timeout  5m;

	#	ssl_ciphers  HIGH:!aNULL:!MD5;
	#	ssl_prefer_server_ciphers  on;

	#	location / {
	#		root   html;
	#		index  index.html index.htm;
	#	}
	#}

}
rtmp {
		server {
				listen 1935;
				chunk_size 4096;

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



 
Last edited:

XTREEMMAK

Dabbler
Joined
Feb 8, 2016
Messages
31
Marking solved. I was able to get the initial install running.

For those who might want to try themselves, here is the guide that I used to get it up in running in an iocage:
https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/

NOTE (Pre 11.2): For us 11.1U6 pplz, make sure you change your FreeBSD.conf url to release_2 instead of quarterly.

1. First step involves installing some dependencies, but I assume that FreeNAS already has them (
$ sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev) but you might still want to:
Code:
pkg install unzip wget
Also, make sure that you have port 1935 forwarded on your firewall to your iocage.

2.
Code:
wget http://nginx.org/download/nginx-1.15.1.tar.gz

Note: There might be problems with other versions.

3.
Code:
wget https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/archive/dev.zip

This is the module that you'll need to install

4.
Code:
tar -zxvf nginx-1.15.1.tar.gz
unzip dev.zip
cd nginx-1.15.1

You should be in the nginx-1.15.1 directory

5.
Code:
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module-dev
make
make install


Alright so NGINX should be installed now. Now to start it, use:
6.
Code:
/usr/local/nginx/sbin/nginx


You can check that it's running with "top", or point your browser to http://<your server ip>/ and you should get the "Welcome to nginx!" page.

7.
Code:
ee /usr/local/nginx/conf/nginx.conf

Scroll down to the bottom and add this:
Code:
rtmp {
	   server {
			   listen 1935;
			   chunk_size 4096;

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

Note: This is an extremely basic configuration with a "live" application that simply forwards the RTMP stream on to whoever requests it. You can play with it some more later.

8. Now restart NGINX with the new config
Code:
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx


Now to test that everything is working. If you're using OBS, make a new profile, then:
9.Add URL to RTMP source. For example in OBS, go to Stream -> Custom
Code:
Streaming Service: Custom
Server: rtmp://<your server ip>/live
Play Path/Stream Key: test

Note: You may be wondering where that play path "test" came from. Well, we just made it up, just now. You can basically make up any play path and stream to it, and put that path into an RTMP player, and it will play back. For simple purposes, authentication isn't necessary in my experience.

You should now be able to start streaming to your server. If you hit "Start Streaming" and don't get an error from OBS, that's a good sign.

To test that you can in fact watch the stream now, open something like VLC->Media->Open Network Stream-> add rtmp://<your server ip>/live/test.

In a few seconds, it should pop up :)

[From the link above]
What now?
You can add the stream to OBS itself using the Media source or VLC source, or use something like JWPlayer to play back the RTMP stream on a web site you set up.

You can also use your RTMP server to forward to other streaming services and channels! Underneath the "record off;" line in your nginx.conf, add the following:

Code:
push rtmp://<other streaming service rtmp url>/<stream key>


And any stream streamed to that application will be forwarded on to the other service, as well as being served up from the server! You can add multiple "pushes" to forward the stream to multiple locations.

Hope this helps someone :)
I'm still a novice so I haven't figured out how to autostart NGINX this way yet. It was super easy with the pkg install way since all you have to do is edit the rc.config file, but I imagine starting NGINX this way makes things a little different.
 

JohnDeer92

Cadet
Joined
Feb 7, 2019
Messages
3
Hello,

I was wondering if you knew how to record to the freenas server.

Right now I have a Raspberry Pi pushing out my churches live stream to Facebook and YouTube. I would like to put together a storage server with freenas and have nginx push it to other streaming services while also keeping a copy locally on the server. I don't want to have to go through the hassle of downloading it from Facebook and YouTube. How would I go about setting this up?
Thank you in advance.
 
Top