Merge pull request #216786 from mweinelt/go2rtc

go2rtc: init at 1.5.0
This commit is contained in:
Martin Weinelt 2023-05-22 16:00:54 +02:00 committed by GitHub
commit 958fc81472
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 155 additions and 0 deletions

View file

@ -64,6 +64,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [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).

View file

@ -1150,6 +1150,7 @@
./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

View file

@ -0,0 +1,111 @@
{ 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}";
};
};
};
}

View file

@ -0,0 +1,39 @@
{ 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 ];
};
}

View file

@ -3466,6 +3466,8 @@ with pkgs;
};
go2tv-lite = go2tv.override { withGui = false; };
go2rtc = callPackage ../tools/video/go2rtc { };
goimapnotify = callPackage ../tools/networking/goimapnotify { };
gojsontoyaml = callPackage ../development/tools/gojsontoyaml { };