Table of Contents
This is a single-instance streaming server with chat. Originally written to replace Rabbit as the platform for watching movies with a group of people online.
- Go 1.16 or newer
- GNU Make
You can install a newer version of Go alongside your OS's distribution by following the guide here: https://golang.org/doc/manage-install
Once you have that setup add an enviromnent variable named GO_VERSION
and set it to the version you installed (eg, 1.16.1
). The Makefile will now use the newer version.
You have to:
- download
git clone https://github.com/zorchenhimer/MovieNight
, go into the source directorycd MovieNight
; - run
go build
If you want to cross compile instead of running go build
:
- choose your
TARGET
oneof "android darwin dragonfly freebsd linux nacl netbsd openbsd plan9 solaris windows"; - choose your
ARCH
oneof "386 amd64 amd64p32 arm arm64 ppc64 ppc64le mips mipsle mips64 mips64le mips64p32 mips64p32leppc s390 s390x sparc sparc64"; - build
make TARGET=windows ARCH=386
(On BSD systems usegmake
); - and run
./MovieNight
;
Example:
$ git clone https://github.com/zorchenhimer/MovieNight
$ cd MovieNight
$ (make|gmake) TARGET=windows ARCH=386
$ ./MovieNight
The image can be pulled using the command below. View tagged versions at ghcr
docker pull ghcr.io/zorchenhimer/movienight:master
MovieNight provides a Dockerfile and a docker-compose file to run MovieNight using Docker.
Install Docker, clone the repository and build:
docker build -t movienight .
Run the image once it's built:
# with default settings file (this uses the settings_example.json config file)
docker run -d -p 8089:8089 -p 1935:1935 movienight
# using a custom settings file
docker run -d -p 8089:8089 -p 1935:1935 -v ./settings.json:/data/config/settings.json movienight
Explanation:
- -d runs the container in the background.
- -p 8089:8089 maps the MovieNight web interface to port 8089 on the server.
- -p 1935:1935 maps the RTMP port for OBS to port 1935 (default RTMP port) on the server.
- -v ./settings.json:/config/settings.json maps the file settings.json into the container. [OPTIONAL]
docker-compose will automatically build the image, no need to build it manually.
Install Docker and docker-compose, clone the repository and change into the directory ./docker. Then run:
docker-compose up -d
This docker-compose file will create a volume called movienight-config and automatically add the standard settings.json file to it. It also maps port 8089 and 1935 to the same ports of the host.
The container needs to be restarted to apply any changes you make to settings.json.
A FreeNAS & TrueNAS plugin had been released. You should find MovieNight into the plugin section of you management GUI. However you still can make an manual plugin deployment, documentation here If you prefer to make an Jail without using the plugin management, a script wich setup an Jail and build and run MovieNight into that Jail as been written, you'll find it here freenas-iocage-movienight
If you don't like to handle the build and run of your MovieNight instance, here is an samll manual of "how to make it run on Clever-Cloud". Into your Clever-Cloud dashboard:
- Create a "Brand New App" and choose
Go
runtime instance - Name it, choose your datacenter
- You don't neet any "Add-On", unless you want to provide some Emotes to you MovieNight instance
- Add thoses environement-variables (expert mode allow you copy past frome this page):
CC_GO_BUILD_TOOL="gobuild"
Set The build methodCC_GO_PKG="github.com/zorchenhimer/MovieNight"
Set theGo
dependencies originCC_PRE_RUN_HOOK="echo \"{\\\"ApprovedEmotes\\\": true, \\\"Bans\\\": [], \\\"LetThemLurk\\\": false, \\\"ListenAddress\\\": \\\":8080\\\", \\\"LogFile\\\": \\\"thelog.log\\\", \\\"LogLevel\\\": \\\"debug\\\", \\\"MaxMessageCount\\\": 300, \\\"NoCache\\\": false, \\\"NewPin\\\": true, \\\"PageTitle\\\": \\\"Movie Night\\\", \\\"RateLimitAuth\\\": 5, \\\"RateLimitChat\\\": 1, \\\"RateLimitColor\\\": 60, \\\"RateLimitDuplicate\\\": 30, \\\"RateLimitNick\\\": 300, \\\"RegenAdminPass\\\": true, \\\"RtmpListenAddress\\\": \\\":4040\\\", \\\"RoomAccess\\\": \\\"pin\\\", \\\"RoomAccessPin\\\": \\\"9999\\\", \\\"StreamKey\\\": \\\"ALongStreamKey\\\", \\\"StreamStats\\\": true, \\\"TitleLength\\\": 50, \\\"WrappedEmotesOnly\\\": true}\" >> /home/bas/go_home/bin/settings.json"
The command that will build a default configuration filesettings.json
CC_RUN_COMMAND="${MN_BIN_DIR}/${MN_BIN_NAME} -l ${MN_PORT} -r ${MN_RTMP} -s ${MN_STATIC} -k ${MN_STREAM_KEY}"
The run commandMN_BIN_DIR="/home/bas/go_home/bin"
The built binary directoryMN_BIN_NAME="MovieNight"
The name of the runnable binMN_PORT=":8080"
The http portMN_RTMP=":4040"
The rtmp portMN_STATIC="${APP_HOME}/static"
The static contents dirMN_STREAM_KEY="YourStreamKey"
Your secret stream key, you have to change it
- Turn on the TCP redirection
- Try run your MovieNight instance
Here is an example of the Clever-Cloud app Evironement Variables you can use after fex customizations:
CC_GO_BUILD_TOOL="gobuild"
CC_GO_PKG="github.com/zorchenhimer/MovieNight"
CC_PRE_RUN_HOOK="echo \"{\\\"ApprovedEmotes\\\": true, \\\"Bans\\\": [], \\\"LetThemLurk\\\": false, \\\"ListenAddress\\\": \\\":8080\\\", \\\"LogFile\\\": \\\"thelog.log\\\", \\\"LogLevel\\\": \\\"debug\\\", \\\"MaxMessageCount\\\": 300, \\\"NoCache\\\": false, \\\"NewPin\\\": true, \\\"PageTitle\\\": \\\"Movie Night\\\", \\\"RateLimitAuth\\\": 5, \\\"RateLimitChat\\\": 1, \\\"RateLimitColor\\\": 60, \\\"RateLimitDuplicate\\\": 30, \\\"RateLimitNick\\\": 300, \\\"RegenAdminPass\\\": true, \\\"RtmpListenAddress\\\": \\\":4040\\\", \\\"RoomAccess\\\": \\\"pin\\\", \\\"RoomAccessPin\\\": \\\"9999\\\", \\\"StreamKey\\\": \\\"ALongStreamKey\\\", \\\"StreamStats\\\": true, \\\"TitleLength\\\": 50, \\\"WrappedEmotesOnly\\\": true}\" >> /home/bas/go_home/bin/settings.json"
CC_RUN_COMMAND="${MN_BIN_DIR}/${MN_BIN_NAME} -l ${MN_PORT} -r ${MN_RTMP} -s ${MN_STATIC} -k ${MN_STREAM_KEY}"
MN_BIN_DIR="/home/bas/go_home/bin"
MN_BIN_NAME="MovieNight"
MN_PORT=":8080"
MN_RTMP=":4040"
MN_STATIC="${APP_HOME}/static"
MN_STREAM_KEY="YourStreamKey"
Now you can use OBS to push a stream to the server. Set the stream URL to
rtmp:https://your.domain.host/live
and enter the stream key.
Now you can view the stream at
https://your.domain.host:8089/
There is a video only version at
https://your.domain.host:8089/video
and a chat only version at
https://your.domain.host:8089/chat
The default listen port is :8089
. It can be changed by providing a new port at startup:
Usage of .\MovieNight.exe:
-e bool
Whether or not to download approved emotes on startup (default "false")
-k string
Stream key, to protect your stream (default: "")
-l string
host:port of the MovieNight (default ":8089")
-r string
host:port of the RTMP server (default ":1935")
-f string
the settings file you want to use (default "./settings.json")
MovieNight’s configuration is controlled by settings.json
:
- `AdminPassword`: users can enter `/auth <value>` into chat to grant themselves admin privileges. This value is automatically regenerated unless `RegenAdminPass` is false.
- `Bans`: list of banned users.
- `LetThemLurk`: if false, announces when a user enters and leaves chat.
- `ListenAddress`: the port that MovieNight listens on, formatted as `:8089`.
- `LogFile`: the path of the MovieNight logfile, relative to the executable.
- `LogLevel`: the log level, defaults to `debug`.
- `MaxMessageCount`: the number of messages displayed in the chat window.
- `NewPin`: if true, regenerates `RoomAccessPin` when the server starts.
- `NewStreamKey`: if true, uses a random `StreamKey` when the server starts. The command line option takes precedence, and will be used if it is set.
- `PageTitle`: The base string used in the `<title>` element of the page. When the stream title is set with `/playing`, it is appended; e.g., `Movie Night | The Man Who Killed Hitler and Then the Bigfoot`
- `RegenAdminPass`: if true, regenerates `AdminPassword` when the server starts.
- `RoomAccess`: the access policy of the chat room; this is managed by the application and should not be edited manually.
- `RoomAccessPin`: if set, serves as the password required to enter the chatroom.
- `SessionKey`: key used for storing session data (cookies etc.)
- `StreamKey`: the key that OBS will use to connect to MovieNight.
- `StreamStats`: if true, prints statistics for the stream on server shutdown.
- `TitleLength`: the maximum allowed length for the stream title (set with `/playing`).
- `WrappedEmotesOnly`: if true, requires that emote codes be wrapped in colons or brackets; e.g., `:PogChamp:`
- `RateLimitChat`: the number of seconds between each message a non-privileged user can post in chat.
- `RateLimitNick`: the number of seconds before a user can change their nick again.
- `RakeLimitColor`: the number of seconds before a user can change their color again.
- `RateLimitAuth`: the number of seconds between each allowed auth attempt.
- `RateLimitDuplicate`: the numeber of seconds before a user can post a duplicate message.
- `NoCache`: if true, set `Cache-Control: no-cache, must-revalidate` in the HTTP header, to prevent caching responses.
flv.js
is Licensed under the Apache 2.0 license. This project is licened under the MIT license.