diff --git a/GIDs b/GIDs index 81a5275cc3c2..58cbe5ed30d2 100644 --- a/GIDs +++ b/GIDs @@ -805,7 +805,7 @@ plocate:*:860: # free: 861 # free: 862 # free: 863 -# free: 864 +mediamtx:*:864: z2m:*:865: vglusers:*:866: sqlpage:*:867: diff --git a/UIDs b/UIDs index f79658aa4f96..4451ad11aa8b 100644 --- a/UIDs +++ b/UIDs @@ -811,7 +811,7 @@ opensearch:*:855:855::0:0:opensearch user:/nonexistent:/usr/sbin/nologin # free: 861 # free: 862 # free: 863 -# free: 864 +mediamtx:*:864:864::0:0:mediamtx:/nonexistent:/usr/sbin/nologin z2m:*:865:865::0:0:zigbee2mqtt:/usr/local/z2m:/usr/sbin/nologin # free: 866 sqlpage:*:867:867::0:0:SQLPage:/nonexistent:/usr/sbin/nologin diff --git a/multimedia/Makefile b/multimedia/Makefile index 6f78b658a22c..8597cd5ba7d8 100644 --- a/multimedia/Makefile +++ b/multimedia/Makefile @@ -225,6 +225,7 @@ SUBDIR += makemkv SUBDIR += mediaelch SUBDIR += mediainfo + SUBDIR += mediamtx SUBDIR += mencoder SUBDIR += minisatip SUBDIR += minitube diff --git a/multimedia/mediamtx/Makefile b/multimedia/mediamtx/Makefile new file mode 100644 index 000000000000..8c28600610ff --- /dev/null +++ b/multimedia/mediamtx/Makefile @@ -0,0 +1,35 @@ +PORTNAME= mediamtx +DISTVERSIONPREFIX= v +DISTVERSION= 1.11.2 +CATEGORIES= multimedia net +MASTER_SITES+= https://github.com/video-dev/hls.js/releases/download/v1.5.20/ +DISTFILES+= release.zip + +MAINTAINER= diizzy@FreeBSD.org +COMMENT= Ready-to-use RTSP / RTMP / LL-HLS / WebRTC server and proxy that allows to read, publish and proxy video and audio streams +WWW= https://github.com/bluenviron/mediamtx + +LICENSE= MIT +LICENSE_FILE= ${WRKSRC}/LICENSE + +USES= go:1.23,modules +GO_MODULE= github.com/bluenviron/mediamtx + +USE_RC_SUBR= mediamtx + +USERS= mediamtx +GROUPS= mediamtx + +SUB_FILES= pkg-message +SUB_LIST= USER=${USERS} GROUP=${GROUPS} + +post-extract: + ${MV} ${WRKDIR}/dist/hls.min.js ${WRKSRC}/internal/servers/hls + +pre-configure: + ${ECHO} ${DISTVERSIONFULL} > ${WRKSRC}/internal/core/VERSION + +post-install: + ${INSTALL_DATA} ${WRKSRC}/mediamtx.yml ${STAGEDIR}${PREFIX}/etc/mediamtx.yml.sample + +.include diff --git a/multimedia/mediamtx/distinfo b/multimedia/mediamtx/distinfo new file mode 100644 index 000000000000..018467e448e5 --- /dev/null +++ b/multimedia/mediamtx/distinfo @@ -0,0 +1,7 @@ +TIMESTAMP = 1738490306 +SHA256 (go/multimedia_mediamtx/mediamtx-v1.11.2/release.zip) = b67b84ce6aedbed53f7907b516aceee1ae40e6082103915bc7024a62fa562841 +SIZE (go/multimedia_mediamtx/mediamtx-v1.11.2/release.zip) = 4585318 +SHA256 (go/multimedia_mediamtx/mediamtx-v1.11.2/v1.11.2.mod) = a31f2a05cda0abb1860f0cab0a5293671c918edfaf7d58770001d8ba30f0b06a +SIZE (go/multimedia_mediamtx/mediamtx-v1.11.2/v1.11.2.mod) = 4535 +SHA256 (go/multimedia_mediamtx/mediamtx-v1.11.2/v1.11.2.zip) = 30a3d0fc5578faa0f2aa3cda86959389974fc2d0d0d2f6139761163e6e23a715 +SIZE (go/multimedia_mediamtx/mediamtx-v1.11.2/v1.11.2.zip) = 600864 diff --git a/multimedia/mediamtx/files/mediamtx.in b/multimedia/mediamtx/files/mediamtx.in new file mode 100644 index 000000000000..5888592ca22e --- /dev/null +++ b/multimedia/mediamtx/files/mediamtx.in @@ -0,0 +1,49 @@ +#!/bin/sh + +# PROVIDE: mediamtx +# REQUIRE: DAEMON +# KEYWORD: shutdown + +# +# Add the following line to /etc/rc.conf to enable mediamtx: +# mediamtx_enable (bool): Set to "NO" by default. +# Set it to "YES" to enable mediamtx. +# mediamtx_conf_dir (str): Directory where ${name} configuration +# data is stored. + +. /etc/rc.subr + +name="mediamtx" +rcvar=mediamtx_enable + +load_rc_config ${name} + +: ${mediamtx_enable:="NO"} +: ${mediamtx_user:="%%USER%%"} +: ${mediamtx_group:="%%GROUP%%"} +: ${mediamtx_conf_dir="%%PREFIX%%/etc"} + +start_precmd=mediamtx_precmd +stop_postcmd=mediamtx_stop_postcmd + +procname="%%PREFIX%%/bin/${name}" +pidfile="/var/run/mediamtx/mediamtx.pid" +required_files="${mediamtx_conf_dir}/mediamtx.yml" + +command="/usr/sbin/daemon" +command_args="-f -t ${name} -p ${pidfile} ${procname} ${required_files}" + +mediamtx_precmd() +{ + local rundir=${pidfile%/*} + if [ ! -d $rundir ] ; then + install -d -m 0755 -o %%USER%% -g %%GROUP%% $rundir + fi +} + +mediamtx_stop_postcmd() +{ + rm -f "$rundir" +} + +run_rc_command "$1" diff --git a/multimedia/mediamtx/files/patch-mediamtx.yml b/multimedia/mediamtx/files/patch-mediamtx.yml new file mode 100644 index 000000000000..510b64f9765a --- /dev/null +++ b/multimedia/mediamtx/files/patch-mediamtx.yml @@ -0,0 +1,106 @@ +--- mediamtx.yml.orig 2025-02-02 14:33:21 UTC ++++ mediamtx.yml +@@ -419,7 +419,6 @@ pathDefaults: + # * whep://existing-url -> the stream is pulled from another WebRTC server / camera + # * wheps://existing-url -> the stream is pulled from another WebRTC server / camera with HTTPS + # * redirect -> the stream is provided by another path or server +- # * rpiCamera -> the stream is provided by a Raspberry Pi Camera + # The following variables can be used in the source string: + # * $MTX_QUERY: query parameters (passed by first reader) + # * $G1, $G2, ...: regular expression groups, if path name is +@@ -504,95 +503,6 @@ pathDefaults: + + # RTSP URL which clients will be redirected to. + sourceRedirect: +- +- ############################################### +- # Default path settings -> Raspberry Pi Camera source (when source is "rpiCamera") +- +- # ID of the camera +- rpiCameraCamID: 0 +- # Width of frames +- rpiCameraWidth: 1920 +- # Height of frames +- rpiCameraHeight: 1080 +- # Flip horizontally +- rpiCameraHFlip: false +- # Flip vertically +- rpiCameraVFlip: false +- # Brightness [-1, 1] +- rpiCameraBrightness: 0 +- # Contrast [0, 16] +- rpiCameraContrast: 1 +- # Saturation [0, 16] +- rpiCameraSaturation: 1 +- # Sharpness [0, 16] +- rpiCameraSharpness: 1 +- # Exposure mode. +- # values: normal, short, long, custom +- rpiCameraExposure: normal +- # Auto-white-balance mode. +- # values: auto, incandescent, tungsten, fluorescent, indoor, daylight, cloudy, custom +- rpiCameraAWB: auto +- # Auto-white-balance fixed gains. This can be used in place of rpiCameraAWB. +- # format: [red,blue] +- rpiCameraAWBGains: [0, 0] +- # Denoise operating mode. +- # values: off, cdn_off, cdn_fast, cdn_hq +- rpiCameraDenoise: "off" +- # Fixed shutter speed, in microseconds. +- rpiCameraShutter: 0 +- # Metering mode of the AEC/AGC algorithm. +- # values: centre, spot, matrix, custom +- rpiCameraMetering: centre +- # Fixed gain +- rpiCameraGain: 0 +- # EV compensation of the image [-10, 10] +- rpiCameraEV: 0 +- # Region of interest, in format x,y,width,height (all normalized between 0 and 1) +- rpiCameraROI: +- # Whether to enable HDR on Raspberry Camera 3. +- rpiCameraHDR: false +- # Tuning file +- rpiCameraTuningFile: +- # Sensor mode, in format [width]:[height]:[bit-depth]:[packing] +- # bit-depth and packing are optional. +- rpiCameraMode: +- # frames per second +- rpiCameraFPS: 30 +- # Autofocus mode +- # values: auto, manual, continuous +- rpiCameraAfMode: continuous +- # Autofocus range +- # values: normal, macro, full +- rpiCameraAfRange: normal +- # Autofocus speed +- # values: normal, fast +- rpiCameraAfSpeed: normal +- # Lens position (for manual autofocus only), will be set to focus to a specific distance +- # calculated by the following formula: d = 1 / value +- # Examples: 0 moves the lens to infinity. +- # 0.5 moves the lens to focus on objects 2m away. +- # 2 moves the lens to focus on objects 50cm away. +- rpiCameraLensPosition: 0.0 +- # Specifies the autofocus window, in the form x,y,width,height where the coordinates +- # are given as a proportion of the entire image. +- rpiCameraAfWindow: +- # Manual flicker correction period, in microseconds. +- rpiCameraFlickerPeriod: 0 +- # Enables printing text on each frame. +- rpiCameraTextOverlayEnable: false +- # Text that is printed on each frame. +- # format is the one of the strftime() function. +- rpiCameraTextOverlay: '%Y-%m-%d %H:%M:%S - MediaMTX' +- # Codec. Available values: auto, hardwareH264, softwareH264 +- rpiCameraCodec: auto +- # Period between IDR frames +- rpiCameraIDRPeriod: 60 +- # Bitrate +- rpiCameraBitrate: 5000000 +- # H264 profile +- rpiCameraProfile: main +- # H264 level +- rpiCameraLevel: '4.1' + + ############################################### + # Default path settings -> Hooks diff --git a/multimedia/mediamtx/files/patch-rpicamera b/multimedia/mediamtx/files/patch-rpicamera new file mode 100644 index 000000000000..81e708c591aa --- /dev/null +++ b/multimedia/mediamtx/files/patch-rpicamera @@ -0,0 +1,88 @@ +From 341c1ad77717c9957993b9abebcc627007f10f15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Krystian=20Chachu=C5=82a?= +Date: Thu, 30 Jan 2025 23:03:57 +0100 +Subject: [PATCH] rpicamera: disable + +--- + internal/staticsources/rpicamera/camera.go | 2 +- + internal/staticsources/rpicamera/camera_disabled.go | 2 -- + internal/staticsources/rpicamera/component.go | 2 +- + internal/staticsources/rpicamera/component_32.go | 2 +- + internal/staticsources/rpicamera/component_64.go | 2 +- + internal/staticsources/rpicamera/params_serialize.go | 2 +- + internal/staticsources/rpicamera/pipe.go | 2 +- + 7 files changed, 6 insertions(+), 8 deletions(-) + +diff --git a/internal/staticsources/rpicamera/camera.go b/internal/staticsources/rpicamera/camera.go +index 9db131f4..b8a41317 100644 +--- internal/staticsources/rpicamera/camera.go ++++ internal/staticsources/rpicamera/camera.go +@@ -1,4 +1,4 @@ +-//go:build (linux && arm) || (linux && arm64) ++//go:build exclude + + package rpicamera + +diff --git a/internal/staticsources/rpicamera/camera_disabled.go b/internal/staticsources/rpicamera/camera_disabled.go +index ac84ee59..e54ccaa3 100644 +--- internal/staticsources/rpicamera/camera_disabled.go ++++ internal/staticsources/rpicamera/camera_disabled.go +@@ -1,5 +1,3 @@ +-//go:build !linux || (!arm && !arm64) +- + package rpicamera + + import ( +diff --git a/internal/staticsources/rpicamera/component.go b/internal/staticsources/rpicamera/component.go +index c4036390..e138f929 100644 +--- internal/staticsources/rpicamera/component.go ++++ internal/staticsources/rpicamera/component.go +@@ -1,4 +1,4 @@ +-//go:build (linux && arm) || (linux && arm64) ++//go:build exclude + + package rpicamera + +diff --git a/internal/staticsources/rpicamera/component_32.go b/internal/staticsources/rpicamera/component_32.go +index b7d19f11..51615164 100644 +--- internal/staticsources/rpicamera/component_32.go ++++ internal/staticsources/rpicamera/component_32.go +@@ -1,4 +1,4 @@ +-//go:build linux && arm ++//go:build exclude + + package rpicamera + +diff --git a/internal/staticsources/rpicamera/component_64.go b/internal/staticsources/rpicamera/component_64.go +index 690bf567..ed2e89dd 100644 +--- internal/staticsources/rpicamera/component_64.go ++++ internal/staticsources/rpicamera/component_64.go +@@ -1,4 +1,4 @@ +-//go:build linux && arm64 ++//go:build exclude + + package rpicamera + +diff --git a/internal/staticsources/rpicamera/params_serialize.go b/internal/staticsources/rpicamera/params_serialize.go +index d9e023b1..845725f3 100644 +--- internal/staticsources/rpicamera/params_serialize.go ++++ internal/staticsources/rpicamera/params_serialize.go +@@ -1,4 +1,4 @@ +-//go:build (linux && arm) || (linux && arm64) ++//go:build exclude + + package rpicamera + +diff --git a/internal/staticsources/rpicamera/pipe.go b/internal/staticsources/rpicamera/pipe.go +index 44eb3bf1..00be2658 100644 +--- internal/staticsources/rpicamera/pipe.go ++++ internal/staticsources/rpicamera/pipe.go +@@ -1,4 +1,4 @@ +-//go:build (linux && arm) || (linux && arm64) ++//go:build exclude + + package rpicamera + +-- +2.47.1 + diff --git a/multimedia/mediamtx/files/pkg-message.in b/multimedia/mediamtx/files/pkg-message.in new file mode 100644 index 000000000000..05c73dc27270 --- /dev/null +++ b/multimedia/mediamtx/files/pkg-message.in @@ -0,0 +1,11 @@ +[ +{ type: install + message: <