Recently I was re-introduced to the server software and program called Jitsi-Meet. It’s a zoom alternative that you can run on your own cloud server and provide a private and secure video conferencing experience without paying by the meeting host, or for time or anything. Just pay for the running VPS (Virtual Private Server). It can be run on small instances on Amazon Lightsail or even more easily on server providers like VULTR.
If you’re interested in seeing Jitsi work, just try out the meeting place at https://meet.jit.si/ it’s totally free to use and you can test out if it will work for you. This looks like mine, except mine is on a custom server and I put my logos in place of the Jitsi logo and changed the wording. It’s easily used in the browser and for phones you either use the browser or the app on by Android and IOS.
VULTR is a cloud server provider and they have some ready made software packages that install in just a few clicks. They’re very easy to use and I even have an affiliate code here that will get you $100 of credit to check them out. https://www.vultr.com/?ref=8671968-6G
Using a code like that is how I got started and it’s a simple no cost way to try it out and see if you can make a nice running video conferencing server.
A few clicks to install and get up and running in the stock configuration, the server operates easily. But then as is my custom I began modifying it. I put the logos of my choosing on the home page and also custom wording of the statements about using it for teams and meetings.
Then I made a lobby area for new people who access it.
I put it on a custom URL subdomain of one of mine as well. It just chugs along.
If you’d like help with customization, first you need install it and make it work, then after that you can fix it up to make it look more custom. I figured out the places to modify including below:
When you wish to make a room to meet in, you type a room name of your choice in the center of the page. It has random words that scroll by to form room names that you can choose at random just by hitting the
/usr/share/jitsi-meet/interface_config.js – This is where you can delete buttons you don’t want for options and also where you can change it to say something custom when people enter the meeting, instead of “fellow Jitster”.
If you need any help with any of it, just let me know. I’d be happy to help a bit.
I came across another type of re-stream server that might help some people. It can also be run on a $3.50 per month server from Amazon Lightsail. It’s a node.js server called Node-Media-Server roughly according to this link: https://github.com/illuspas/Node-Media-Server. I’ve modified it slightly and made it useful for re-streaming to YouTube and Facebook.
The reason I searched out yet another re-streaming server type is that I found that streaming with Wirecast going to my other server under NGINX was unreliable. That server works very well with our hardware streamer and the streaming apps on iPhone and Android but it didn’t work well with Wirecast. The following server works very well with Wirecast as well as our hardware streamer and the apps that I have on my iPhone and Android phone.
My version here, is slightly different than the one on Github and I’ve laid out some instructions below. Please read the entire post before starting as we want to make sure it goes as smoothly as possible.
The first step in the process is to to to Amazon Lightsail. The website address is : https://aws.amazon.com/free/compute/lightsail/ They even have a one month free trial of their services for the smallest one. That’s the one we want so it’s great just to try for this. So even if you don’t know what you’re really doing, you aren’t even out anything to try.
Go to Get Started Now and begin. You’ll have to create an Amazon AWS account to start, but that’s easy. (I bet you’ll like it after the first month too) I can’t go back through this because I already have an account. I don’t think I can walk you through some of those details because of that.
However once you are through with that, you should get to a page that looks like this:
From here you choose your instance location. I always choose Northern Virginia for two reasons. One is that I’m located 40 miles from these server farms. Two is that these are probably some of the fastest server farms in the world.
Next you have to pick the OS for the server. Also you have to choose “OS Only” and I choose Linux with Ubuntu being the image I want. It runs the software amazingly and the instructions assume these choices. Now we have to name our “instance”. I like something like “re-streamer” or something of the sort.
Next you have to wait for it to be created, that takes about a minute or less. Once it’s up and running, we can log into it via the browser. That is very simple and you just click the hyperlinked name of your server. That brings you to a page with a huge button that says “Connect Using SSH”. That’s what we want.
Then it brings you to a command prompt. This is where we’ll issue all our commands to make the server do all our work.
Then you can begin with the following code at the command prompt. Press “y” when it asks and select “yes” by putting the red curser over it when you see a graphic ask a question. Or if it asks to press [enter] please do that.
My directions below are slightly different than the ones on Github but these solve some little issues you might find if you followed the others.
The below commands you should perform one at a time by cutting and pasting into the command prompt.
When you use “sudo nano app.js” you’ll be opening a file. This is the main configuration file for the node-media-server. You’ll need to paste in the following code but put in any locations you want to send your stream to via RMTP. You have to replace my keys with your keys obviously.
Then of course you’ll have to use ctrl-x to exit, and Y to save it as the original named file.
Next we have make it enabled after boot by doing the following:
sudo systemctl enable stunnel4.service
Now we have to restart stunnel because we changed the configuration files.
sudo systemctl restart stunnel4.service
Now that Stunnel is installed and the app.js file has been properly created we can try it out. To make it run you have to execute the app.js file. Use the following command. The & after the command will let it run in the background and won’t close when you close the command prompt
node app.js &
This should output something like the following:
Whenever you have to modify anything in that app.js file remember that it’s located in your home folder, under “nms”. So in linux you have to go to that location from login like this if you want to directly:
sudo nano ubuntu/nms/app.js
Then remember that to start it again you have to use the command “node app.js” or “node app.js &”.
Also if you have to stop the app.js from running you can press cntrl-x, which will exit the process and give you a command prompt again.
You’ll want to fix the firewall settings on the lightsail server instance so that our connections from outside can get to the server. You should allow ports, 8000,443, and 1935 along with the ports that are automatically allowed by lightsail. You can change this by going to the “networking” section of the instance. Then making it look like the picture below. You’ll also want to set the IP address of your streaming location so that other people can’t stream to your instance. the instance I created for this tutorial isn’t going to be running by the time you read this. I’ll be deleting it, so it will be safe.
Next you can test it with some simple software like VLC along with OBS or your churches streaming software or hardware encoder. You’ll need your RTMP feed to go to your server IP address which is seen on the home page of the instances of Lightsail. It’s on the bottom right above your server location. You can also set it to make it static at this point, but that will give it a new one that will not change. You’ll want that so you don’t always have to change your OBS or streaming software or hardware. To make a static IP just go to the instance by clicking the hyperlinked name and then choose networking from the options across the middle of the page. Then choose static IP on the left.
This gives a nice output page as well to see the status of your running server that’s waiting for your stream. Go to your IP address 000.000.000.000:8000/admin
In OBS or your hardware encoder choose these options in the stream settings:
Server: rtmp://<<ngnix server IP address>>/live
Stream Key: test
For a playback test use VLC or something that can play RTMP streams. Set it up as follows: Go to Network Stream, Network.
network URL: rtmp://<<node-media-server IP address>>/live/test
You can also go see what the admin page looks like at that IP address:8000/admin, it will show you the inputs and outputs as well as memory usage and cpu usage.
Also now you should be able to go to Facebook and YouTube to see it there to go live with if you wish. Everything should be up and running at this point. You might want to take a snapshot here, because that way you can always fix anything else that goes wrong. Also if you want to further modify this for other purposes to make it better later you have a good jumping off point to create a new instance without jeopardizing your running one.
******The below section about PM2 is an addition to this post to make the program work better for streaming events without worrying about the terminal window closing or disconnecting.
To make this app.js function continue to work even if you close the command prompt, which you will probably want to do reliably. You should install another small program that will make this continue in the background and continue pushing your streams anytime you need them. We’re going to use PM2 to do this.
Install PM2 by typing the following at the command line:
sudo npm install pm2 -g
There are some huge benefits for you if you run your application using pm2. Make sure you are in the directory /nms/ where you installed the app.js file, and instead of running the app as we did above (with node app.js), we’ll run it now using the following command:
pm2 start app.js
This will show something like:
This PM2 kept our server up and running without any input for a 24 hour test we inadvertently ran yesterday through this morning.
If you have to re-do any of the app.js file you might have to restart the pm2 command, some of the below might be helpful as well in that case. If you have to restart the pm2 command, sometimes it will cause two running processes. You can check what’s running under pm2 processes by using the command pm2 list
pm2 list # this lists the running processes
pm2 stop all # Stop all processes
pm2 restart all # Restart all processes
pm2 reload all # Will 0s downtime reload (for NETWORKED apps)
pm2 stop 0 # Stop specific process id, the id is shown as a 0 in the examples here
pm2 restart 0 # Restart specific process id
pm2 delete 0 # Will remove process from pm2 list
pm2 delete all # Will remove all processes from pm2 list
pm2 reset <process> # Reset meta data (restarted time...)
pm2 updatePM2 # Update in memory pm2
pm2 ping # Ensure pm2 daemon has been launched
Also remember to type “exit” to get out of a terminal window safely. Don’t just close the window with the X on the top.
If you need more help, please email me firstname.lastname@example.org or find me on Facebook.