nginx-mod-rtmp frontend https://chaos.stream
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
Laura Hausmann 83ae31ece7
Add status page to site footer
4 months ago
Controllers Update to reflect nginx-mod-rtmp changes 5 months ago
DataModels Make actual use of the new stats object; remove SrcRes database object 5 months ago
Pages Add status page to site footer 4 months ago
Properties Make actual use of the new stats object; remove SrcRes database object 5 months ago
wwwroot Rebase all 5 months ago
.gitignore Rebase all 5 months ago
LICENSE.md Rebase all 5 months ago
Program.cs Add status page to site footer 4 months ago
README.md Rebrand official instance 5 months ago
RTMPDash.csproj Add persistent sessions using redis 5 months ago
RTMPDash.sln Rebase all 5 months ago
RTMPDash.sln.DotSettings.user Rebase all 5 months ago
Startup.cs Add persistent sessions using redis 5 months ago
StreamUtils.cs Improve efficiency by passing StatsObject to the StreamUtils helper functions instead of requesting it every time 5 months ago
appsettings.Development.json Rebase all 5 months ago
appsettings.json Rebase all 5 months ago
example.db Update profile design; update example.db to reflect recent changes 5 months ago

README.md

RTMPDash

Production instance

Installation

  • Adjust all the const's in Program.cs
  • Copy example.db to app.db
  • Create yourself a user using sqlite3
  • Install nginx-mod-rtmp (arch package: aur/nginx-mod-rtmp-lhaus-git)
  • Configure nginx-mod-rtmp, example config below
  • Install and start redis for persistent sessions
  • Start RTMPDash, example systemd unit below

Further setup

  • Customize privacy policy to your environment if you plan on hosting it publicly
  • Set up player, example code below

nginx-mod-rtmp example config

load_module /usr/lib/nginx/modules/ngx_rtmp_module.so; # load our rtmp module
worker_processes 1; # VERY IMPORTANT, otherwise nginx-mod-rtmp breaks

rtmp {
	log_format rtmp '[$time_local] $command -> $app with key "$name" - $bytes_received bytes received ($session_readable_time)';
	server {
		listen 1935;

		access_log /var/log/nginx/rtmp_access.log rtmp;

		max_message 32M;
		ping 1m;
		ping_timeout 10s;
		drop_idle_publisher 10s;
		notify_method get;

		application ingress {
			live on;

			allow play 127.0.0.1;
			deny play all;

			notify_relay_redirect on;

			on_publish http://localhost:60001/api/authenticate;

			hls on;
			hls_path /mnt/ssd_data/hls/src;
			hls_fragment 1s;
			hls_fragment_naming system;
			hls_playlist_length 60s;
			hls_allow_client_cache enabled;
		}
	}
}

RTMPdash example systemd unit (development)

[Unit]
Description=RTMPDash
Wants=network-online.target
After=network-online.target

[Service]
User=rtmpdash
Group=rtmpdash
WorkingDirectory=/opt/rtmpdash
Environment=ASPNETCORE_URLS='http://*:60001'
Environment=ASPNETCORE_ENVIRONMENT=Development
ExecStart=/usr/bin/dotnet watch run --no-launch-profile
Type=simple
TimeoutStopSec=20

# Lets built in updater work well.
Restart=on-failure
KillMode=control-group

[Install]
WantedBy=multi-user.target

RTMPdash example systemd unit (production)

[Unit]
Description=RTMPDash
Wants=network-online.target
After=network-online.target

[Service]
User=rtmpdash
Group=rtmpdash
WorkingDirectory=/opt/rtmpdash
Environment=ASPNETCORE_URLS='http://*:60001'
Environment=ASPNETCORE_ENVIRONMENT=Production
ExecStart=/usr/bin/dotnet run -c Release --no-launch-profile
Type=simple
TimeoutStopSec=20

# Lets built in updater work well.
Restart=on-failure
KillMode=control-group

[Install]
WantedBy=multi-user.target

VideoJS Player example code

<link href="https://unpkg.com/video.js/dist/video-js.min.css" rel="stylesheet" />
<style>
html,
body {
  margin: 0;
  padding: 0;
}
</style>
<div>
<video id='hls-player' class="video-js vjs-default-skin vjs-big-play-centered" controls>
<source type="application/x-mpegURL" src="https://cdn.chaos.stream/hls/<?php echo $_GET["profile"]."/".$_GET["stream"]; ?>.m3u8">
</video>
</div>
<script src="https://unpkg.com/video.js/dist/video.min.js"></script>
<script>
var player = videojs('hls-player', {liveui: true});
player.fill(true);
</script>

accompanying nginx config for VideoJS Player

location ~ ^/(.+)/(.+)$ {
		rewrite ^/(.+)/(.+)$ /watch.php?stream=$1&profile=$2 last;
}

location ~ ^/(.+)$ {
		rewrite ^/(.+)$ /watch.php?stream=$1&profile=src last;
}