From d8399b1e5839fe8ad651374f217af917dcfae627 Mon Sep 17 00:00:00 2001 From: Oleg Pykhalov Date: Sun, 4 Aug 2024 13:24:27 +0300 Subject: [PATCH] nongnu: Add ndi. * nongnu/packages/video.scm (ndi): New variable. --- nongnu/packages/video.scm | 126 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/nongnu/packages/video.scm b/nongnu/packages/video.scm index e5af3a1..4100270 100644 --- a/nongnu/packages/video.scm +++ b/nongnu/packages/video.scm @@ -3,15 +3,24 @@ ;;; Copyright © 2024 Oleg Pykhalov (define-module (nongnu packages video) + #: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 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 +165,120 @@ 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"))))