nongnu: Add ndi.

* nongnu/packages/video.scm (ndi): New variable.
This commit is contained in:
Oleg Pykhalov 2024-08-04 13:24:27 +03:00
parent 1b0594dc53
commit d8399b1e58
No known key found for this signature in database
GPG Key ID: 167F8EA5001AFA9C

View File

@ -3,15 +3,24 @@
;;; Copyright © 2024 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2024 Oleg Pykhalov <go.wigust@gmail.com>
(define-module (nongnu packages video) (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 pkg-config)
#:use-module (gnu packages video) #:use-module (gnu packages video)
#:use-module (guix build utils) #:use-module (guix build utils)
#:use-module (guix build-system cmake) #:use-module (guix build-system cmake)
#:use-module (guix build-system trivial)
#:use-module (guix gexp) #:use-module (guix gexp)
#:use-module (guix git-download) #:use-module (guix git-download)
#:use-module (guix packages) #:use-module (guix packages)
#:use-module (guix utils) #:use-module (guix utils)
#:use-module ((guix licenses) #:prefix license:) #:use-module ((guix licenses) #:prefix license:)
#:use-module ((nonguix licenses) #:prefix nonguix-license:)
#:use-module (nongnu packages chromium)) #:use-module (nongnu packages chromium))
(define-public gmmlib (define-public gmmlib
@ -156,3 +165,120 @@ video decode capabilities of supported Intel GPUs."))))
(package-description obs) (package-description obs)
" This build of OBS includes embeded Chromium-based browser to enable " This build of OBS includes embeded Chromium-based browser to enable
Browser source.")))) 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"))))