diff options
| -rw-r--r-- | machines/fourmi/default.nix | 1 | ||||
| -rw-r--r-- | modules/go2rtc.nix | 36 | ||||
| -rw-r--r-- | modules/klipper.nix | 7 |
3 files changed, 44 insertions, 0 deletions
diff --git a/machines/fourmi/default.nix b/machines/fourmi/default.nix index 091391a..b6b8712 100644 --- a/machines/fourmi/default.nix +++ b/machines/fourmi/default.nix @@ -7,6 +7,7 @@ ./hardware.nix ./devices.nix + ../../modules/go2rtc.nix ../../modules/klipper.nix ]; diff --git a/modules/go2rtc.nix b/modules/go2rtc.nix new file mode 100644 index 0000000..7ee7ae3 --- /dev/null +++ b/modules/go2rtc.nix @@ -0,0 +1,36 @@ +{ me, ... }: + +let + ffmpegDevice = + device: format: resolution: hz: + "ffmpeg:device?video=${device}&input_format=${format}&video_size=${resolution}&framerate=${hz}#video=h264#hardware"; + + go2rtcPort = 1984; + webrtcPort = 8555; +in +{ + services.go2rtc = { + enable = true; + + settings = { + api = { + listen = "${me.tailscale.ip}:${toString go2rtcPort}"; + base_path = "/webcam"; + origin = "*"; # stop cors annoyance! + }; + + webrtc = + let + address = "${me.tailscale.ip}:${toString webrtcPort}"; + in + { + listen = address; + candidates = [ address ]; + }; + + streams = { + webcam = ffmpegDevice "/dev/video0" "yuyv422" "1280x720" "30"; + }; + }; + }; +} diff --git a/modules/klipper.nix b/modules/klipper.nix index 4f7be74..646969f 100644 --- a/modules/klipper.nix +++ b/modules/klipper.nix @@ -15,6 +15,8 @@ let ${../assets/printer/mainsail.cfg} \ > $out ''; + + webcamPort = 1984; in { users.users.klipper = { @@ -80,6 +82,11 @@ in forceSSL = true; listenAddresses = [ me.tailscale.ip ]; + locations."/webcam" = { + proxyPass = "http://${me.tailscale.ip}:${toString webcamPort}"; + proxyWebsockets = true; + }; + extraConfig = '' access_log /var/log/nginx/3d.access.log json_combined; ''; |
