l prism.r: add tv.nix

This commit is contained in:
lassulus 2020-12-27 14:56:25 +01:00
parent 2cbed4cab9
commit 99abffb518
2 changed files with 161 additions and 0 deletions

View File

@ -6,6 +6,7 @@ with import <stockholm/lib>;
<stockholm/lass>
<stockholm/lass/2configs/retiolum.nix>
<stockholm/lass/2configs/libvirt.nix>
<stockholm/lass/2configs/tv.nix>
{
services.nginx.enable = true;
imports = [

160
lass/2configs/tv.nix Normal file
View File

@ -0,0 +1,160 @@
{ config, pkgs, ... }: with import <stockholm/lib>; let
nginxCfg = pkgs.writeText "nginx.conf" ''
daemon off;
pid /var/lib/rtmp/nginx.pid;
events {
use epoll;
worker_connections 128;
}
error_log stderr info;
http {
client_body_temp_path /var/lib/rtmp/nginx_cache_client_body;
proxy_temp_path /var/lib/rtmp/nginx_cache_proxy;
fastcgi_temp_path /var/lib/rtmp/nginx_cache_fastcgi;
uwsgi_temp_path /var/lib/rtmp/nginx_cache_uwsgi;
scgi_temp_path /var/lib/rtmp/nginx_cache_scgi;
server {
listen 8080;
root /var/lib/rtmp;
access_log stderr;
error_log stderr;
# This URL provides RTMP statistics in XML
location /stat {
rtmp_stat all;
}
location /hls {
# Serve HLS fragments
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
location /dash {
# Serve DASH fragments
types {
application/dash+xml mpd;
video/mp4 mp4;
}
root /tmp;
add_header Cache-Control no-cache;
# CORS setup
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length';
# Allow CORS preflight requests
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain charset=UTF-8';
add_header 'Content-Length' 0;
return 204;
}
}
location "/dash.all.min.js" {
default_type "text/javascript";
alias ${pkgs.fetchurl {
url = "http://cdn.dashjs.org/v3.2.0/dash.all.min.js";
sha256 = "16f0b40gdqsnwqi01s5sz9f1q86dwzscgc3m701jd1sczygi481c";
}};
}
location /player {
default_type "text/html";
alias ${pkgs.writeText "player.html" ''
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>lassulus livestream</title>
</head>
<body>
<div>
<video id="player" controls></video>
</video>
</div>
<script src="/dash.all.min.js"></script>
<script>
(function(){
var url = "http://lassul.us:8080/dash/nixos.mpd";
var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#player"), url, true);
})();
</script>
</body>
</html>
''};
}
}
}
rtmp {
server {
access_log stderr;
listen 1935;
ping 30s;
notify_method get;
application stream {
live on;
hls on;
hls_path /tmp/hls;
dash on;
dash_path /tmp/dash;
}
}
}
'';
in {
users.users.rtmp = {
home = "/var/lib/rmtp";
uid = genid_uint31 "rtmp";
isNormalUser = true;
createHome = true;
};
systemd.services.nginx-rtmp = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
restartIfChanged = true;
script = ''
${pkgs.nginx.override {
modules = [
pkgs.nginxModules.rtmp
];
}}/bin/nginx -c ${nginxCfg} -p /var/lib/rtmp
'';
serviceConfig = {
User = "rtmp";
};
};
krebs.iptables.tables.filter.INPUT.rules = [
{ predicate = "-p tcp --dport 1935"; target = "ACCEPT"; }
{ predicate = "-p tcp --dport 8080"; target = "ACCEPT"; }
];
}