Merge branch 'obs-ndi' into 'master'
nongnu: Add ndi. See merge request nonguix/nonguix!508
This commit is contained in:
commit
6ca4007cc6
|
@ -3,15 +3,26 @@
|
|||
;;; Copyright © 2024 Oleg Pykhalov <go.wigust@gmail.com>
|
||||
|
||||
(define-module (nongnu packages video)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages avahi)
|
||||
#:use-module (gnu packages base)
|
||||
#:use-module (gnu packages bash)
|
||||
#:use-module (gnu packages compression)
|
||||
#:use-module (gnu packages elf)
|
||||
#:use-module (gnu packages gawk)
|
||||
#:use-module (gnu packages gcc)
|
||||
#:use-module (gnu packages pkg-config)
|
||||
#:use-module (gnu packages qt)
|
||||
#:use-module (gnu packages video)
|
||||
#:use-module (guix build utils)
|
||||
#:use-module (guix build-system cmake)
|
||||
#:use-module (guix build-system trivial)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module (guix packages)
|
||||
#:use-module (guix utils)
|
||||
#:use-module ((guix licenses) #:prefix license:)
|
||||
#:use-module ((nonguix licenses) #:prefix nonguix-license:)
|
||||
#:use-module (nongnu packages chromium))
|
||||
|
||||
(define-public gmmlib
|
||||
|
@ -156,3 +167,170 @@ video decode capabilities of supported Intel GPUs."))))
|
|||
(package-description obs)
|
||||
" This build of OBS includes embeded Chromium-based browser to enable
|
||||
Browser source."))))
|
||||
|
||||
(define-public ndi
|
||||
(package
|
||||
(name "ndi")
|
||||
(version "5.6.1") ;NDI SDK version from Linux/Version.txt file.
|
||||
(source (local-file "/tmp/Install_NDI_SDK_v5_Linux.tar.gz"))
|
||||
(build-system trivial-build-system)
|
||||
(inputs (list bash-minimal tar findutils coreutils gawk gzip tar glibc patchelf `(,gcc "lib") avahi))
|
||||
(native-inputs `(("source" ,source)))
|
||||
(arguments
|
||||
(list
|
||||
#:modules '((guix build utils))
|
||||
#:builder
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(setenv "PATH"
|
||||
(string-append
|
||||
#$(this-package-input "gzip") "/bin"
|
||||
":" #$(this-package-input "tar") "/bin"
|
||||
":" #$(this-package-input "avahi") "/bin"
|
||||
":" #$(this-package-input "bash-minimal") "/bin"
|
||||
":" #$(this-package-input "gawk") "/bin"
|
||||
":" #$(this-package-input "findutils") "/bin"
|
||||
":" #$(this-package-input "tar") "/bin"
|
||||
":" #$(this-package-input "coreutils") "/bin"
|
||||
":" #$(this-package-input "patchelf") "/bin"))
|
||||
(invoke "tar" "-xf" #$(this-package-native-input "source"))
|
||||
(system "echo y | bash -x ./Install_NDI_SDK_v5_Linux.sh")
|
||||
;; Install binaries.
|
||||
(mkdir-p (string-append #$output "/bin"))
|
||||
(for-each (lambda (file)
|
||||
(invoke
|
||||
"patchelf"
|
||||
"--set-interpreter" (string-append
|
||||
#$(this-package-input "glibc")
|
||||
"/lib/ld-linux-x86-64.so.2")
|
||||
(string-append
|
||||
"NDI SDK for Linux/bin/x86_64-linux-gnu/" file))
|
||||
(copy-file
|
||||
(string-append
|
||||
"NDI SDK for Linux/bin/x86_64-linux-gnu/" file)
|
||||
(string-append
|
||||
#$output "/bin/" file)))
|
||||
'("ndi-benchmark"
|
||||
"ndi-free-audio"
|
||||
"ndi-directory-service"))
|
||||
(invoke "patchelf"
|
||||
"--set-interpreter" (string-append
|
||||
#$(this-package-input "glibc")
|
||||
"/lib/ld-linux-x86-64.so.2")
|
||||
"--set-rpath" (string-append
|
||||
#$(this-package-input "avahi") "/lib")
|
||||
(string-append
|
||||
"NDI SDK for Linux/bin/x86_64-linux-gnu/ndi-record"))
|
||||
(copy-file "NDI SDK for Linux/bin/x86_64-linux-gnu/ndi-record"
|
||||
(string-append #$output "/bin/ndi-record"))
|
||||
;; Install libraries.
|
||||
(mkdir-p (string-append #$output "/lib"))
|
||||
(for-each (lambda (file)
|
||||
(invoke
|
||||
"patchelf"
|
||||
"--set-rpath" (string-append
|
||||
#$(this-package-input "avahi") "/lib")
|
||||
(string-append "NDI SDK for Linux/lib/x86_64-linux-gnu/" file))
|
||||
(copy-file
|
||||
(string-append
|
||||
"NDI SDK for Linux/lib/x86_64-linux-gnu/" file)
|
||||
(string-append
|
||||
#$output "/lib/" file)))
|
||||
'("libndi.so.5.6.1"))
|
||||
(with-directory-excursion (string-append #$output "/lib")
|
||||
(for-each (lambda (file)
|
||||
(symlink "libndi.so.5.6.1" file))
|
||||
'("libndi.so.5"
|
||||
"libndi.so")))
|
||||
;; Install misc.
|
||||
(for-each (lambda (directory)
|
||||
(mkdir-p (string-append #$output "/" directory))
|
||||
(copy-recursively (string-append
|
||||
"NDI SDK for Linux/" directory)
|
||||
(string-append
|
||||
#$output "/" directory)))
|
||||
'("include" "examples"))
|
||||
(mkdir-p (string-append #$output "/doc"))
|
||||
(for-each (lambda (directory)
|
||||
(mkdir-p (string-append #$output "/doc/" directory))
|
||||
(copy-recursively (string-append
|
||||
"NDI SDK for Linux/" directory)
|
||||
(string-append
|
||||
#$output "/doc/" directory)))
|
||||
'("licenses"))
|
||||
(copy-recursively (string-append
|
||||
"NDI SDK for Linux/documentation")
|
||||
(string-append #$output "/doc")))))
|
||||
(home-page "https://ndi.video/for-developers/ndi-sdk/")
|
||||
(synopsis "NDI Software Developer Kit")
|
||||
(description "The NDI (Network Device Interface) SDK enables the
|
||||
development of applications that can transmit and receive high-quality video
|
||||
and audio over standard Ethernet networks. Designed for real-time production
|
||||
environments, the NDI SDK provides a simple and efficient API for handling
|
||||
video streaming, discovery of sources, and communication between devices.
|
||||
With support for multiple platforms, including Linux, NDI offers features such
|
||||
as low latency, high bandwidth efficiency, and multi-channel audio support,
|
||||
making it ideal for broadcast, live streaming, and video conferencing
|
||||
applications. Lightweight and easy to integrate, the NDI SDK empowers
|
||||
developers to create powerful multimedia solutions that leverage the full
|
||||
potential of networked audio and video.
|
||||
|
||||
In order to use NDI SDK version, you need to comply with NewTek's license and
|
||||
download the appropriate Linux tarball from:
|
||||
|
||||
https://downloads.ndi.tv/SDK/NDI_SDK_Linux/Install_NDI_SDK_v5_Linux.tar.gz
|
||||
|
||||
Once you have downloaded the file, re-run the installation.")
|
||||
(license
|
||||
(nonguix-license:nonfree
|
||||
"https://downloads.ndi.tv/SDK/NDI_SDK/NDI%20License%20Agreement.pdf"))))
|
||||
|
||||
(define-public obs-ndi
|
||||
(package
|
||||
(name "obs-ndi")
|
||||
(version "4.11.1")
|
||||
(source (origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://github.com/DistroAV/DistroAV")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32
|
||||
"1wsb1k0jilcn6gqgpq5kq8hjiwnb6mi2w32fsqgb88iicwj1qa3y"))
|
||||
(patches (append (search-patches "obs-ndi-hardcode-path.patch")))))
|
||||
(build-system cmake-build-system)
|
||||
(inputs (list ndi obs qtbase-5))
|
||||
(arguments
|
||||
(list
|
||||
#:tests? #f ;no tests
|
||||
#:phases
|
||||
#~(modify-phases %standard-phases
|
||||
(add-before 'configure 'ndi
|
||||
(lambda* (#:key inputs #:allow-other-keys)
|
||||
(let ((ndi #$(this-package-input "ndi")))
|
||||
(substitute* "src/obs-ndi.cpp"
|
||||
(("@NDI@") ndi))
|
||||
(delete-file-recursively "lib/ndi")
|
||||
(symlink (string-append ndi "/include")
|
||||
"lib/ndi"))))
|
||||
(add-after 'install 'obs-plugins
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(mkdir-p (string-append #$output "/lib/obs-plugins"))
|
||||
(symlink
|
||||
(string-append #$output
|
||||
"/obs-plugins/64bit/obs-ndi.so")
|
||||
(string-append #$output
|
||||
"/lib/obs-plugins/obs-ndi.so")))))))
|
||||
(home-page "https://github.com/DistroAV/DistroAV")
|
||||
(synopsis "Network Audio/Video in OBS-Studio using NDI technology")
|
||||
(description "This packages provides a network A/V plugin for OBS Studio.
|
||||
|
||||
Features:
|
||||
@itemize
|
||||
@item NDI Source: Receive NDI video and audio in OBS.
|
||||
@item NDI Output: Transmit OBS video and audio to NDI.
|
||||
@item NDI Filter (a.k.a. NDI Dedicated Output): Transmit a single OBS source
|
||||
or scene audio to NDI.
|
||||
@end itemize\n")
|
||||
(license license:gpl2)))
|
||||
|
|
14
obs-ndi-hardcode-path.patch
Normal file
14
obs-ndi-hardcode-path.patch
Normal file
|
@ -0,0 +1,14 @@
|
|||
--- a/src/obs-ndi.cpp 1970-01-01 03:00:01.000000000 +0300
|
||||
+++ b/src/obs-ndi.cpp 2024-08-04 03:58:33.271766959 +0300
|
||||
@@ -229,10 +229,7 @@
|
||||
if (!path.isEmpty()) {
|
||||
locations << path;
|
||||
}
|
||||
-#if defined(__linux__) || defined(__APPLE__)
|
||||
- locations << "/usr/lib";
|
||||
- locations << "/usr/local/lib";
|
||||
-#endif
|
||||
+ locations << "@NDI@/lib";
|
||||
for (QString location : locations) {
|
||||
path = QDir::cleanPath(
|
||||
QDir(location).absoluteFilePath(NDILIB_LIBRARY_NAME));
|
Loading…
Reference in New Issue
Block a user