Add Convoy project

pull/2/head
Igor Zalatov (from Citadel PC) 2023-05-19 16:56:32 +03:00
parent effeda99ea
commit a96ecef33a
5 changed files with 452 additions and 0 deletions

View File

@ -110,6 +110,7 @@ BR2_PACKAGE_LIBREM_OPENIPC=y
BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING=y BR2_PACKAGE_WEBRTC_AUDIO_PROCESSING=y
BR2_PACKAGE_ALSA_LIB=y BR2_PACKAGE_ALSA_LIB=y
BR2_PACKAGE_ALSA_UTILS=y BR2_PACKAGE_ALSA_UTILS=y
# BR2_PACKAGE_ALSA_UTILS_ALSACTL is not set
BR2_PACKAGE_ALSA_UTILS_AMIXER=y BR2_PACKAGE_ALSA_UTILS_AMIXER=y
# MQTT # MQTT

View File

@ -0,0 +1,107 @@
# Architecture
BR2_mipsel=y
BR2_mips_xburst=y
# BR2_MIPS_SOFT_FLOAT is not set
BR2_MIPS_FP32_MODE_32=y
# BR2_MIPS_FP32_MODE_XX is not set
BR2_MIPS_NAN_LEGACY=y
BR2_MIPS_OABI32=y
BR2_KERNEL_HEADERS_VERSION=y
BR2_DEFAULT_KERNEL_VERSION="3.10.14"
BR2_PACKAGE_HOST_LINUX_HEADERS_CUSTOM_3_10=y
# Toolchain
BR2_PER_PACKAGE_DIRECTORIES=y
BR2_GCC_VERSION_8_X=y
# BR2_TOOLCHAIN_USES_UCLIBC is not set
# BR2_TOOLCHAIN_BUILDROOT_UCLIBC is not set
# BR2_TOOLCHAIN_BUILDROOT_LIBC="uclibc"
BR2_EXTRA_GCC_CONFIG_OPTIONS="--with-float=hard"
BR2_TOOLCHAIN_USES_MUSL=y
BR2_TOOLCHAIN_BUILDROOT_MUSL=y
BR2_TOOLCHAIN_BUILDROOT_LIBC="musl"
BR2_TOOLCHAIN_BUILDROOT_CXX=y
BR2_TOOLCHAIN_BUILDROOT_LOCALE=y
BR2_TOOLCHAIN_BUILDROOT_USE_SSP=y
# Kernel
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_VERSION=y
BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="3.10.14"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_VENDOR_PATH)/board/t31/kernel/t31.generic.config"
BR2_LINUX_KERNEL_UIMAGE=y
BR2_LINUX_KERNEL_LZMA=y
BR2_LINUX_KERNEL_EXT_VENDOR_PATCHER=y
# Filesystem
# BR2_TARGET_TZ_INFO is not set
BR2_TARGET_ROOTFS_CPIO=y
BR2_TARGET_ROOTFS_SQUASHFS=y
BR2_TARGET_ROOTFS_SQUASHFS4_XZ=y
BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_GENERAL_PATH)/overlay"
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_SCRIPTS_PATH)/executing_commands_for_$(BR2_TOOLCHAIN_BUILDROOT_LIBC).sh"
# OpenIPC configuration
BR2_TOOLCHAIN_BUILDROOT_VENDOR="openipc"
BR2_TARGET_GENERIC_ISSUE="Welcome to Convoy Technologies"
BR2_TARGET_GENERIC_HOSTNAME="convoy-t31"
BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_GENERAL_PATH)/package/all-patches"
# OpenIPC packages
BR2_PACKAGE_BUSYBOX_CONFIG="$(BR2_EXTERNAL_GENERAL_PATH)/package/busybox/busybox.config"
BR2_PACKAGE_DROPBEAR_OPENIPC=y
# BR2_PACKAGE_FDK_AAC_OPENIPC is not set
BR2_PACKAGE_FWPRINTENV_OPENIPC=y
BR2_PACKAGE_INGENIC_OSDRV_T31=y
BR2_PACKAGE_HASERL=y
# BR2_PACKAGE_HISI_GPIO is not set
BR2_PACKAGE_IPCTOOL=y
BR2_PACKAGE_JSON_C=y
BR2_PACKAGE_JSONFILTER=y
BR2_PACKAGE_LIBCURL_OPENIPC=y
BR2_PACKAGE_LIBCURL_OPENIPC_CURL=y
# BR2_PACKAGE_LIBCURL_OPENIPC_VERBOSE is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_PROXY_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_COOKIES_SUPPORT is not set
# BR2_PACKAGE_LIBCURL_OPENIPC_EXTRA_PROTOCOLS_FEATURES is not set
BR2_PACKAGE_LIBCURL_OPENIPC_MBEDTLS=y
BR2_PACKAGE_LIBEVENT_OPENIPC=y
BR2_PACKAGE_LIBEVENT_OPENIPC_REMOVE_PYSCRIPT=y
BR2_PACKAGE_LIBOGG_OPENIPC=y
BR2_PACKAGE_LIBYAML=y
BR2_PACKAGE_MAJESTIC_FONTS=y
BR2_PACKAGE_MAJESTIC=y
BR2_PACKAGE_MBEDTLS_OPENIPC=y
# BR2_PACKAGE_MBEDTLS_OPENIPC_PROGRAMS is not set
# BR2_PACKAGE_MBEDTLS_OPENIPC_COMPRESSION is not set
BR2_PACKAGE_MICROBE_WEB=y
# BR2_PACKAGE_MINI_SNMPD is not set
BR2_PACKAGE_MOTORS=y
BR2_PACKAGE_OPUS_OPENIPC=y
BR2_PACKAGE_OPUS_OPENIPC_FIXED_POINT=y
# BR2_PACKAGE_SSHPASS is not set
BR2_PACKAGE_UACME_OPENIPC=y
BR2_PACKAGE_VTUND_OPENIPC=y
BR2_PACKAGE_YAML_CLI=y
BR2_PACKAGE_QUIRC_OPENIPC=y
# WiFi
BR2_PACKAGE_WIRELESS_TOOLS=y
BR2_PACKAGE_WPA_SUPPLICANT=y
BR2_PACKAGE_WPA_SUPPLICANT_CLI=y
BR2_PACKAGE_WPA_SUPPLICANT_NL80211=y
BR2_PACKAGE_WPA_SUPPLICANT_PASSPHRASE=y
BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC=y
BR2_PACKAGE_LINUX_FIRMWARE_OPENIPC_MT7601U=y
# BR2_PACKAGE_RTL8188EU is not set
# WIREGUARD
BR2_PACKAGE_WIREGUARD_LINUX_COMPAT=y
BR2_PACKAGE_WIREGUARD_TOOLS=y
# DEBUG
BR2_PACKAGE_HOST_GDB=y
BR2_PACKAGE_GDB=y
BR2_PACKAGE_ZLIB=y

