Merge branch 'obs-ndi' into 'master'

nongnu: Add ndi.

See merge request nonguix/nonguix!508
This commit is contained in:
Oleg Pykhalov 2024-11-23 12:46:29 +00:00
commit 6ca4007cc6
2 changed files with 192 additions and 0 deletions

View File

@ -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)))

View 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));