obs-studio: add plugin wrapper (#125308)
* obs-studio: tidy things up a little * obs-studio: add plugin wrapper This allows users to install plugins into their OBS Studio, like so: wrapOBS { plugins = with obs-studio-plugins; [ wlrobs obs-multi-rtmp obs-gstreamer ]; } * obs-gstreamer: convert to plugin * obs-move-transition: convert to plugin * obs-multi-rtmp: convert to plugin * obs-ndi: convert to plugin * obs-v4l2sink: remove The functionality provided by this package is included in the upstream project as of version 26.1. Link: https://github.com/CatxFish/obs-v4l2sink/issues/56#issuecomment-753191690 Link: https://github.com/obsproject/obs-studio/releases/tag/26.1.0 * wlrobs: convert to plugin, unstable-2020-06-22 -> unstable-2021-05-13
This commit is contained in:
parent
b26545db7e
commit
e8e0255162
15 changed files with 96 additions and 160 deletions
|
@ -114,13 +114,13 @@ in mkDerivation rec {
|
|||
];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/obs \
|
||||
--prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib"
|
||||
wrapProgram $out/bin/obs \
|
||||
--prefix "LD_LIBRARY_PATH" : "${xorg.libX11.out}/lib:${libvlc}/lib"
|
||||
'';
|
||||
|
||||
postFixup = lib.optionalString stdenv.isLinux ''
|
||||
addOpenGLRunpath $out/lib/lib*.so
|
||||
addOpenGLRunpath $out/lib/obs-plugins/*.so
|
||||
addOpenGLRunpath $out/lib/lib*.so
|
||||
addOpenGLRunpath $out/lib/obs-plugins/*.so
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
|
@ -131,7 +131,7 @@ in mkDerivation rec {
|
|||
video content, efficiently
|
||||
'';
|
||||
homepage = "https://obsproject.com";
|
||||
maintainers = with maintainers; [ jb55 MP2E ];
|
||||
maintainers = with maintainers; [ jb55 MP2E V ];
|
||||
license = licenses.gpl2;
|
||||
platforms = [ "x86_64-linux" "i686-linux" ];
|
||||
};
|
||||
|
|
9
pkgs/applications/video/obs-studio/plugins/default.nix
Normal file
9
pkgs/applications/video/obs-studio/plugins/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
|||
{ callPackage, libsForQt5 }:
|
||||
|
||||
{
|
||||
obs-gstreamer = callPackage ./obs-gstreamer.nix {};
|
||||
obs-move-transition = callPackage ./obs-move-transition.nix {};
|
||||
obs-multi-rtmp = libsForQt5.callPackage ./obs-multi-rtmp.nix {};
|
||||
obs-ndi = libsForQt5.callPackage ./obs-ndi.nix {};
|
||||
wlrobs = callPackage ./wlrobs.nix {};
|
||||
}
|
|
@ -22,18 +22,6 @@ stdenv.mkDerivation rec {
|
|||
nativeBuildInputs = [ pkg-config meson ninja ];
|
||||
buildInputs = [ gst_all_1.gstreamermm obs-studio ];
|
||||
|
||||
# obs-studio expects the shared object to be located in bin/32bit or bin/64bit
|
||||
# https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
|
||||
postInstall = let
|
||||
pluginPath = {
|
||||
i686-linux = "bin/32bit";
|
||||
x86_64-linux = "bin/64bit";
|
||||
}.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
|
||||
in ''
|
||||
mkdir -p $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath}
|
||||
ln -s $out/lib/obs-plugins/obs-gstreamer.so $out/share/obs/obs-plugins/obs-gstreamer/${pluginPath}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "An OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio";
|
||||
homepage = "https://github.com/fswoch/obs-gstreamer";
|
|
@ -39,18 +39,6 @@ stdenv.mkDerivation rec {
|
|||
substituteInPlace audio-move.c --replace '<../UI/obs-frontend-api/obs-frontend-api.h>' '<obs-frontend-api.h>'
|
||||
'';
|
||||
|
||||
# obs-studio expects the shared object to be located in bin/32bit or bin/64bit
|
||||
# https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
|
||||
postInstall = let
|
||||
pluginPath = {
|
||||
i686-linux = "bin/32bit";
|
||||
x86_64-linux = "bin/64bit";
|
||||
}.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
|
||||
in ''
|
||||
mkdir -p $out/share/obs/obs-plugins/move-transition/${pluginPath}
|
||||
ln -s $out/lib/obs-plugins/move-transition.so $out/share/obs/obs-plugins/move-transition/${pluginPath}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Plugin for OBS Studio to move source to a new position during scene transition";
|
||||
homepage = "https://github.com/exeldro/obs-move-transition";
|
|
@ -20,18 +20,6 @@ stdenv.mkDerivation rec {
|
|||
|
||||
dontWrapQtApps = true;
|
||||
|
||||
# obs-studio expects the shared object to be located in bin/32bit or bin/64bit
|
||||
# https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
|
||||
postInstall = let
|
||||
pluginPath = {
|
||||
i686-linux = "bin/32bit";
|
||||
x86_64-linux = "bin/64bit";
|
||||
}.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
|
||||
in ''
|
||||
mkdir -p $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath}
|
||||
ln -s $out/lib/obs-plugins/obs-multi-rtmp.so $out/share/obs/obs-plugins/obs-multi-rtmp/${pluginPath}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/sorayuki/obs-multi-rtmp/";
|
||||
changelog = "https://github.com/sorayuki/obs-multi-rtmp/releases/tag/${version}";
|
|
@ -1,10 +1,3 @@
|
|||
# We don't have a wrapper which can supply obs-studio plugins so you have to
|
||||
# somewhat manually install this:
|
||||
|
||||
# nix-env -f "<nixpkgs>" -iA obs-ndi
|
||||
# mkdir -p ~/.config/obs-studio/plugins/bin
|
||||
# ln -s ~/.nix-profile/lib/obs-plugins/obs-ndi.so ~/.config/obs-studio/plugins/bin/
|
||||
|
||||
{ lib, stdenv, fetchFromGitHub, obs-studio, cmake, qtbase, ndi }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
26
pkgs/applications/video/obs-studio/plugins/wlrobs.nix
Normal file
26
pkgs/applications/video/obs-studio/plugins/wlrobs.nix
Normal file
|
@ -0,0 +1,26 @@
|
|||
{ lib, stdenv, fetchhg
|
||||
, meson, pkg-config, ninja
|
||||
, wayland, obs-studio, libX11
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "wlrobs";
|
||||
version = "unstable-2021-05-13";
|
||||
|
||||
src = fetchhg {
|
||||
url = "https://hg.sr.ht/~scoopta/wlrobs";
|
||||
rev = "4184a4a8ea7dc054c993efa16007f3a75b2c6f51";
|
||||
sha256 = "146xirzd3nw1sd216y406v1riky9k08b6a0j4kwxrif5zyqa3adc";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ meson pkg-config ninja ];
|
||||
buildInputs = [ wayland obs-studio libX11 ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors";
|
||||
homepage = "https://hg.sr.ht/~scoopta/wlrobs";
|
||||
maintainers = with maintainers; [ grahamc V ];
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, cmake
|
||||
, qtbase
|
||||
, obs-studio
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "obs-v4l2sink";
|
||||
version = "0.1.0-12-g1ec3c8a";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CatxFish";
|
||||
repo = "obs-v4l2sink";
|
||||
rev = version;
|
||||
sha256 = "03ah91cm1qz26k90mfx51l0d598i9bcmw39lkikjs1msm4c9dfxx";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake ];
|
||||
buildInputs = [ qtbase obs-studio ];
|
||||
|
||||
dontWrapQtApps = true;
|
||||
|
||||
patches = [
|
||||
# Fixes the segfault when stopping the plugin
|
||||
(fetchpatch {
|
||||
url = "https://github.com/CatxFish/obs-v4l2sink/commit/6604f01796d1b84a95714730ea51a6b8ac0e450b.diff";
|
||||
sha256 = "0crcvw02dj0aqy7hnhizjdsnhiw03zmg6cbdkasxz2mrrbyc3s88";
|
||||
})
|
||||
];
|
||||
|
||||
cmakeFlags = with lib; [
|
||||
"-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs"
|
||||
];
|
||||
|
||||
# obs-studio expects the shared object to be located in bin/32bit or bin/64bit
|
||||
# https://github.com/obsproject/obs-studio/blob/d60c736cb0ec0491013293c8a483d3a6573165cb/libobs/obs-nix.c#L48
|
||||
postInstall = let
|
||||
pluginPath = {
|
||||
i686-linux = "bin/32bit";
|
||||
x86_64-linux = "bin/64bit";
|
||||
}.${stdenv.targetPlatform.system} or (throw "Unsupported system: ${stdenv.targetPlatform.system}");
|
||||
in ''
|
||||
mkdir -p $out/share/obs/obs-plugins/v4l2sink/${pluginPath}
|
||||
ln -s $out/lib/obs-plugins/v4l2sink.so $out/share/obs/obs-plugins/v4l2sink/${pluginPath}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "obs studio output plugin for Video4Linux2 device";
|
||||
homepage = "https://github.com/CatxFish/obs-v4l2sink";
|
||||
maintainers = with maintainers; [ colemickens peelz ];
|
||||
license = licenses.gpl2;
|
||||
platforms = [ "x86_64-linux" "i686-linux" ];
|
||||
};
|
||||
}
|
|
@ -1,42 +0,0 @@
|
|||
# (the following is somewhat lifted from ./linuxbrowser.nix)
|
||||
# We don't have a wrapper which can supply obs-studio plugins so you have to
|
||||
# somewhat manually install this:
|
||||
|
||||
# nix-env -f . -iA obs-wlrobs
|
||||
# mkdir -p ~/.config/obs-studio/plugins/wlrobs/bin/64bit
|
||||
# ln -s ~/.nix-profile/share/obs/obs-plugins/wlrobs/bin/64bit/libwlrobs.so ~/.config/obs-studio/plugins/wlrobs/bin/64bit
|
||||
{ stdenv, fetchhg, wayland, obs-studio
|
||||
, meson, ninja, pkg-config, libX11
|
||||
, dmabufSupport ? false, libdrm ? null, libGL ? null, lib}:
|
||||
|
||||
assert dmabufSupport -> libdrm != null && libGL != null;
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "obs-wlrobs";
|
||||
version = "20200622";
|
||||
|
||||
src = fetchhg {
|
||||
url = "https://hg.sr.ht/~scoopta/wlrobs";
|
||||
rev = "1d3acaaf64049da3da9721aa8b9b47582fe0081b";
|
||||
sha256 = "0qrcf8024r4ynfjw0zx8vn59ygx9q5rb196s6nyxmy3gkv2lfxlq";
|
||||
};
|
||||
|
||||
buildInputs = [ libX11 libGL libdrm meson ninja pkg-config wayland obs-studio ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/obs/obs-plugins/wlrobs/bin/64bit
|
||||
cp ./libwlrobs.so $out/share/obs/obs-plugins/wlrobs/bin/64bit/
|
||||
'';
|
||||
|
||||
mesonFlags = [
|
||||
"-Duse_dmabuf=${lib.boolToString dmabufSupport}"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors";
|
||||
homepage = "https://hg.sr.ht/~scoopta/wlrobs";
|
||||
maintainers = with maintainers; [ grahamc ];
|
||||
license = licenses.gpl3;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
21
pkgs/applications/video/obs-studio/wrapper.nix
Normal file
21
pkgs/applications/video/obs-studio/wrapper.nix
Normal file
|
@ -0,0 +1,21 @@
|
|||
{ obs-studio, symlinkJoin, makeWrapper }:
|
||||
|
||||
{ plugins ? [] }:
|
||||
|
||||
symlinkJoin {
|
||||
name = "wrapped-${obs-studio.name}";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
paths = [ obs-studio ] ++ plugins;
|
||||
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/obs \
|
||||
--set OBS_PLUGINS_PATH "$out/lib/obs-plugins" \
|
||||
--set OBS_PLUGINS_DATA_PATH "$out/share/obs/obs-plugins"
|
||||
'';
|
||||
|
||||
inherit (obs-studio) meta;
|
||||
passthru = obs-studio.passthru // {
|
||||
passthru.unwrapped = obs-studio;
|
||||
};
|
||||
}
|
|
@ -1018,6 +1018,38 @@ mapAliases ({
|
|||
& maintenance is abandoned by upstream.
|
||||
'';
|
||||
|
||||
# Added 2021-06-01
|
||||
obs-gstreamer = throw ''
|
||||
obs-gstreamer has been converted into a plugin for use with wrapOBS.
|
||||
Its new location is obs-studio-plugins.obs-gstreamer.
|
||||
'';
|
||||
|
||||
# Added 2021-06-01
|
||||
obs-move-transition = throw ''
|
||||
obs-move-transition has been converted into a plugin for use with wrapOBS.
|
||||
Its new location is obs-studio-plugins.obs-move-transition.
|
||||
'';
|
||||
|
||||
# Added 2021-06-01
|
||||
obs-multi-rtmp = throw ''
|
||||
obs-multi-rtmp has been converted into a plugin for use with wrapOBS.
|
||||
Its new location is obs-studio-plugins.obs-multi-rtmp.
|
||||
'';
|
||||
|
||||
# Added 2021-06-01
|
||||
obs-ndi = throw ''
|
||||
obs-ndi has been converted into a plugin for use with wrapOBS.
|
||||
Its new location is obs-studio-plugins.obs-ndi.
|
||||
'';
|
||||
|
||||
obs-v4l2sink = throw "obs-v4l2sink is integrated into upstream OBS since version 26.1"; # Added 2021-06-01
|
||||
|
||||
# Added 2021-06-01
|
||||
obs-wlrobs = throw ''
|
||||
wlrobs has been converted into a plugin for use with wrapOBS.
|
||||
Its new location is obs-studio-plugins.wlrobs.
|
||||
'';
|
||||
|
||||
/* If these are in the scope of all-packages.nix, they cause collisions
|
||||
between mixed versions of qt. See:
|
||||
https://github.com/NixOS/nixpkgs/pull/101369 */
|
||||
|
|
|
@ -25819,19 +25819,9 @@ in
|
|||
|
||||
oberon-risc-emu = callPackage ../misc/emulators/oberon-risc-emu { };
|
||||
|
||||
obs-studio = libsForQt5.callPackage ../applications/video/obs-studio { };
|
||||
|
||||
obs-wlrobs = callPackage ../applications/video/obs-studio/wlrobs.nix { };
|
||||
|
||||
obs-gstreamer = callPackage ../applications/video/obs-studio/obs-gstreamer.nix { };
|
||||
|
||||
obs-move-transition = callPackage ../applications/video/obs-studio/obs-move-transition.nix { };
|
||||
|
||||
obs-multi-rtmp = libsForQt5.callPackage ../applications/video/obs-studio/obs-multi-rtmp.nix { };
|
||||
|
||||
obs-v4l2sink = libsForQt5.callPackage ../applications/video/obs-studio/v4l2sink.nix { };
|
||||
|
||||
obs-ndi = libsForQt5.callPackage ../applications/video/obs-studio/obs-ndi.nix { };
|
||||
obs-studio = libsForQt5.callPackage ../applications/video/obs-studio {};
|
||||
obs-studio-plugins = callPackage ../applications/video/obs-studio/plugins {};
|
||||
wrapOBS = callPackage ../applications/video/obs-studio/wrapper.nix {};
|
||||
|
||||
obsidian = callPackage ../applications/misc/obsidian { };
|
||||
|
||||
|
|
Loading…
Reference in a new issue