View File

@ -0,0 +1,2 @@
#
composer_message="This firmware was created with the Composer project."

View File

@ -0,0 +1,201 @@
#!/usr/bin/haserl
Content-type: text/html; charset=UTF-8
Date: <%= $(TZ=GMT0 date +'%a, %d %b %Y %T %Z') %>
Server: <%= $SERVER_SOFTWARE %>
Cache-Control: no-store
Pragma: no-cache
<!DOCTYPE html>
<html lang="<%= ${locale:=en} %>" data-bs-theme="<%= ${webui_theme:=light} %>">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><% html_title %></title>
<link rel="stylesheet" href="/a/bootstrap.min.css">
<link rel="stylesheet" href="/a/bootstrap.override.css">
<script src="/a/bootstrap.bundle.min.js"></script>
<script src="/a/main.js"></script>
</head>
<body id="page-<%= $pagename %>" class="<%= $fw_variant %> <%= ${webui_level:-user} %><% [ "$debug" -ge "1" ] && echo -n " debug" %>">
<nav class="navbar navbar-expand-lg bg-body-tertiary">
<div class="container">
<a class="navbar-brand" href="status.cgi"><img alt="Image: OpenIPC logo" height="32" src="/a/logo.svg"><span class="x-small ms-1"><%= $fw_variant %></span></a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse justify-content-end" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownInformation" role="button">Information</a>
<ul aria-labelledby="dropdownInformation" class="dropdown-menu">
<li><a class="dropdown-item" href="status.cgi">Overview</a></li>
<li><a class="dropdown-item" href="info-cron.cgi">Cron config</a></li>
<li><a class="dropdown-item" href="info-dmesg.cgi">Diagnostic messages</a></li>
<li><a class="dropdown-item" href="info-httpd.cgi">HTTPd environment</a></li>
<li><a class="dropdown-item" href="info-modules.cgi">Modules</a></li>
<li><a class="dropdown-item" href="info-proc-umap.cgi">Information from /proc/umap</a></li>
<li><a class="dropdown-item" href="info-ipctool.cgi">IPC Tool</a></li>
<li><a class="dropdown-item" href="info-netstat.cgi">Network stats</a></li>
<li><a class="dropdown-item" href="info-log.cgi">Log read</a></li>
<li><a class="dropdown-item" href="info-overlay.cgi">Overlay partition</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownUpdates" role="button">Updates</a>
<ul aria-labelledby="dropdownUpdates" class="dropdown-menu">
<li><a class="dropdown-item" href="firmware.cgi">Firmware</a></li>
<li><a class="dropdown-item" href="webui.cgi">Web Interface</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownSettings" role="button">Settings</a>
<ul aria-labelledby="dropdownSettings" class="dropdown-menu">
<li><a class="dropdown-item" href="network.cgi">Network</a></li>
<li><a class="dropdown-item" href="time-config.cgi">Time</a></li>
<li><a class="dropdown-item" href="network-socks5.cgi">SOCKS5 Proxy</a></li>
<li><a class="dropdown-item" href="webui-settings.cgi">Web Interface</a></li>
<li><a class="dropdown-item" href="admin.cgi">Admin Profile</a></li>
<li><a class="dropdown-item" href="users.cgi">Users</a></li>
<li><a class="dropdown-item" href="debugging.cgi">Debugging</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="reset.cgi">Reset...</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownMajestic" role="button">Majestic</a>
<ul aria-labelledby="dropdownMajestic" class="dropdown-menu">
<%
mj=$(echo "$mj" | sed "s/ /_/g")
for _line in $mj; do
_parameter=${_line%%|*};
_param_name=${_parameter#.};
_param_domain=${_param_name%.*}
if [ "$_parameter_domain_old" != "$_param_domain" ]; then
# hide certain domains if not supported
[ -n "$(eval echo "\$mj_hide_${_param_domain}" | sed -n "/\b${soc_family}\b/p")" ] && continue
[ -n "$(eval echo "\$mj_show_${_param_domain}_vendor")" ] && [ -z "$(eval echo "\$mj_show_${_param_domain}_vendor" | sed -n "/\b${soc_vendor}\b/p")" ] && continue
_parameter_domain_old="$_param_domain"
_css="class=\"dropdown-item\""; [ "$_param_domain" = "$only" ] && _css="class=\"dropdown-item active\" aria-current=\"true\""
echo "<li><a ${_css} href=\"majestic-settings.cgi?tab=${_param_domain}\">$(eval echo \$tT_mj_${_param_domain})</a></li>"
fi
done
unset _css; unset _param_domain; unset _line; unset _param_name; unset _parameter_domain_old; unset _parameter;
%>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="info-majestic.cgi">Majestic YAML</a></li>
<li><a class="dropdown-item" href="majestic-endpoints.cgi">Majestic Endpoints</a></li>
<li><a class="dropdown-item" href="majestic-config-actions.cgi">Majestic Maintenance</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownTools" role="button">Tools</a>
<ul aria-labelledby="dropdownTools" class="dropdown-menu">
<li><a class="dropdown-item" href="tools.cgi">Ping & Traceroute</a></li>
<li><a class="dropdown-item" href="console.cgi">Web Console</a></li>
<li><a class="dropdown-item" href="file-manager.cgi">File Manager</a></li>
<li><a class="dropdown-item" href="ssh-keys.cgi">SSH Key</a></li>
<li><a class="dropdown-item" href="sdcard.cgi">SD Card</a></li>
</ul>
</li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownServices" role="button">Services</a>
<ul aria-labelledby="dropdownServices" class="dropdown-menu">
<% load_plugins %>
</ul>
</li>
<li class="nav-item"><a class="nav-link" href="preview.cgi">Preview</a></li>
<li class="nav-item dropdown">
<a aria-expanded="false" class="nav-link dropdown-toggle" data-bs-toggle="dropdown" href="#" id="dropdownHelp" role="button">Help</a>
<ul aria-labelledby="dropdownHelp" class="dropdown-menu dropdown-menu-lg-end">
<li><a class="dropdown-item" href="https://openipc.org/">About OpenIPC</a></li>
<li><a class="dropdown-item" href="https://openipc.org/wiki/">OpenIPC Wiki</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<main class="pb-4">
<div class="container" style="min-height: 90vh">
<div class="row mt-1 x-small">
<div class="col-lg-2">
<div id="pb-memory" class="progress my-1" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar"></div></div>
<div id="pb-overlay" class="progress my-1" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"><div class="progress-bar"></div></div>
</div>
<div class="col-md-7 mb-2">
<%= $(signature) %>
</div>
<div class="col-md-4 col-lg-3 mb-2 text-end">
<div id="time-now"></div>
<div id="soc-temp"></div>
</div>
</div>
<% if [ -z "$network_gateway" ]; then %>
<div class="alert alert-warning">
<p class="mb-0">No Internet connection. Please <a href="network.cgi">check your network settings</a>.</p>
</div>
<% fi %>
<% if [ "$network_macaddr" = "00:00:23:34:45:66" ]; then %>
<%in p/mac-address.cgi %>
<% fi %>
<% if [ "true" = "$openwall_socks5_enabled" ] || [ "true" = "$telegram_socks5_enabled" ] || [ "true" = "$yadisk_socks5_enabled" ]; then
if [ -z "$socks5_host" ] || [ -z "$socks5_port" ]; then %>
<div class="alert alert-danger">
<p class="mb-0">You want to use SOCKS5 proxy but it is not configured! Please <a href="network-socks5.cgi">configure the proxy</a>.</p>
</div>
<% fi; fi %>
<% if [ "true" = "$speaker_enabled" ] && [ "true" != "$(yaml-cli -g .audio.enabled)" ]; then %>
<div class="alert alert-danger">
<p class="mb-0">You need to enable audio in <a href="majestic-settings.cgi?tab=audio">Majestic settings.</a></p>
</div>
<% fi %>
<% if [ "$(cat /etc/TZ)" != "$TZ" ]; then %>
<div class="alert alert-danger">
<p>$TZ variable in system environment needs updating!</p>
<span class="d-flex gap-3">
<a class="btn btn-danger" href="reboot.cgi">Reboot camera</a>
<a class="btn btn-primary" href="timezone.cgi">See timezone settings</a>
</span>
</div>
<% fi %>
<% if [ -f /tmp/network-restart.txt ]; then %>
<div class="alert alert-danger">
<p>Network settings have been updated. Restart to apply changes.</p>
<span class="d-flex gap-3">
<a class="btn btn-danger" href="reboot.cgi">Reboot camera</a>
<a class="btn btn-primary" href="network.cgi">See network settings</a>
</span>
</div>
<% fi %>
<% if [ -f /tmp/coredump-restart.txt ]; then %>
<div class="alert alert-danger">
<p>Majestic debugging settings have been updated. Restart to apply changes.</p>
<span class="d-flex gap-3">
<a class="btn btn-danger" href="reboot.cgi">Reboot camera</a>
<a class="btn btn-primary" href="debugging.cgi">See debugging settings</a>
</span>
</div>
<% fi %>
<% if [ -f /tmp/motionguard-restart.txt ]; then %>
<div class="alert alert-danger">
<p>Changes to motion guard configuration detected. Please restart camera to apply the changes.</p>
<span class="d-flex gap-3">
<a class="btn btn-danger" href="reboot.cgi">Reboot camera</a>
<a class="btn btn-primary" href="plugin-motion.cgi">See motion guard settings</a>
</span>
</div>
<% fi %>
<h2><%= $page_title %></h2>
<% flash_read %>
.

View File

@ -0,0 +1,141 @@
# line format: parameter|label|units|type|o,p,t,i,o,n,s|placeholder|hint
# line format: parameter|type
mj_retired="
.system.sensorConfigDir|Path to sensors config directory||string||/etc/sensors|
.system.updateChannel|Channel to use for updates||select|testing,beta,stable,none|stable|
.isp.alignWidth|Align width||number||8|
.isp.threadStackSize|Thread stack size|KB|number|1-32|16|
.motionDetect.profile|Motion detection profile||select|outdoor,indoor|outdoor|
.raw.enabled|Enable raw feed support||boolean|true,false|false|
.raw.mode|Raw feed mode||select|slow,fast,none|slow|
"
# line format: parameter|label|units|type|o,p,t,i,o,n,s|placeholder|hint
# number options: min,max,step
# range options: min,max,step[,button]
# select options: value2,value2,value3...
mj="
.system.logLevel|Severity of logging||select|ERROR,WARN,INFO,DEBUG,TRACE|TRACE|Used for syslog messages.
.system.webAdmin|Serve Web Admin via Majestic||boolean|enabled,disabled|disabled|Experimental! Disable on camera with public access.
.system.staticDir|Home directory for static files||string||/var/www/html|
.system.webPort|Port for HTTP access||number|1,65535,1|80|
.system.httpsPort|Port for HTTPS access||number|1,65535,1|443|
.system.httpsCertificate|Path to public SSL certificate||string||/etc/ssl/certs/www.example.com.crt|
.system.httpsCertificateKey|Path to private SSL key||string||/etc/ssl/private/www.example.com.key|
.system.buffer|Maximum buffer size|KB|number||1024|per client
.isp.sensorConfig|Path to sensor configuration file||string||/etc/sensors/imx222_1080p_line.ini|<a href=\"sensor.cgi\">Upload your own driver and config</a>
.isp.memMode|Memory mode||select|normal,reduction|reduction|
.isp.slowShutter|Slow shutter||select|disabled,low,medium,high|low|Automatic frame rate reduction mode.
.isp.antiFlicker|Anti-flicker||select|disabled,50,60|disabled|Usually, the utility frequency in your grid line.
.isp.blkCnt|Block count||number|1,32,1|4|Use 4 for small memory systems, 10+ for performant SoCs.
.isp.exposure|Sensor exposure time|&micro;s|number|1,500000,1,auto|auto|From 1 to 500,000.
.isp.aGain|Sensor analog gain||number|1,10000,1|1|
.isp.dGain|Sensor digital gain||number|1,10000,1|1|
.isp.ispGain|ISP gain||number|1,10000,1|1|
.isp.drc|Dynamic Range Compression (DRC) rate|:1|number|1,1000,1|300|
.isp.lowDelay|Low delay mode||boolean|true,false|false|May break sophisticated settings.
.isp.rawMode|Raw feed mode||select|slow,fast,none|none|
.isp.iqProfile|Path to PQTools binary profile||string|||
.image.mirror|Flip image horizontally||boolean|true,false|false|
.image.flip|Flip image vertically||boolean|true,false|false|
.image.rotate|Rotate image clockwise, °||select|0,90,270|0|
.image.contrast|Image contrast|%|range|1,100,1,auto|auto|
.image.hue|Image hue|%|range|1,100,1|50|
.image.saturation|Image saturation|%|range|1,100,1|50|
.image.luminance|Image luminance|%|range|1,100,1,auto|auto|
.osd.enabled|Enable On-Screen Display (OSD)||boolean|true,false|false|
.osd.font|Path to font file used in OSD||string||/usr/share/fonts/truetype/UbuntuMono-Regular.ttf|
.osd.template|OSD template||string||%a %e %B %Y %H:%M:%S %Z|Supports <a href=\"https://man7.org/linux/man-pages/man3/strftime.3.html \" target=\"_blank\">strftime()</a> format.
.osd.corner|OSD preset position||select|tl:Top Left,tr:Top Right,bl:Bottom Left,br:Bottom Right|br|
.osd.posX|Horizontal position of OSD|px|number|-2000,2000,2|-100|
.osd.posY|Vertical position of OSD|px|number|-2000,2000,2|-100|
.osd.privacyMasks|Privacy masks|px|string||0x0x234x640,2124x0x468x1300|Coordinates of masked areas separated by commas.
.nightMode.enabled|Enable night mode||boolean|true,false|false|
.nightMode.irSensorPin|GPIO pin of signal from IR sensor||number|0,255,1|62|
.nightMode.irSensorPinInvert|IR sensor signal is inverted||boolean|true,false|false|
.nightMode.irCutPin1|GPIO pin1 of signal for IRcut filter||number|0,255,1|1|
.nightMode.irCutPin2|GPIO pin2 of signal for IRcut filter||number|0,255,1|2|
.nightMode.dncDelay|Delay before toggling Day/Night mode||range|1,60,1|20|
.nightMode.backlightPin|GPIO pin to turn on night mode illumination||number|1,255,1|65|
.nightMode.nightAPI|Use night mode API||boolean|true,false|false|
.nightMode.drcOverride|Dynamic Range Compression (DRC) in night mode||number|1,1000,1|300|
.records.enabled|Enable saving records||boolean|true,false|false|
.records.path|Template for saving video records||string||/mnt/mmc/%Y/%m/%d/%H.mp4|Supports <a href=\"https://man7.org/linux/man-pages/man3/strftime.3.html \" target=\"_blank\">strftime()</a> format.
.records.maxUsage|Limit of available space usage|%|range|1,100,1|95|
.records.timelapseInterval|Timelapse capture interval|sec|number|1,65355,1|5|in seconds
.records.timelapseFrameRate|Timelapse output file framerate|fps|number|1,100,1|2|in frames per second
.video0.enabled|Enable Video0||boolean|true,false|true|
.video0.codec|Video0 codec||select|h264,h265|h264|
.video0.size|Video resolution|px|string|1920x1080,1280x720,704x576|1920x1080|
.video0.fps|Video frame rate|fps|number|1,60,1|25|
.video0.bitrate|Video bitrate|kbps|number|1,68000,1|4096|
.video0.gopSize|Send I-frames each 1 second||number|0.1,20,0.1|1|
.video0.gopMode|Group of Pictures (GOP) mode||select|normal,dual,smart|normal|
.video0.rcMode|RC mode||select|avbr,cbr,vbr|avbr|
.video0.crop|Crop video to size|px|string||0x0x960x540|
.video0.sliceUnits|Number of slices per frame||number|1,10,1|4
.video1.enabled|Enable Video1||boolean|true,false|false|
.video1.codec|Video1 codec||select|h264,h265|h264|
.video1.size|Video1 resolution|px|string|1920x1080,1280x720,704x576|704x576|
.video1.fps|Video1 frame rate|fps|number|1,60,1|15|
.video1.bitrate|Video1 bitrate|kbps|number|1,68000,1|2048|
.video1.gopSize|Send I-frame each 1 second||number|1,20,1|1|
.video1.gopMode|GOP mode||select|normal,dual,smart|normal|
.video1.rcMode|RC mode||select|avbr|avbr|
.video1.crop|Crop video to size|px|string||0x0x960x540|
.video1.sliceUnits|Number of slices per frame||number|1,10,1|4
.jpeg.enabled|Enable JPEG support||boolean|true,false|true|
.jpeg.size|Snapshot size|px|string||1920x1080|
.jpeg.qfactor|JPEG quality level|%|range|1,100,1|50|
.jpeg.toProgressive|Progressive JPEG||boolean|true,false|false|
.mjpeg.size|Video resolution|px|string||640x360|
.mjpeg.fps|Video framerate|fps|number|1,30,1|5|
.mjpeg.bitrate|Video bitrate|kbps|number|1,4096,1|1024|
.audio.enabled|Enable audio||boolean|true,false|false|
.audio.volume|Audio volume level|%|range|1,100,1,auto|auto|
.audio.srate|Audio sampling rate|kHz|number|1,96000,1|8000|
.audio.codec|Codec for RTSP and MP4 encoding||select|mp3,opus,aac,pcm,alaw,ulaw|opus|
.audio.device|Audio card||string||hw:2|
.audio.outputEnabled|Enable audio output||boolean|true,false|false|
.audio.outputGain|Output gain||range|0,31,1|15|
.audio.outputVolume|Speaker volume|%|range|0,100,1|0|
.audio.voiceEqualizer|Audio equalizer||select|disabled,common,music,noisy|disabled|
.audio.speakerPin|GPIO pin of audio speaker||number|1,255,1|32|
.audio.speakerPinInvert|Audio speaker signal is inverted||boolean|true,false|false|
.rtsp.enabled|Enable output||boolean|true,false|true|
.rtsp.port|Port for RTSP protocol||number|1,65535,1|554|rtsp://user:pass@${network_address}:[port]/stream={0,1}
.hls.enabled|Enable HTTP Live Streaming (HLS)||boolean|true,false|true|
.youtube.enabled|Enable Youtube support||boolean|true,false|false|
.youtube.key|Youtube API key||string||xxxx-xxxx-xxxx-xxxx-xxxx|
.motionDetect.enabled|Enable motion detection||boolean|true,false|false|
.motionDetect.visualize|Visualize motion detection||boolean|true,false|true|
.motionDetect.debug|Enable debugging||boolean|true,false|true|
.motionDetect.roi|Regions of Interest (ROI) for motion detection.|px|string||0x0x1296x760|
.motionDetect.skipIn|Regions excluded from ROI.|px|string||20x20x200x300,510x330x40x15|
.ipeye.enabled|Enable IPEYE support||boolean|true,false|false|
.netip.enabled|Enable NETIP protocol support||boolean|true,false|false|
.netip.user|NETIP user||string||admin|
.netip.password-plain|NETIP password||password|||Pain-text password, it will be hashed for NETIP.
.netip.password|NETIP password (hash)||hidden||6V0Y4HLF|
.netip.port|NETIP port||number|1,65535,1|34567|
.netip.snapshots|NETIP snaphots||boolean|true,false|true|
.netip.ignoreSetTime|Ignore set time||boolean|true,false|false|
.onvif.enabled|Enable ONVIF protocol support||boolean|true,false|false|
.watchdog.enabled|Enable watchdog||boolean|true,false|true|
.watchdog.timeout|Watchdog timeout|sec|number|1,600,1|10|
.cloud.enabled|Enable cloud support||boolean|true,false|false|
"
# hide these settings unless in debug mode
mj_hide_unless_debug="audio_device isp_aGain isp_dGain isp_ispGain isp_exposure"
# conditional settings limiters
mj_show_audio_voiceEqualizer="gk7205v200 hi3516cv300 hi3516cv500 hi3516ev300 hi3519v101"
mj_show_mjpeg_vendor="goke hisilicon"
mj_show_isp_slowShutter_vendor="goke hisilicon"
mj_hide_isp_sensorConfig_vendor="ingenic"
mj_hide_video0_codec="hi3516cv200 hi3516cv100"
mj_hide_video1_codec="hi3516cv200 hi3516cv100"
mj_hide_motionDetect="hi3516cv100 hi3516av100"
.