Merge pull request #216786 from mweinelt/go2rtc

go2rtc: init at 1.5.0

Changed files
+155
nixos
doc
manual
release-notes
modules
services
video
go2rtc
pkgs
tools
video
go2rtc
top-level
+2
nixos/doc/manual/release-notes/rl-2305.section.md
···
- [gmediarender](https://github.com/hzeller/gmrender-resurrect), a simple, headless UPnP/DLNA renderer. Available as [services.gmediarender](options.html#opt-services.gmediarender.enable).
- [harmonia](https://github.com/nix-community/harmonia/), Nix binary cache implemented in rust using libnix-store. Available as [services.harmonia](options.html#opt-services.harmonia.enable).
- [hyprland](https://github.com/hyprwm/hyprland), a dynamic tiling Wayland compositor that doesn't sacrifice on its looks. Available as [programs.hyprland](#opt-programs.hyprland.enable).
···
- [gmediarender](https://github.com/hzeller/gmrender-resurrect), a simple, headless UPnP/DLNA renderer. Available as [services.gmediarender](options.html#opt-services.gmediarender.enable).
+
- [go2rtc](https://github.com/AlexxIT/go2rtc), a camera streaming appliation with support for RTSP, WebRTC, HomeKit, FFMPEG, RTMP and other protocols. Available as [services.go2rtc](options.html#opt-services.go2rtc.enable).
+
- [harmonia](https://github.com/nix-community/harmonia/), Nix binary cache implemented in rust using libnix-store. Available as [services.harmonia](options.html#opt-services.harmonia.enable).
- [hyprland](https://github.com/hyprwm/hyprland), a dynamic tiling Wayland compositor that doesn't sacrifice on its looks. Available as [programs.hyprland](#opt-programs.hyprland.enable).
+1
nixos/modules/module-list.nix
···
./services/ttys/gpm.nix
./services/ttys/kmscon.nix
./services/video/epgstation/default.nix
./services/video/mirakurun.nix
./services/video/replay-sorcery.nix
./services/video/mediamtx.nix
···
./services/ttys/gpm.nix
./services/ttys/kmscon.nix
./services/video/epgstation/default.nix
+
./services/video/go2rtc/default.nix
./services/video/mirakurun.nix
./services/video/replay-sorcery.nix
./services/video/mediamtx.nix
+111
nixos/modules/services/video/go2rtc/default.nix
···
···
+
{ lib
+
, config
+
, options
+
, pkgs
+
, ...
+
}:
+
+
let
+
inherit (lib)
+
literalExpression
+
mdDoc
+
mkEnableOption
+
mkOption
+
mkPackageOptionMD
+
types
+
;
+
+
cfg = config.services.go2rtc;
+
opt = options.services.go2rtc;
+
+
format = pkgs.formats.yaml {};
+
configFile = format.generate "go2rtc.yaml" cfg.settings;
+
in
+
+
{
+
meta.buildDocsInSandbox = false;
+
+
options.services.go2rtc = with types; {
+
enable = mkEnableOption (mdDoc "go2rtc streaming server");
+
+
package = mkPackageOptionMD pkgs "go2rtc" { };
+
+
settings = mkOption {
+
default = {};
+
description = mdDoc ''
+
go2rtc configuration as a Nix attribute set.
+
+
See the [wiki](https://github.com/AlexxIT/go2rtc/wiki/Configuration) for possible configuration options.
+
'';
+
type = submodule {
+
freeformType = format.type;
+
options = {
+
# https://github.com/AlexxIT/go2rtc/blob/v1.5.0/README.md#module-api
+
api = {
+
listen = mkOption {
+
type = str;
+
default = ":1984";
+
example = "127.0.0.1:1984";
+
description = mdDoc ''
+
API listen address, conforming to a Go address string.
+
'';
+
};
+
};
+
+
# https://github.com/AlexxIT/go2rtc/blob/v1.5.0/README.md#source-ffmpeg
+
ffmpeg = {
+
bin = mkOption {
+
type = path;
+
default = "${lib.getBin pkgs.ffmpeg_6-headless}/bin/ffmpeg";
+
defaultText = literalExpression "\${lib.getBin pkgs.ffmpeg_6-headless}/bin/ffmpeg";
+
description = mdDoc ''
+
The ffmpeg package to use for transcoding.
+
'';
+
};
+
};
+
+
# TODO: https://github.com/AlexxIT/go2rtc/blob/v1.5.0/README.md#module-rtsp
+
rtsp = {
+
};
+
+
streams = mkOption {
+
type = attrsOf (either str (listOf str));
+
default = {};
+
example = literalExpression ''
+
{
+
cam1 = "onvif://admin:password@192.168.1.123:2020";
+
cam2 = "tcp://192.168.1.123:12345";
+
}
+
'';
+
description = mdDoc ''
+
Stream source configuration. Multiple source types are supported.
+
+
Check the [configuration reference](https://github.com/AlexxIT/go2rtc/blob/v${cfg.package.version}/README.md#module-streams) for possible options.
+
'';
+
};
+
+
# TODO: https://github.com/AlexxIT/go2rtc/blob/v1.5.0/README.md#module-webrtc
+
webrtc = {
+
};
+
};
+
};
+
};
+
};
+
+
config = lib.mkIf cfg.enable {
+
systemd.services.go2rtc = {
+
after = [
+
"network-online.target"
+
];
+
wantedBy = [
+
"multi-user.target"
+
];
+
serviceConfig = {
+
DynamicUser = true;
+
User = "go2rtc";
+
StateDirectory = "go2rtc";
+
ExecStart = "${cfg.package}/bin/go2rtc -config ${configFile}";
+
};
+
};
+
};
+
}
+39
pkgs/tools/video/go2rtc/default.nix
···
···
+
{ lib
+
, buildGoModule
+
, fetchFromGitHub
+
}:
+
+
buildGoModule rec {
+
pname = "go2rtc";
+
version = "1.5.0";
+
+
src = fetchFromGitHub {
+
owner = "AlexxIT";
+
repo = "go2rtc";
+
rev = "refs/tags/v${version}";
+
hash = "sha256-1QCw+/XUV8aoNxo2h+8ud6gx7KMFi4hStf7Ezgg5md8=";
+
};
+
+
vendorHash = "sha256-iav7k4HLyXO94qofcHxVxhV8BV2k5oiTtX8kVyxnpoI=";
+
+
buildFlagArrays = [
+
"-trimpath"
+
];
+
+
CGO_ENABLED = 0;
+
+
ldflags = [
+
"-s"
+
"-w"
+
];
+
+
doCheck = false; # tests fail
+
+
meta = with lib; {
+
description = "Ultimate camera streaming application with support RTSP, RTMP, HTTP-FLV, WebRTC, MSE, HLS, MJPEG, HomeKit, FFmpeg, etc.";
+
homepage = "https://github.com/AlexxIT/go2rtc";
+
changelog = "https://github.com/AlexxIT/go2rtc/releases/tag/v${version}";
+
license = licenses.mit;
+
maintainers = with maintainers; [ hexa ];
+
};
+
}
+2
pkgs/top-level/all-packages.nix
···
};
go2tv-lite = go2tv.override { withGui = false; };
goimapnotify = callPackage ../tools/networking/goimapnotify { };
gojsontoyaml = callPackage ../development/tools/gojsontoyaml { };
···
};
go2tv-lite = go2tv.override { withGui = false; };
+
go2rtc = callPackage ../tools/video/go2rtc { };
+
goimapnotify = callPackage ../tools/networking/goimapnotify { };
gojsontoyaml = callPackage ../development/tools/gojsontoyaml { };