{"id":13486624,"url":"https://github.com/sr99622/libonvif","last_synced_at":"2026-01-22T05:19:51.589Z","repository":{"id":56742470,"uuid":"203202342","full_name":"sr99622/libonvif","owner":"sr99622","description":"Onvif library with GUI implementation and built in YOLOX","archived":false,"fork":false,"pushed_at":"2025-12-31T17:51:14.000Z","size":31231,"stargazers_count":281,"open_issues_count":49,"forks_count":68,"subscribers_count":11,"default_branch":"master","last_synced_at":"2026-01-05T03:37:53.716Z","etag":null,"topics":["gui","onvif-library","python","realtime","yolox"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sr99622.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-08-19T15:44:20.000Z","updated_at":"2025-12-31T17:51:18.000Z","dependencies_parsed_at":"2024-01-16T09:00:54.473Z","dependency_job_id":"153e5d2d-1cf3-4ba5-9ab1-208a1fc9e516","html_url":"https://github.com/sr99622/libonvif","commit_stats":null,"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/sr99622/libonvif","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sr99622%2Flibonvif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sr99622%2Flibonvif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sr99622%2Flibonvif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sr99622%2Flibonvif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sr99622","download_url":"https://codeload.github.com/sr99622/libonvif/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sr99622%2Flibonvif/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28655709,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","onvif-library","python","realtime","yolox"],"created_at":"2024-07-31T18:00:49.236Z","updated_at":"2026-01-22T05:19:51.569Z","avatar_url":"https://github.com/sr99622.png","language":"C++","funding_links":[],"categories":["Generic software"],"sub_categories":["ONVIF"],"readme":"libonvif\r\n========\r\n\r\nA client side implementation of the ONVIF specification for Linux, Mac and Windows. Included are two tools for communicating with cameras, a command line program, onvif-util, and a program with a Graphical User Interface, onvi-gui.\r\n\r\n\u0026nbsp;\r\n\r\n\u003c!---\r\n\u003ctable\u003e\r\n  \u003ctr\u003e\u003ctd\u003e\u003cimage src=\"onvif-gui/onvif_gui/resources/onvif-gui.png\"\u003e\u003c/td\u003e\u003ctd\u003e\u003ch2\u003eOnvif GUI\u003c/h2\u003e\u003cbr\u003eFeaturing\u003cbr\u003e\u003ca href=\"https://github.com/Megvii-BaseDetection/YOLOX\"\u003e\u003cimage src=\"assets/images/logo.png\"  width=\"200\"\u003e\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\r\n\u003ctable\u003e\r\n---\u003e\r\n\r\n\u003cimage src=\"assets/images/header.png\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n## Introduction\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDescription\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\nOnvif GUI is an integrated camera management system with an intuitive user interface that can be easily installed and configured on a wide variety of hardware, including Windows, Mac and Linux. Built in AI can accurately detect objects of interest and raise alarms to alert users and start recording high resolution streams to disk for archive.\r\n\r\nThe system is designed to scale with available hardware and will run on simple configurations as well as high end systems for maximum performance. Onvif GUI can be arranged in a client server configuration where a host computer can manage connections to a group of cameras which are isolated from the rest of the network for improved security. Any number of client computers can then be used to observe the streams and receive alarms generated by the server. In such a scenario, the compute load is concentrated on the server, and lower powered computers can be used as observation stations.\r\n\r\nThe system has integrated OpenVINO support for AI analysis on iGPU Intel hardware. It also will support Apple Silicon NPU AI, enabling high performance in low power environments. This allows users to select the level of hardware appropriate for their application. Apple M4 Mac Mini makes an excellent choice for low to medium power configurations such as a server managing 12 cameras, for example. Intel Ultra Core series chips are also an excellent choice for a Windows based server managing a similar load. For maximum performance, a Linux server equipped with an NVIDIA GPU can be utilized to process data from a large fleet of cameras. \r\n\r\nThe system can be configured with auto start settings and a user friendly icon so that non-technical users can feel comfortable working with the application without specialized training. File management is easy with an automated disk space manager and file playback controls. Multiple camera streams can be viewed in the display with a double click action to open a pop up window for displaying a high resolution stream for detailed viewing. Groups of cameras can be bundled together in different windows for display on multiple monitors from a single host computer.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eScreenshot\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\nHere is the application running 12 cameras on an Intel NUC with an i7 1360P acting as a host with the yolox detector using OpenVINO on the iGPU in Linux. The application has been configured to display the low resolution camera substreams in the main display on the right and the secondary window on the lower left is showing the high resolution display for a single camera as selected by double clicking the main display on the camera of interest. On the upper left is a separate system monitor application showing the compute load.\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/screenshot.png\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nThe equivalent configuration on the base model Mac Mini M4\r\n\r\n\u003cimage src=\"assets/images/screenshot_mac.png\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nAnd the same for Windows on an Intel Core Ultra 9 185H\r\n\r\n\u003cimage src=\"assets/images/screenshot_win.png\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eRecommended Configuration\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nFor maximum performance, the client-server configuration is recommended. In this configuration, Onvif GUI uses [MediaMTX](https://github.com/bluenviron/mediamtx) as a proxy server that will buffer the camera streams, providing a consistent low latency interface to the rest of the network. Additionally, this configuration isolates the cameras, blocking all traffic between the cameras and the internet. Isolating cameras on a private subnet may require installing a DHCP server on the Onvif GUI host for ip address assignments. Additionally, the Onvif GUI host can be configured as a file server using Samba or NFS so that clients have access to camera recordings as well. Please refer to the Notes section of this document for details on these additional configurations.\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/net_config.png\" width=\"640\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nIt is not recommended to use a wireless connection for the server interface in most instances. Wireless cameras are not recommended. A 1 Gb network interface on the server should be sufficient to host a reasonable number of cameras. Wired network connections will result in a more stable and performant experience than wireless connections. Wireless connection stability can also vary widely depending on hardware and drivers. Recent Apple Silicon Mac computers had a noticeably better WiFi experience and are recommended if a wireless connection is required. \r\n\r\nMac computers with recent M4 chips provide excellent performance. If driving multiple monitors using high resolution streams is a system requirement, the Mac Mini M4 offers high performance with low power consumption, low noise and great value.\r\n\r\nLinux computers with a discrete GPU offer very good performance. GPU cards with PCIe 4 compatibility will outperform those designed for PCIe 3. GPU cards with 16 PCIe lanes will outperform those with only 8 lanes. A Linux computer with an integrated GPU, such as a NUC can also provide very good performance, but do have limitations. These Linux configurations are capable of driving multiple monitors but may require some patience when setting up.\r\n\r\nWindows computers will work well, but do require more computing power to achieve similar results to Linux systems with less capable hardware. If Windows is the intended OS for either host or client, a higher powered computer will be necessary for satisfactory results. Lower powered computers will run the software but will be limited to running a few streams in low resolution.\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\r\n## Installation\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eInstall Onvif GUI\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eLinux\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFlatpak\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nDownload the [Flatpak installer](https://github.com/sr99622/libonvif/releases/download/v3.3.4/OnvifGUI-3.3.4.flatpak), then open a terminal and navigate to the Downloads folder. Use the following command to install.\r\n\r\n```\r\nflatpak install OnvifGUI-3.3.4.flatpak\r\n```\r\n\r\nIn some cases, it may be necessary to re-boot the computer in order to see the icon in the Applications menu.\r\n\r\nThe program can then be launched from the Applications menu. To uninstall use the command.\r\n\r\n```\r\nflatpak uninstall io.github.sr99622.OnvifGUI\r\n```\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eSnap\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nDownload the [snap installer](https://github.com/sr99622/libonvif/releases/download/v3.3.4/onvif-gui_3.3.4_amd64.snap), then open a terminal and navigate to the Downloads folder. Use the following command to install.\r\n\r\n```\r\nsudo snap install onvif-gui_3.3.4_amd64.snap --dangerous\r\n```\r\n\r\nThe program can then be launched from the Applications menu. In order to get audio, you need to connect the pulseaudio driver.\r\n\r\n```\r\nsudo snap connect onvif-gui:pulseaudio\r\n```\r\n\r\nIf you would like to use the NPU on Intel, the driver can be installed as follows.\r\n\r\n```\r\nsudo snap install intel-npu-driver\r\nsudo chown root:render /dev/accel/accel0\r\nsudo chmod g+rw /dev/accel/accel0\r\nsudo usermod -a -G render $USER\r\nsudo bash -c \"echo 'SUBSYSTEM==\\\"accel\\\", KERNEL==\\\"accel*\\\", GROUP=\\\"render\\\", MODE=\\\"0660\\\"' \u003e /etc/udev/rules.d/10-intel-vpu.rules\"\r\nsudo udevadm control --reload-rules\r\nsudo udevadm trigger --subsystem-match=accel\r\nsudo reboot now\r\n```\r\n\r\nTo uninstall.\r\n\r\n```\r\nsudo snap remove onvif-gui\r\n```\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eGeneral Purpose Script Installation\u003c/summary\u003e \r\n\r\n\u0026nbsp;\r\n\r\nIn some situations, the standard installation may be difficult or impractical. This may be the case for older systems with system Python verisons earlier than 3.10, or those without snap or flatpak support. If the system GPU is NVIDIA this may also be the case. In these situations it may be possible to install Onvif GUI using other techniques which have been encapsulated in the installation script, that can be used following the instructions below.\r\n\r\nTo install Onvif GUI, copy the following command, paste it into a terminal window and press the Enter key. The command will download a script and install the program. You will be asked to enter a sudo password. If you are installing on an Intel platform, the script will ask if you want to install the compute drivers, which are necessary for YOLO analysis on Intel iGPU. For detailed information on what the script does, please consult the Notes - Operations section of this document. The end result of the script is an icon in the system Applications that can be used to launch the program. \r\n\r\n```\r\nwget https://raw.githubusercontent.com/sr99622/libonvif/refs/heads/master/assets/scripts/install-onvif-gui.py \u0026\u0026 python3 install-onvif-gui.py\r\n```\r\n\r\nThe program can be uninstalled by using the same script with the -u flag\r\n\r\n```\r\npython3 install-onvif-gui.py -u\r\n```\r\n\r\n\u003c/details\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eMac\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\nAn installer is available for Apple Silicon running Mac OS version Sequoia (15).\r\n\r\nDownload the [installer](https://github.com/sr99622/libonvif/releases/download/v3.3.4/OnvifGUI-3.3.4.dmg) and open it. Drag the OnvifGUI icon into the Applications folder. Once the installation is complete, the program can then be started from the Launchpad. To uninstall the program, use Finder to go to the Applications directory, then right click over the icon and select Move to Trash.\r\n\r\nFor other Mac OS versions, please build from source.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eWindows\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\nAn installer is available for Windows.\r\n\r\nDownload the [installer](https://github.com/sr99622/libonvif/releases/download/v3.3.4/OnvifGUI-installer-3.3.4.exe) and double click on it. You will receive a warning message from the Operating System. Follow the prompts on the screen to install the program. It can be launched from the icon found in the Applications menu. To uninstall the program, go to Settings -\u003e Apps -\u003e Installed Apps and find the icon, then use the three dot button on the right to select action.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eNVIDIA GPU\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nThe installers for the application are configured for iGPU usage during YOLO operation. By default, Intel processors with iGPU are supported, as well as Mac Silicon. AMD iGPU is not supported, but can run in CPU only mode. If Yolo operation is desired for systems equipped with NVIDIA GPU, an alternate installation method is required. This is due to the large size of the files required for NVIDIA operation. To use the application with NVIDIA GPU on Linux or Windows, create a python virtual environment, then\r\n\r\n```\r\npip install onvif-gui openvino\r\n```\r\n\r\nThen follow the directions at [PyTorch](https://pytorch.org/get-started/locally/) to complete the installation based on your operating system.\r\n\r\nTo use an icon with this configuration, please consult the Build From Source instructions.\r\n\r\n\u003c/details\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003eBuild From Source\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eBuilding from source on Linux or MacOS may improve compatability with some cameras and systems\u003c/i\u003e\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eLinux\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eUbuntu\u003c/summary\u003e\r\n\r\n* ### Step 1. Install Dependencies\r\n  ```\r\n  sudo apt install git cmake g++ python3-pip virtualenv libxml2-dev libavdevice-dev libsdl2-dev libxcb-cursor-dev\r\n  ```\r\n\r\n  Note: \u003ci\u003eThe dependency\u003c/i\u003e ```libxcb-cursor-dev``` \u003ci\u003eis needed for X11 platform compatibility. It is optional for Wayland only configuration.\u003c/i\u003e \r\n\r\n* ### Step 2. Clone Repository\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n  Note: \u003ci\u003eWhen updating the repository, using the command\u003c/i\u003e ```git pull --recurse-submodules``` \u003ci\u003ewill update the submodule directories as well.\u003c/i\u003e\r\n\r\n* ### Step 3. Create Virtual Environment\r\n  ```\r\n  virtualenv env\r\n  source env/bin/activate\r\n  ```\r\n\r\n  Note: \u003ci\u003eThe instructions that follow all assume that the Python virtual environment is located in the\u003c/i\u003e ```env``` \u003ci\u003esubdirectory of the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory, and that the environment has been activated. The commands shown are intended to be run from within the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory\u003c/i\u003e\r\n\r\n* ### Step 4. Install\r\n  ```\r\n  assets/scripts/compile\r\n  ```\r\n\r\n* ### Step 5. Launch Program\r\n  ```\r\n  onvif-gui\r\n  ```\r\n\r\n* ### Step 6. Add Icon\r\n  ```\r\n  sudo env/bin/onvif-gui --icon\r\n  ```\r\n\r\n  At this point, the program can be launched by clicking the icon in Applications. See step 8 for more instructions on running from the command line.\r\n\r\n* ### Step 7. Add Optional Modules for YoloX\r\n\r\n  * #### Pytorch with NVIDIA Drivers\r\n\r\n    \u003cb\u003ePlease Note:\u003c/b\u003e The instructions below will install a recent generic version of PyTorch. In some cases, there may be version specific idiosyncrasies that require a specfic version of PyTorch to match the version of the NVIDIA driver, which can be ascertained using the command ```nvidia-smi```. The installation version matrix can be found at [Getting Started](https://pytorch.org/get-started/locally/).\r\n    \r\n    ```\r\n    pip install torch torchvision\r\n    ```\r\n\r\n  * #### OpenVINO with Intel GPU \u0026 NPU drivers\r\n    ```\r\n    pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu\r\n    pip install openvino\r\n    ```\r\n\r\n    [GPU Driver Installation](https://github.com/intel/compute-runtime/releases)\r\n\r\n    [NPU Driver Installation](https://github.com/intel/linux-npu-driver/releases)\r\n\r\n* ### Step 8. Run onvif-gui from Command Line\r\n\r\n  * #### Run installed version\r\n    ```\r\n    onvif-gui\r\n    ```\r\n  * #### Run from code directly\r\n    ```\r\n    python onvif-gui/run.py\r\n    ```\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFedora\u003c/summary\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFedora Version 43\u003c/summary\u003e\r\n\r\n* ### Step 1. Install Dependencies\r\n  ```\r\n  sudo dnf install cmake g++ libxml2-devel python3.13 python3.13-devel python3-pip SDL2-devel git\r\n  sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm\r\n  sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm\r\n  sudo dnf install ffmpeg-devel --allowerasing\r\n  ```\r\n\r\n* ### Step 2. Clone Repository\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n  Note: \u003ci\u003eWhen updating the repository, using the command\u003c/i\u003e ```git pull --recurse-submodules``` \u003ci\u003ewill update the submodule directories as well.\u003c/i\u003e\r\n\r\n* ### Step 3. Create Virtual Environment\r\n\r\n  ```\r\n  python3.13 -m venv env\r\n  source env/bin/activate\r\n  ```\r\n\r\n  Note: \u003ci\u003eThe instructions that follow all assume that the Python virtual environment is located in the\u003c/i\u003e ```env``` \u003ci\u003esubdirectory of the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory, and that the environment has been activated. The commands shown are intended to be run from within the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory\u003c/i\u003e\r\n\r\n* ### Step 4. Install\r\n  ```\r\n  assets/scripts/compile\r\n  ```\r\n\r\n* ### Step 5. Launch Program\r\n  ```\r\n  onvif-gui\r\n  ```\r\n\r\n* ### Step 6. Add Icon\r\n  ```\r\n  sudo env/bin/onvif-gui --icon\r\n  ```\r\n\r\n  At this point, the program can be launched by clicking the icon in Applications. See step 8 for more instructions on running from the command line.\r\n\r\n* ### Step 7. Add Optional Modules for YoloX\r\n\r\n  * #### Pytorch with NVIDIA Drivers\r\n\r\n    \u003cb\u003ePlease Note:\u003c/b\u003e The instructions below will install a recent generic version of PyTorch. In some cases, there may be version specific idiosyncrasies that require a specfic version of PyTorch to match the version of the NVIDIA driver, which can be ascertained using the command ```nvidia-smi```. The installation version matrix can be found at [Getting Started](https://pytorch.org/get-started/locally/).\r\n    \r\n    ```\r\n    pip install torch torchvision\r\n    ```\r\n\r\n  * #### OpenVINO with Intel GPU drivers\r\n    ```\r\n    pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu\r\n    pip install openvino\r\n    sudo dnf install intel-compute-runtime\r\n    ```\r\n\r\n  A reboot after installing these libraries may avoid a crash on the initial run of the program with Yolo enabled.\r\n\r\n* ### Step 8. Run onvif-gui from Command Line\r\n\r\n  * #### Run installed version\r\n    ```\r\n    onvif-gui\r\n    ```\r\n  * #### Run from code directly\r\n    ```\r\n    python onvif-gui/run.py\r\n    ```\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFedora Version 42 and Earlier\u003c/summary\u003e\r\n\r\n* ### Step 1. Install Dependencies\r\n  ```\r\n  sudo dnf install cmake g++ libxml2-devel python3-devel python3-pip SDL2-devel virtualenv git\r\n  sudo dnf install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm\r\n  sudo dnf install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm\r\n  sudo dnf install ffmpeg-devel --allowerasing\r\n  ```\r\n\r\n* ### Step 2. Clone Repository\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n  Note: \u003ci\u003eWhen updating the repository, using the command\u003c/i\u003e ```git pull --recurse-submodules``` \u003ci\u003ewill update the submodule directories as well.\u003c/i\u003e\r\n\r\n* ### Step 3. Create Virtual Environment\r\n  ```\r\n  python -m venv env\r\n  source env/bin/activate\r\n  ```\r\n\r\n  Note: \u003ci\u003eThe instructions that follow all assume that the Python virtual environment is located in the\u003c/i\u003e ```env``` \u003ci\u003esubdirectory of the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory, and that the environment has been activated. The commands shown are intended to be run from within the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory\u003c/i\u003e\r\n\r\n* ### Step 4. Install\r\n  ```\r\n  assets/scripts/compile\r\n  ```\r\n\r\n* ### Step 5. Launch Program\r\n  ```\r\n  onvif-gui\r\n  ```\r\n\r\n* ### Step 6. Add Icon\r\n  ```\r\n  sudo env/bin/onvif-gui --icon\r\n  ```\r\n\r\n  At this point, the program can be launched by clicking the icon in Applications. See step 8 for more instructions on running from the command line.\r\n\r\n* ### Step 7. Add Optional Modules for YoloX\r\n\r\n  * #### Pytorch with NVIDIA Drivers\r\n\r\n    \u003cb\u003ePlease Note:\u003c/b\u003e The instructions below will install a recent generic version of PyTorch. In some cases, there may be version specific idiosyncrasies that require a specfic version of PyTorch to match the version of the NVIDIA driver, which can be ascertained using the command ```nvidia-smi```. The installation version matrix can be found at [Getting Started](https://pytorch.org/get-started/locally/).\r\n    \r\n    ```\r\n    pip install torch torchvision\r\n    ```\r\n\r\n  * #### OpenVINO with Intel GPU drivers\r\n    ```\r\n    pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu\r\n    pip install openvino\r\n    sudo dnf install intel-compute-runtime\r\n    ```\r\n\r\n  A reboot after installing these libraries may avoid a crash on the initial run of the program with Yolo enabled.\r\n\r\n* ### Step 8. Run onvif-gui from Command Line\r\n\r\n  * #### Run installed version\r\n    ```\r\n    onvif-gui\r\n    ```\r\n  * #### Run from code directly\r\n    ```\r\n    python onvif-gui/run.py\r\n    ```\r\n\u003c/details\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eManjaro\u003c/summary\u003e\r\n\r\n* ### Step 1. Install Dependencies\r\n  ```\r\n  sudo pacman -S cmake base-devel ffmpeg\r\n  ```\r\n\r\n* ### Step 2. Clone Repository\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n  Note: \u003ci\u003eWhen updating the repository, using the command\u003c/i\u003e ```git pull --recurse-submodules``` \u003ci\u003ewill update the submodule directories as well.\u003c/i\u003e\r\n\r\n* ### Step 3. Create Virtual Environment\r\n  ```\r\n  python -m venv env\r\n  source env/bin/activate\r\n  ```\r\n\r\n  Note: \u003ci\u003eThe instructions that follow all assume that the Python virtual environment is located in the\u003c/i\u003e ```env``` \u003ci\u003esubdirectory of the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory, and that the environment has been activated. The commands shown are intended to be run from within the\u003c/i\u003e ```libonvif``` \u003ci\u003edirectory\u003c/i\u003e\r\n\r\n* ### Step 4. Install\r\n  ```\r\n  assets/scripts/compile\r\n  ```\r\n\r\n* ### Step 5. Launch Program\r\n  ```\r\n  onvif-gui\r\n  ```\r\n\r\n* ### Step 6. Add Icon\r\n  ```\r\n  sudo env/bin/onvif-gui --icon\r\n  ```\r\n\r\n  At this point, the program can be launched by clicking the icon in Applications. See step 8 for more instructions on running from the command line. \r\n\r\n* ### Step 7. Add Optional Modules for YoloX\r\n\r\n  * ### Pytorch with NVIDIA Drivers\r\n\r\n    \u003cb\u003ePlease Note:\u003c/b\u003e The instructions below will install a recent generic version of PyTorch. In some cases, there may be version specific idiosyncrasies that require a specfic version of PyTorch to match the version of the NVIDIA driver, which can be ascertained using the command ```nvidia-smi```. The installation version matrix can be found at [Getting Started](https://pytorch.org/get-started/locally/).\r\n    \r\n    ```\r\n    pip install torch torchvision\r\n    ```\r\n\r\n  * ### OpenVINO with Intel GPU drivers\r\n    ```\r\n    pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu\r\n    pip install openvino\r\n    sudo pacman -S intel-compute-runtime\r\n    ```\r\n\r\n* ### Step 8. Run onvif-gui from Command Line\r\n\r\n  * #### Run installed version\r\n    ```\r\n    onvif-gui\r\n    ```\r\n  * #### Run from code directly\r\n    ```\r\n    python onvif-gui/run.py\r\n    ```\r\n\r\n\r\n\u003c/details\u003e\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eMac\u003c/summary\u003e\r\n\r\n* ### Step 1. Install Homebrew\r\n\r\n  Please refer to the [Homebrew Installation Instructions](https://brew.sh/).\r\n\r\n* ### Step 2. Install Dependencies\r\n\r\n  ```\r\n  brew update\r\n  brew upgrade\r\n  brew install python\r\n  brew install cmake\r\n  brew install git\r\n  brew tap homebrew-ffmpeg/ffmpeg\r\n  brew install homebrew-ffmpeg/ffmpeg/ffmpeg\r\n  ```\r\n\r\n  \u003ci\u003e  Please note that the standard Homebrew core ffmpeg version is incompatible with onvif-gui. For this reason, the install procedure calls for the 3rd party tap [homebrew-ffmpeg](https://github.com/homebrew-ffmpeg/homebrew-ffmpeg). \u003cb\u003eIf you already have another version of ffmpeg installed, this will create a conflict.\u003c/b\u003e In order to install this version, it is necessary to run \u003c/i\u003e```brew uninstall ffmpeg``` \u003ci\u003ebefore this tap can be installed.\u003c/i\u003e\r\n\r\n* ### Step 3. Create Virtual Environment\r\n\r\n  \u003ci\u003e Homebrew will install the latest version of python. You can see the version installed using the command\u003c/i\u003e `brew list python`.\u003ci\u003e Use the full python name with version to build the virtual environment\u003c/i\u003e\r\n\r\n  ```\r\n  python3.13 -m venv onvif-gui-env\r\n  source activate onvif-gui-env\r\n  ```\r\n\r\n* ### Step 4. Clone Repository\r\n\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n* ### Step 5. Compile\r\n\r\n  ```\r\n  assets/scripts/compile\r\n  ```\r\n\r\n* ### Step 6. Launch Program\r\n\r\n  ```\r\n  onvif-gui\r\n  ```\r\n\r\n* ### Optional Step For Server Configuration\r\n\r\n  To increase the number of socket connections available for the server, use the ulimit command to raise the file limit.\r\n\r\n  ```\r\n  ulimit -n 8192\r\n  ```\r\n\r\n  You can add this command to your shell resource file, e.g. .zshrc in the user home directory. This will then set the limit for each terminal session as it is opened on a persistent basis.\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eWindows\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\nIn order to build from source on Windows, development tools and python are required. Please follow the instructions for installing [Visual Studio](https://visualstudio.microsoft.com/), [cmake](https://cmake.org/download/), [git](https://git-scm.com/download/win) and [python](https://www.python.org/downloads/windows/). When installing Visual Studio, select the desktop C++ development libraries to get the compiler.\r\n\r\n* ### Step 1. Go to Home Directory\r\n\r\n  ```\r\n  cd %HOMEPATH%\r\n  ```\r\n\r\n* ### Step 2. Create Virtual Environment\r\n\r\n  ```\r\n  python -m venv onvif-gui-env\r\n  onvif-gui-env\\Scripts\\activate\r\n  ```\r\n* ### Step 3. Clone Dependencies\r\n\r\n  ```\r\n  git clone https://github.com/sr99622/onvif-gui-win-libs\r\n  ```\r\n\r\n* ### Step 4. Clone Repository\r\n\r\n  ```\r\n  git clone --recurse-submodules https://github.com/sr99622/libonvif\r\n  cd libonvif\r\n  git submodule update --init --recursive\r\n  ```\r\n\r\n* ### Step 5. Set Environment Variables\r\n\r\n  ```\r\n  assets\\scripts\\components\\windows\\env_variables\r\n  ```\r\n\r\n* ### Step 6. Copy Run Time Libs to Install Path\r\n\r\n  ```\r\n  assets\\scripts\\components\\windows\\copy_libs\r\n  ```\r\n\r\n* ### Step 7. Install\r\n\r\n  ```\r\n  assets\\scripts\\compile\r\n  ```\r\n\r\n* ### Step 8. Launch Program\r\n\r\n  ```\r\n  python onvif-gui\\run.py\r\n  ```\r\n* ### Step 9. Create Icon Launcher\r\n\r\n  ```\r\n  pip install winshell\r\n  onvif-gui-env\\Scripts\\onvif-gui --icon\r\n  ```\r\n\r\n* ### Step 10. Install Drivers for GPU\r\n\r\n  * Intel iGPU\r\n\r\n  If the system is equipped with Intel iGPU, the GPU drivers are usually included in the default Windows installation. If NPU operation is desired, the drivers can be found at [Intel](https://www.intel.com/content/www/us/en/download/794734/intel-npu-driver-windows.html). Once the drivers have been installed, run the following commands from inside the Python virtual environment\r\n\r\n  ```\r\n  pip install openvino\r\n  pip install torch torchvision\r\n  ```\r\n\r\n  * NVIDIA GPU\r\n\r\n  If the system is equipped with NVIDIA GPU, install the drivers if necessary, the consult the [torch instructions](https://pytorch.org/get-started/locally/) for your CUDA version. You will also need to `pip install openvino`. \r\n\r\n\u003c/details\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\u003csummary\u003eFirewall Rules\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nOnvif GUI requires network access to communicate with cameras in Stand Alone or Server mode. If the host computer uses a firewall, it may be necessary to enable some communciations ports so that cameras can use the WS-Discovery protocol to announce their presence to the program.\r\n\r\nSome Distributions come with ```firewalld``` pre-installed and configured. These commands will work with firewalld and present a common operation that other firewalls will implement in a similar fashion.\r\n\r\nThe firewalld package in some distributions includes pre-defined services for WS-Discovery which might manage this port automatically. If the service definition exists on your system, you can use the simpler command: \r\n\r\n```\r\nsudo firewall-cmd --permanent --zone=public --add-service=ws-discovery-client\r\nsudo firewall-cmd --reload\r\n```\r\n\r\nYou can check for available WS-Discovery services with:\r\n\r\n```\r\nfirewall-cmd --get-services | grep ws-discovery\r\n```\r\n\r\nTo configure the service manually in the event that it is not included in the firewall services package.\r\n\r\nTo allow inbound traffic with a specific source port (source-port) in firewalld, you must use a rich rule. Standard port rules in firewalld filter traffic based on the destination port, so a more specific rule is needed to inspect the source port. The common use case for source port 3702/UDP is for WS-Discovery (Web Services Dynamic Discovery) protocols. \r\n\r\nCommand to Allow Inbound Source Port 3702 \r\n\r\nRun the following commands in your terminal to allow inbound UDP traffic from source port 3702 permanently: Add a rich rule to the desired zone (e.g., public) that accepts traffic where the source port is 3702.\r\n\r\n\r\n```\r\nsudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=\"ipv4\" source-port port=\"3702\" protocol=\"udp\" accept'\r\nsudo firewall-cmd --reload\r\n```\r\n\r\n```\r\nsudo firewall-cmd --zone=public --list-rich-rules\r\n```\r\n\r\nThe output should include the rule you just added. \r\n\r\nOnvif GUI in server configuration also requires ports to be opened for Onvif, RTSP and HTTP servers. The following commands should achieve this\r\n\r\n```\r\nsudo firewall-cmd --permanent --add-port=8554/tcp\r\nsudo firewall-cmd --permanent --add-port=8550/tcp\r\nsudo firewall-cmd --permanent --add-port=8800/tcp\r\nsudo firewall-cmd --reload\r\n```\r\n\r\nFor client configuration to be able to listen for alarms from the server, open port 8080 on the multicast address 239.255.255.247 using rich rule\r\n\r\n```\r\nsudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family=\"ipv4\" destination address=\"239.255.255.247\" port port=\"8080\" protocol=\"udp\" accept'\r\nsudo firewall-cmd --reload\r\n```\r\n\r\n\u003c/details\u003e\r\n\r\n\u003c/details\u003e\r\n\r\n## Operation\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eGetting Started\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/discover.png\"\u003e\r\n\r\nDiscover\r\n\r\nTo get started, click the Discover button. A login screen will appear for each camera as it is found. The Settings tab may be used to set a default login that can be used to automatically submit login credentials to cameras. There is also an Auto Discover check box on the Settings panel.\r\n\r\nInitially, cameras will populate the list using the default name provided by the manufacturer. To change the camera name, use the F2 key, or the right click context menu over the camera list.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/play.png\"\u003e\r\n\r\nPlay\r\n\r\nUpon completion of discovery, the camera list will be populated. A single click on a camera in the list will display the camera parameters in the lower part of the tab. Double clicking will start the camera output stream. The camera stream may also be started by clicking the play button or by typing the enter key while a camera is highlighted in the list.\r\n\r\nMultiple cameras can stream simultaneously. The application will add camera output to the display for each camera as it is started. The controls for camera operations apply to the current camera, which is the highlighted camera in the list on the camera panel. The current camera will have a thin white border around it in the display.\r\n\r\nNetwork conditions, compute load or internal camera issues may cause buffer overflow in the application pipeline. The result may be that packets are dropped, which can degrade the quality of the stream. If packets are being dropped, the camera display will show a yellow border.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/play_all.png\"\u003e\r\n\r\nPlay All\r\n\r\nThe play action can be applied to all cameras simultaneously.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/stop.png\"\u003e\r\n\r\nStop\r\n\r\nWhen the camera stream is running, the play button for that camera will change appearance to the stop icon. Clicking the button will stop the stream.  The stream can also be stopped from the camera list by double clicking or typing the enter key.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/stop_all.png\"\u003e\r\n\r\nStop All\r\n\r\nThe stop action can be applied to all cameras simultaneously.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/record.png\"\u003e\r\n\r\nRecord\r\n\r\nRecording can be initiated manually by clicking the record button. The file name is generated automatically and is based on the start time of the recording in date format as YYYYMMDDmmSS.mp4. The Archive Directory setting will determine the location of the file. A subdirectory is created for each camera to help organize files within the archive.\r\n\r\nDuring manually initiated recording, a rotating red colored tick mark will show in the lower right corner of the stream display. The Record Button on the Camera Panel will show red during all recording operations. Note that recording initiated automatically during Alarm conditions or Record Always will disable the Record Button. \r\n\r\nFiles created by the application are limited in length to 15 minutes. Recordings that require a longer time will be broken up into several parts that are each 15 minutes long. There will be a slight overlap between files broken up this way corresponding to the length of the Pre Record Buffer setting.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/history.png\"\u003e\r\n\r\nFile Operations\r\n\r\nPicture and Video files generated by the system can be viewed and managed with a built in file browser. See the File Operations section of this document for more details.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/snapshot.png\"\u003e\r\n\r\nSnapshot\r\n\r\nA snapshot of the currently selected camera cna be saved as jpg file. The snapshot will be named by the system using YYYYMMMDDHHmmSS.jpg format, unless otherwise specified in the file save dialog. The file save dialog can be suppressed using the checkbox labelled \"Snapshot File Dlg\" on the Settings-\u003eGeneral tab. There are two modes under which files may be saved, Local and Remote. The Local mode will use the stream currently displayed and convert that to a picture format. This mode will preserve the aspect ratio of the stream and any artifacts such as AI boxes drawn on the image. The Remote mode will address the camera directly through the network and request a snapshot of the Record Profile for the camera. This will generally be a higher resolution image and may be subject to latency or camera network errors. In the event that the camera fails to deliver the image, the Local mode will be used as a fallback.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/apply.png\"\u003e\r\n\r\nApply\r\n\r\nCamera parameters are available on the tabs on the lower right side of the application. Initially, the Apply button will be disabled with a dimmed icon. Once a parameter has been changed, the Apply button will be enabled, which can be used to commit the change to the camera. The camera may re-start the stream in order to make the changes.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/full_screen.png\"\u003e\r\n\r\nFull Screen\r\n\r\nToggle the application between full screen and normal mode.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/audio.png\"\u003e\r\n\r\nMute\r\n\r\nCamera audio can be controlled from the panel. The mute button can be clicked to mute the audio. The mute button appearance indicates the state of the audio. The volume slider can be used to control the volume. Note that the mute and volume controls are applied to each camera individually.\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/help.png\"\u003e\r\n\r\nHelp\r\n\r\nOpens the system web browser to this page.\r\n\r\n\u003ch2\u003eKeyboard Bindings\u003c/h2\u003e\r\n\r\nMany of the above functions can be executed without using the mouse via keyboard bindings. Below is a list of the bindings\r\n\r\n\u003cb\u003eEnter\u003c/b\u003e\r\n\r\nThis will start the currently selected camera. If the camera is already running, the Focus window will show with the high resolution camera stream. Please note that the first time the Focus window launches, the application focus will transfer to that window.\r\n\r\n\u003cb\u003eEscape\u003c/b\u003e\r\n\r\nIf the Focus window is visible, the Escape key will hide it. If Focus window is not visible, the camera stream is stopped.\r\n\r\n\u003cb\u003eCtl+D\u003c/b\u003e\r\n\r\nStart Discovery\r\n\r\n\u003cb\u003eCtl+A\u003c/b\u003e\r\n\r\nStart/Stop all cameras\r\n\r\n\u003cb\u003eCtl+F\u003c/b\u003e\r\n\r\nOpen the File Browser\r\n\r\n\u003cb\u003eCtl+S\u003c/b\u003e\r\n\r\nTake a snapshot for the currently selected camera if running\r\n\r\n\u003cb\u003eCtl+R\u003c/b\u003e\r\n\r\nToggle recording for the currently selected camera if running\r\n\r\n\u003cb\u003eF1\u003c/b\u003e\r\n\r\nShow stream information for a running camera\r\n\r\n\u003cb\u003eF2\u003c/b\u003e\r\n\r\nRename the currently selected camera\r\n\r\n\u003cb\u003eDelete\u003c/b\u003e\r\n\r\nRemove the currently selected camera from the list. This will remove the camera from the Cached Addresses for discovery. Use broadcast discovery to re-enlist the camera.\r\n\r\n\r\n\r\n---\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eCamera Parameters\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eChanges are committed to the camera by using the Apply button, if necessary.\u003c/i\u003e\r\n\r\n---\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eMedia\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/media_tab.png\" width=\"400\"/\u003e\r\n\r\n\u0026nbsp;\r\n\r\n* ### W x H (Resolution)\r\n\r\n    Camera resolution is adjusted using the combo box which has available settings. To change the camera resolution, make a selection from the combo box and then click the apply button. The camera may re-start the video stream in order to effect the change.\r\n\r\n* ### Aspect\r\n\r\n    When using substreams, the aspect ratio may be distorted. Changing the aspect ratio by using the combo box can restore the correct appearance of the video. If the aspect ratio has been changed this way, the label of the box will have a * appended. This setting is not native to the camera, so it is not necessary to click the apply button for this change.\r\n\r\n* ### FPS\r\n\r\n    Frame rate of the camera can be adjusted using the spin box. The change is made on the camera when the apply button is clicked. Higher frame rates will have a better appearance with smoother motion at the expense of increased compute load.\r\n\r\n* ### GOP\r\n\r\n    Keyframe interval of the video stream. Keyframes are a full frame encoding, whereas intermediate frames are differential representations of the changes between frames.  Keyframes are larger and require more computing power to process. Higher GOP intervals mean fewer keyframes and as a  result, less accurate representation of the video.  Lower GOP rates increase the accuracy of the  video at the expense of higher bandwidth and compute load. It is necessary to click the Apply button to enact these changes on the camera.\r\n\r\n    Note that some cameras may have an option for Dynamic GOP or Adaptive Framerate, or some other name for a process that reduces the GOP automatically based on the lack of motion in the camera view. It is advised to turn this feature off when using onvif-gui. To access the feature, use the camera web application from the System Tab -\u003e Browser button.\r\n\r\n* ### Bitrate\r\n\r\n    The bitrate of the video stream. Higher bitrates increase the quality of the video appearance at the expense of larger file sizes. This is most relevant when maintaining recordings of videos on the host file system. Bitrates are generally expressed in kbps by cameras, but may be inaccurate or scaled differently.  Use the Apply button after changing this setting to enact the change on the camera.\r\n\r\n* ### Profile\r\n\r\n    Most cameras are capable of producing multiple media streams. This feature can be useful when running many cameras on the same computer or if a compute intensive task is being run on a stream. The default stream of the camera is called the Main Stream. A secondary stream running at lower settings is called the Sub Stream. The application uses the terms Display Profile and Record Profile to describe these settings.\r\n\r\n    Initially, the Main Stream is selected by default as both the Display Profile and the Record Profile. By changing the selection to a secondary profile on the Media Tab, a lower order Sub Stream can be displayed. The term lower order implies that the Sub Stream has lower resolution, lower frame rate and lower bitrate than the Main Stream. Note that the application may be processing both streams, but only the Display Profile selected on the Video Tab is displayed. The other stream, referred to as the Record Stream, is not decoded, but its packets are collected for writing to disk storage.\r\n\r\n    The display will update automatically when the Video Tab Profile combo box is changed, so it is not necessary to click the Apply button when changing this setting.\r\n\r\n* ### No Audio\r\n\r\n    Audio can be disabled by selecting this check box. This is different than mute in the sense that under mute, the audio stream is decoded, but not played on the computer speakers. If the No Audio check box is selected, the audio stream is discarded. If the No Audio checkbox is deselected, the stream will restart in order to initialize the audio. The Apply button is not clicked when changing this parameter. This checkbox is selected by default.\r\n\r\n    \u003cb\u003e** Please Note **\u003c/b\u003e If the audio is enabled by deselecting this check box, and there is no physical audio device connected to the computer, there may be issues with stream processing. If an Audio Driver is specified on the Settings -\u003e General panel such as pulseaudio, there should be a physical audio device such as headphones, speakers or HDMI connected to the host computer. Without a physical device, it may be possible in some cases for the audio driver to enter an undefined state which may cause the camera stream to stutter or freeze and may lead to lengthy timeouts when closing the camera stream. If there is no physical device available, the Audio Driver can be changed to dummy in order to avoid this problem. This condition applies only to camera streams which are displayed to the user interface. The Record Stream, if different than the Display Stream, is hidden and is not affected by this condition.\r\n\r\n* ### Audio\r\n\r\n    The audio encoder used by the camera is set here.  If the camera does not have audio capability, the audio section will be disabled. Note that some cameras may have audio capability, but the stream is not available due to configuration issues or lack of hardware accessories.  Available audio encoders will be shown in the combo box and may be set by the user. Changes to the audio parameter require that the Apply button is clicked to enact the change on the camera.\r\n    \r\n    AAC encoding is a higher quality stream and are recommended for recording. G711 style encoders are good for low latency playback if real time operation is important. Streams using AAC encoding map to mp4 file format and G711 uses mov. Note that some cameras have incorrect implementations for encoders and the audio may not be usable in the stream recording to disk. Please be aware that currently onvif-gui is unable to process G726.\r\n\r\n* ### Samples\r\n\r\n    Available sample sizes are shown in the combo box. Use the Apply button to enact the change on the camera.  Higher sample sizes increase the quality of the audio at the expense of higher bandwidth and disk space when recording. Lower sample sizes correlate to lower latency. The audio bitrate is implied by the sample size based on encoder parameters.\r\n\r\n* ### Video Alarm\r\n\r\n    This check box enables video analytic processing for alarm generation. See the section on Video Panel for reference to video alarm functions.  Note that the Video Alarm check box must be selected in order to enable the Video Panel for that camera. The Apply button is not used for this setting. During Alarm condition, a solid red circle will show in the stream display if not recording, or a blinking red circle if the stream is being recorded.\r\n\r\n* ### Audio Alarm\r\n \r\n    This check box enables audio analytic processing for alarm generation. See the section on Audio Panel for reference to audio alarm functions.  Note that the Audio Alarm check box must be selected in order to enable the Audio Panel for that camera. The Apply button is not used for this box. During Alarm condition, a solid red circle will show in the stream display if not recording, or a blinking red circle if the stream is being recorded.\r\n\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eImage\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/image_tab.png\" width=\"400\"/\u003e\r\n\r\n\u0026nbsp;\r\n\r\nThe sliders control various parameters of the video quality.  The Apply button must be clicked after changing the setting to enact the change on the camera.\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eNetwork\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/network_tab.png\" width=\"400\"/\u003e\r\n\r\n\u0026nbsp;\r\n\r\nIf the DHCP is enabled, all fields are set by the server, if DHCP is disabled, other network settings may be completed manually. Note that IP setting changes may cause the camera to be inaccessible if using cached addresses. Use the Discover button to find the camera, or enter the new address manually from the settings panel.\r\n\r\nTake care when changing these settings, the program does not check for errors and it maybe possible to set the camera into an unreachable configuration. \r\n\r\nThe Apply button must be clicked to enact any of these changes on the camera.\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003ePTZ\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/ptz_tab.png\" width=\"400\"/\u003e\r\n\r\n\u0026nbsp;\r\n\r\nSettings pertain to preset selections or current camera position. The arrow buttons, Zoom In (+) and Zoom Out (-) control the position and zoom. The numbered buttons on the left correspond to preset positions. Clicking one of the numbered buttons will send the camera to the corresponding preset position. To set a preset, position the camera, then check Set Preset, then click the numbered preset button. It is not necessary to use the Apply button with any of the settings on this panel.\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eSystem\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/system_tab.png\" width=\"400\"/\u003e\r\n\r\n\u0026nbsp;\r\n\r\n* ### Recording\r\n\r\n    The check box at the top of the Record group box will enable automatic recording of camera streams when selected. The Record Profile combo box below will select the camera profile to be recorded.\r\n    \r\n    If the Record Alarms radio button is selected, the application will record automatically during alarm condition. While the stream is being recorded during alarm condition, there will be a blinking red circle in the lower right corner of the stream display. File sizes are limited to 15 minute lengths, so multiple files will be created if the alarm condition lasts longer than this limit.\r\n\r\n    Selecting the Record Always radio button will cause the application to record the camera at all times that it is streaming. The files are written to disk in 15 minute file lengths, and are named in a time format representing the start time of the recording. Unlike other recording modes, the Record Always condition does not display an indicator in the stream display.\r\n\r\n    It not necessary to use the Apply button for any of the settings on this panel.\r\n\r\n* ### Alarm Sounds\r\n\r\n    The check box at the top of the Sounds group box will enable alarm sounds on the computer speaker when checked.  If the Loop radio button is selected, the sound will play continuously during an alarm condition.  Selection of the Once radio button will cause the application to play the alarm sound once per alarm condition.\r\n\r\n* ### Record Profile\r\n\r\n    The drop down box can be used to the select the camera profile that will be recorded to disk. The Record Profile can be different than the Display Profile shown in the application. This setting can be used most effectively when the application is configured to show the low resolution substream profile in the display, and use the high resolution main profile as the recording source. This enables the application to maintain real time display status, especially with multiple streams, while preserving high resolution accuracy in the recorded stream. Because the recorded stream in not decoded, but rather is piped directly from the camera to disk, the high resolution recording presents very little compute load on the host.\r\n\r\n* ### Record Audio\r\n\r\n    In many cases, the audio of the Display Profile will be disabled. By default, audio is disabled for camera streams. This is particulaly relevant when displaying multiple streams, as the audio from multiple cameras playing simultaneously may cause confusion. This checkbox allows the display audio to be disabled while preserving audio on the recorded stream.  \r\n\r\n* ### Remote Snapshot Image\r\n\r\n  By default, this option is disabled, which means that the system will use the currently playing camera display stream as the source for snapshot images. If the display stream is a low resolution stream, the snapshot will also be the same low resolution. If the Yolo detector is running and the Show Alarms on Display is enabled from Settings -\u003e Alarms, detection boxes shown on the stream will be present on the snapshot image. This may be useful behavior when initially configuring the system when false positive detections are occurring, as the detection boxes will show the origin of the alarm.\r\n\r\n  If a high resolution snapshot image is desired, this might be possible depending on the camera capabilities. Most, but not all cameras will expose a high resolution still image source available over the network. Some cameras will provide this capability in the spec, but in practice the image may not be usable. Experimentation is required to determine if the camera output is acceptable. In the event that the camera fails to deliver the image during runtime, the system will fall back to stream image capture. \r\n\r\n* ### Reboot\r\n\r\n    Click to reboot the camera.\r\n\r\n* ### Browser\r\n\r\n    This will launch the web browser and connect to the camera.  Cameras will have a web interface that can be used to set parameters that are not available to the application.\r\n\r\n* ### Sync Time\r\n\r\n    Clicking the Sync Time button will bring up a dialog box with time settings options for the camera.\r\n\r\n    \u0026nbsp;\r\n\r\n    \u003cimage src=\"assets/images/sync_time.png\" width=\"640\"\u003e\r\n\r\n    \u0026nbsp;\r\n\r\n    At the top of the dialog are boxes showing the current settings for computer time and camera time respectively. The camera time is calculated based on the time offset parameter used by the computer for authentication. This time should, but may not necessarily, closely match the time displayed by the camera in the video stream. Variations in how cameras compute time may result in an offset mismatch between the time displayed in the camera video stream and the computed time shown on the dialog.\r\n\r\n    The Time Zone and Daylight Savings Time fields can be edited by the user and set in the camera for configuration. \r\n    \r\n    The Time Zone format can vary and different cameras will accept different formats. The long format shown in the example resembles POSIX standard and is the most comprehensive format which includes time offset from UTC and DST offset with DST start and finish parameters. Most cameras do not conform entirely to this standard, but may accept the string while selectively ignoring portions of the configuration. The most widely accepted form is UTC format or alternately, GMT format both of which have an optional +/- sign and hour plus optional minute offsets delimited by colon. Examples might be UTC0 or UTC-04:00. The GMT format is the same, but note that the polarity of the sign is reversed e.g. GMT0 or GMT+04:00. Other formats may possibly work e.g. EST5EDT, which may be worth trying.\r\n\r\n    The Daylight Savings Time checkbox can be edited by the user, or it may be set automatically by the camera depending on the camera abilities. Not all cameras support DST, and some may save the DST flag but not act on the information when computing time.\r\n\r\n    The Time Sync Method group box selects the time adjustment strategy used by the application.\r\n\r\n    NTP Time setting will enable the NTP server box to allow editing. There are three types of server configuration. From DHCP will instruct the camera to use the NTP server data from the most recent DHCP configuration. This may or may not be the server data from the DHCP. In many cases, this will be a hardcoded address in the camera firmware. IPv4 address will use a numeric style IP address for the NTP server. A failure of this parameter configuration may or may not produce an error message from the camera. A Domain Name style server configuration will use a dot notation server name similar to a web address and will require proper DNS configuration for resolution. Once configured, the camera will use the Time Zone and DST information it has stored in its settings to deduce its time from the NTP server response to the camera query. In all cases, if the NTP server address is located on the internet the camera will require internet access in order to contact the server.\r\n\r\n    Manual Time Setting will use the computer hosting the application to derive the time sent to the camera. The computer will send a UTC time to the camera and the camera will calculate its time based on the Time Zone and DST information that it has in its settings.\r\n\r\n    UTC as Local setting is a specific type of manual setting that will force the camera into displaying the same time as the computer host. This is done by setting the camera Time Zone to UTC0 and setting the time on the camera to match the application computer host time. As UTC time is not dependent on DST, issues associated with DST can be ignored. If the computer time is accurate and regularly updated, this can be a good strategy for many cameras, as it circumvents a lot of ambiguity in time setting configurations which may be inaccurate or outdated. Note that some cameras, if connected to the internet, may eventually resort to hidden NTP settings that will reset the camera time (often incorrectly) if this strategy is employed. If a camera is using this type of NTP access, it is advisable to isolate it from the internet as a security precaution. If this is not practical or desired, the time zone and DST settings can be used such that the camera perhaps might display the correct time.\r\n\r\n    Ultimately, there are many variations and inconsistencies when dealing with camera times. In most cases, UTC as Local with cameras isolated from the internet will provide the best results. Camera algorithms for time setting are often opaque and in many cases incomplete or incorrect. Cameras with proper time setting implementations can be set using the Time Zone and DST settings, but should be verified for accuracy and completeness, especially regarding DST. NTP use is discouraged, as cameras should be isolated from the internet as a security precaution. Using an NTP server on the internal network does not provide any advantage over Manual time setting via the application host computer.\r\n\r\n\u003c/details\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFile Operations\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eCamera recordings can be viewed from within the application. Files can be searched for a particular moment in time. A server can share recordings using Samba so that Windows, Mac and Linux clients can view previously recorded streams from the server.\u003c/i\u003e\r\n\r\n\u003ci\u003eSnapshots generated by Yolo alarms or taken manually by the user are automatically linked to existing Video files such that activating play from the Picture panel will show the associated Video file starting at the time at which the snapshot was taken.\u003c/i\u003e\r\n\r\n\u003ci\u003eKeyboard bindings make file review effortless and responsive so that pictures and relevant videos can be searched and viewed quickly and easily.\u003c/i\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\nThe application maintains folders for the storage of camera snapshots and recordings. The folder locations by default are the OS picture and video storage locations, and can be changed using the directory setting at the top of the panel. There is a subfolder for each camera that has previously made pictures or recordings in the application. If you are using Onvif GUI as a client, and the server is configured to share files using Samba, you can use the server shared folder to access recordings made on the server. \r\n\r\nInside the camera folders are the individual picture or video files recorded by the camera. The files are named using a datetime convention which represents the time that the snapshot images was taken or the start time of the video recording. Video recordings are prepended by a time interval specified on the Settings -\u003e Alarm panel as Pre-Alarm Buffer Size. This insures that the moments immediately prior to the beginning of the recording are captured.\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/picture_panel.png\" width=\"500\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/file_panel.png\" width=\"500\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nDouble clicking on a picture file will start the associated video playing at the time stamp of the picture. The same action can be started using the Enter key when a picture file is highlighted. In the event that there is not video coverage for the picture timestamp, the playback will fail silently. While a video is playing, using the Escape key will return operation to picture browse mode. Using the up and down arrow keys will traverse the picture directory contents, showing each picture as the selection changes. Folders can be opened and closed using the Enter key. Right clicking over the file will bring up a context menu with various options.\r\n\r\nFile playback is configured such that one file is played at a time. Keyboard shortcuts are available for faster navigation. Video playback controls are available on either the Picture or Videos panel.\r\n\r\n\u003ch3\u003eFile Playback Controls For Mouse\u003c/h3\u003e\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/search.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/refresh.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/snapshot.png\"\u003e\r\n\r\nSearch\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Refresh\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Snapshot\r\n\r\n\u003cimage src=\"onvif-gui/onvif_gui/resources/play.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/pause.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/stop.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/previous.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/next.png\"\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cimage src=\"onvif-gui/onvif_gui/resources/audio.png\"\u003e\r\n\r\nPlay\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Pause\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Stop\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Prev\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Next\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;Mute\r\n\r\n---\r\n\r\n### Keyboard Shortcuts\r\n\r\nKeyboard shortcuts are available when the file list of either the Picture Panel or the Video Panel has the application focus. A single click on any file or folder in the list will achieve this focus. Keyboard operations may be significantly faster than using the mouse when browsing through files.\r\n\r\n* \u003ch3\u003eEnter\u003c/h3\u003e\r\n\r\n  The Enter key can be used to Play the file. Note that if another file is currently playing, it will be stopped before the new file starts.\r\n\r\n* \u003ch3\u003eSpace\u003c/h3\u003e\r\n\r\n  The space bar can be used to Pause the current file playing.\r\n    \r\n* \u003ch3\u003eEscape\u003c/h3\u003e\r\n\r\n  The Escape key can be used to stop the current file playing.\r\n    \r\n* \u003ch3\u003eDelete\u003c/h3\u003e\r\n\r\n  Files may be deleted by typing the Delete key.\r\n\r\n* \u003ch3\u003eF1\u003c/h3\u003e\r\n\r\n  The F1 key will show a dialog with file properties.\r\n    \r\n* \u003ch3\u003eF2\u003c/h3\u003e\r\n\r\n  Files can be renamed using the F2 key.\r\n    \r\n* \u003ch3\u003eRight Arrow\u003c/h3\u003e\r\n\r\n  The Right Arrow will fast forward the file playing by 10 seconds.\r\n    \r\n* \u003ch3\u003eLeft Arrow\u003c/h3\u003e\r\n\r\n  The Left Arrow will rewind the file playing by 10 seconds.\r\n\r\n* \u003ch3\u003eUp Arrow\u003c/h3\u003e\r\n\r\n  The Up Arrow will move to the previous file without stopping the current file. Use the Enter key to start playing the newly highlighted file.\r\n\r\n* \u003ch3\u003eDown Arrow\u003c/h3\u003e\r\n\r\n  The Down Arrow will move to the next file without stopping the current file. Use the Enter key to start playing the newly highlighted file.\r\n\r\n### Progress / Seek Indicator\r\n\r\nBoth File Panels have a progress bar that will show the state of the playback. The total duration of the file is shown on the right hand side of the progress bar, and the left hand side will show the current file position which is indicated by the progress bar handle. If the mouse hovers over the bar, the position within the file will be shown above. The seek function will set the file position to the mouse location if the mouse is clicked on the progress bar. Sliding operation is not supported.\r\n\r\n### Pop Up Menu\r\n\r\nRight clicking over the file will bring up a context menu that can be used to perform file operations.\r\n\r\n### Hide Camera Panel\r\n\r\nViewing files may be more convenient if a separate window is set up distinct from the camera display. This can be helpful if viewing archived recordings while cameras are being displayed in real time. A file view can be created from the Settings -\u003e General tab using the three dot button in the Open New Window section. Once the file viewer is set up, the Hide Camera Panel checkbox can be selected so that only files and not cameras are shown on the file view window. Additionally, it may be helpful to expand the right side of the application to accomodate the full file parameter display tab. These settings will be preserved on the file viewer window and will not affect the default window started by the application.\r\n\r\n### File Searching by Time\r\n\r\nThe application has the ability to search the files by camera for a particular moment in time.\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/file_search.png\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nThe search dialog is launched by clicking the search icon on the File panel. Use the dialog box to select a Camera, Date and Time and the application will search the files for that particular moment. If found, a confirmation box will pop up and the file can be played directly. The application will automatically highlight the file in the list and forward the playback to a moment near the selected time. There may be a slight offset corresponding roughly to the Pre-Alarm Buffer Size from the Settings -\u003e Alarm panel.\r\n\r\nIf the application was not able to find the exact match, a pop up box will ask if you want to play the closest file in time. Note that the application will highlight this closest match in the file list, so you could use that as a starting point for navigating through the files.\r\n\r\n### Refresh File View\r\n\r\nThe files listed in the panel my not be updated automatically. Use the refresh icon to get a current listing of the files available for view.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eApplication Settings\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n## General Settings\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/general.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n### Common Username and Password\r\n\r\nDefault camera login credentials. If there is a camera on the list that does not share these credentials, a pop up login box will appear during discovery. It is possible to add these alternate credentials into the stored profile of the camera by right clicking over the camera in the list and selecting the password option, which will silently add the credentials to the stored settings so that the camera can be discovered without having to type in the credentials.\r\n\r\n### Hardware Decoder\r\n\r\nA hardware decoder may be selected for the application. Multicore CPUs with more than a few cores will handle the decoding just as easily as a hardware decoder. Smaller CPUs with a small number of cores may benefit from hardware decoding. VAAPI and VDPAU pertain to Linux systems and DXVA2 and D3D11VA are for Windows. CUDA decoding is platform independent and requires NVIDIA GPU.\r\n\r\n### Start Full Screen\r\n\r\nSelecting this check box will cause the application to start in full screen mode. The full screen mode can be cancelled with the Escape key. The F12 key will also toggle full screen mode.\r\n\r\n### Auto Time Sync\r\n\r\nThis selection will send a time sync message to each of the cameras once an hour. The camera time is set according to the parameters defined in the Sync Time dialog box described in Camera Parameters shown above.\r\n\r\n### Snapshot File Dlg\r\n\r\nWhen selected, a dialog box will appear when a snapshot is requested so that the picture file name can be changed for saving. Deselecting this checkbox will cause the system to automatically accept the generated file name without showing the dialog. Please note that the system uses the automatically generated filename to determine the snapshot time when searching video files, so changing the filename will disable the search functionality.\r\n\r\n### Display Refresh Interval\r\n\r\nPerformance on some lower powered systems may be improved by increasing the display refresh interval.\r\n\r\n### Open New Window\r\n\r\nManage profiles for secondary windows used to display a camera or a group of cameras separately from the main application window.\r\n\r\nThe default 'Reader' profile is a reserved profile that launches a specialized secondary File panel browser that can operate with it's own configuration for viewing files. The secondary File panel can be used during camera operation without interferring with the main program.\r\n\r\nThe default 'Focus' profile is a reserved profile that is integrated into application logic. The Focus Window can be launched by double clicking on a camera stream in the main display and can show that camera at higher resolution and frame rate for a more detailed view. The Focus Window will show only one camera at a time. The application will automatically configure the Focus settings for proxy type and auto discovery.\r\n\r\nAdditional profiles can be added using the three dot button to the right of the drop down box that will launch a configuration dialog box.\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/profile.png\" width=\"360\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nNew Windows can be configured to show specific groups of cameras, which can be useful if the host computer is driving several monitors such that different groups of cameras are shown on different monitors. The Open button will launch a window with the profile selected in the drop down box. Each profile will have a separate configuration that is set by the user.\r\n\r\nIt may be useful to create a profile excusively for viewing camera recordings from the File tab. This way the window can be configured with a larger navigation panel showing more complete file information. Additionally, the camera panel can be hidden in this profile so that the window opens directly to the file list.\r\n\r\n### Show Logs\r\n\r\nThis button will show the logs of the application. Many events and errors encountered will be documented here. The log rolls over at 1 MB. The older logs can be managed using the Archive button on the logs display dialog.\r\n\r\n### Help\r\n\r\nShows this file.\r\n\r\n### Hide Display\r\n\r\nIf running Onvif GUI in server configuration, it may be desirable to run in headless mode. If this is the case, hiding the display will significantly reduce compute load by bypassing the rendering routines. In this configuration, the compute load will be similar to that of a console application. Once the display is hidden, the text of the button will change to Show Display with appropriate functionality.\r\n\r\n\r\n## Discover Settings\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/discover.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n### Discovery Options\r\n\r\n* Discovery Broadcast\r\n\r\n  This option will broadcast a discovery packet to find cameras on the local network. If the host computer is attached to multiple networks it is possible to broadcast across all networks or only one selected network. Cameras discovered will have their data entered into the address cache so that they may be found without discovery later.\r\n\r\n* Cached Addresses\r\n\r\n  This option will cause the application to find cameras based on the cache data rather than the discovery broadcast. Note that cameras may be deleted from the cache by using the Delete key or the right click context menu on the camera list. This can be useful if a subset of cameras on the network is going to be streamed. Note that some cameras may respond with incomplete data when using a cached address.\r\n\r\n* Add Camera\r\n\r\n  It is possible to add a camera manually to the address cache by using the Add Camera button. The IP address and ONVIF port are required to connect.  The ONVIF port by default is 80. If successful, the camera will be added silently to the camera list. If a camera is added manually using this method, it will not persist in the interface unless the Cached Addresses option is selected.\r\n\r\n### Auto Discovery\r\n\r\nWhen selected, this option will cause the application to discover cameras automatically when it starts. This holds true whether the application is using Broadcast Discovery or Cached Addresses.  Note that if this option is selected and the Broadcast Discovery Option is also selected, the application will poll the network once per minute to find missing or new cameras.\r\n\r\n### Auto Start\r\n\r\nWhen selected in combination with the Auto Discovery check box, cameras shown in the list will start automatically when the application starts. This feature will work with either Discovery Broadcast or Cached Addresses.\r\n\r\n## Storage Settings\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/storage.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n### Disk Usage\r\n\r\nThe application has the ability to manage the disk space used by the recorded media files. This setting is recommended as the files can overwhelm the computer and cause the application to crash. Allocating a directory for the camera recordings is done by assigning a directory using the Archive Dir selection widget. The default setting for the Archive Dir is the user's Video directory. It is advised to change this setting if the host computer employs the user's Video directory for other applications.\r\n\r\n* Current Disk Usage\r\n\r\n  When the application starts, or a new file is created for a camera recording, the approximate amount of disk space used by the application is displayed. This number is not exact, but can give a general idea of the amount of disk space used.\r\n\r\n* Auto Manage Checkbox\r\n\r\n  Select this check box to enable disk management.  A warning dialog will inform the user of the risk of the loss of files within the directory. Note that the application will only delete files that conform to the date style file naming convention that it uses. It is a good idea to use a directory that can be dedicated exclusively to the application.\r\n\r\n  The maximum available disk space that could be allocated to the application based on the Archive Dir setting will be displayed next to the checkbox.\r\n\r\n  The spin box can be used to limit the application disk usage in GB. Note that the application is conservative in it's estimate of required file size and the actual space occupied by the media files will be a few GB less than the allocated space.\r\n\r\n* Archive Directory\r\n\r\n  This widget sets the storage location for Video files generated by the system. Note that the location here is independent from the Videos panel of the File browser.\r\n\r\n* Picture Directory\r\n\r\n  This widget sets the storage location for Picture files generated by the system. Note that the location here is independent from the Pictures panel of the File browser.\r\n\r\n### Max File Duration\r\n\r\n  Video file duration is limited to this length. This is done so that Video files do not become excessively large. Video files will be padded at the start by the duration configured on the Settings -\u003e Alarm tab Pre-Alarm buffer size, which by default is ten seconds. This insures some overlap between adjacent files so that information is not lost when files are truncated.\r\n\r\n### File Write Buffer Size\r\n\r\n  File management will remove oldest files based on the total size limit set in the Auto Management field. Because the calculation used by the manager is not exact, an additional buffer space is allocated for safety. The default value should be sufficient, but can be ajusted based on conditions if warranted.\r\n\r\n## Proxy Settings\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/proxy.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n## Proxy Type\r\n\r\n* Stand Alone\r\n\r\n  Default setting, implements a single instance of the program that connects to the cameras directly.\r\n\r\n* Client\r\n\r\n  The application will act as a client to the proxy server using a connection string corresponding to one displayed by the server in the url box. If the connection string is changed, the Update button must be clicked to enact the changes. If the server is capable of generating detections, they can be received or ignored by the client using the 'Get alarm events from server' checkbox. If the server detections are not enabled, the client may generate detections locally if desired.\r\n\r\n  If the server detections are enabled, the application will look for the interface that matches the subnet of the server. If the server address has been entered incorrectly, this condition will prompt an error message and the event listener will not be instantiated.\r\n\r\n* Server\r\n  \r\n  The application will host a proxy server and allow other instances of the application configured as clients to connect over the local network to the cameras proxied by the server. The server backend is provided by [Media MTX](https://github.com/bluenviron/mediamtx). The application will download the appropriate binary executable file from the developer github page and copy it to the python environment bin folder. If you prefer to use your own Media MTX binary, the location can be set with the directory control.\r\n\r\n  Diagnostic messages from the MediaMTX server may be visible in the terminal if the application is started from the command line. The Log Level selector can be used to tailor the verbosity of the messages.\r\n\r\n* HTTP Server\r\n\r\n  The application can host links to Video streams that can be accessed using a Web browser. The port number 8800.\r\n\r\n* Alarm Broadcasting\r\n\r\n  Alarm broadcasting by the server can be controlled using the 'Alarm Broadcasting' group box. This function will broadcast a single UDP packet containing the alarm states for all cameras on the server at an interval of once per second. The UDP packet can be received by any machine on the broadcast network.\r\n  \r\n  For server hosts running Windows, broadcasting is limited to the network with the highest priority. The Network combo box in this case will have only one entry which corresponds to the highest priority network. Please see the section in Notes -\u003e Network Priority on Multi Homed Hosts to view instructions on how to set network priority. Linux and Mac OS hosts are able to select the network on which to broadcast alarms.\r\n\r\n## Alarm Settings\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/alarm.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n### Pre-Alarm Buffer Size\r\n\r\nWhen a camera is recording, this length of media is prepended to the file so that the moments prior to the alarm are preserved. If always recording, or the file length is limited by the system, this feature will insure that there is a small overlap between adjacent files.\r\n\r\n### Post-Alarm Lag Time\r\n\r\nIn the case where a camera is configured to record during alarms, this length of time must pass after the cessation of the alarm before the file recording is turned off.  This helps to prevent excessive file creation. Alarm display and alarm sound functions are affected by this setting as well.\r\n\r\n### Alarm Sounds\r\n\r\nA few default alarm sounds for selection.  A system wide volume setting for the alarm volume can be made with the slider.\r\n\r\n### Show Alarms on Display\r\n\r\nWhen selected (default is yes) a red filled circle will be displayed on the camera stream during alarm conditions. The circle will blink if the stream is being recorded during an alarm. De-selecting this checkbox will show the camera stream without any alarm markings.\r\n\r\n### Save Picture for Alarms\r\n\r\nWhen selected (default is yes) a picture will be saved to the Pictures directory each time an alarm is triggered. The pictures are used to populate the Event Browser accessible from the File panel which can be used to view vidoes at the time point of the alarm.\r\n\r\n---\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eVideo Panel\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eVideo streams cam be analyzed to generate alarms.\u003c/i\u003e\r\n\r\n---\r\n\r\nThe Video Panel has multiple modes of operation. The default setting is for motion, which can be used without further configuration and will run easily on a CPU only computer. YOLOX requires the installation of additional python packages, namely pytorch and openvino. YOLOX will perform well on recent Apple Silicon M chips, NVIDIA GPU, and Intel Xe, UHD or ARC Graphics.\r\n\r\nIn order for the panel to be enabled, either a camera or a file must be selected. If a camera is selected, the Video Alarm check box must also be selected on the Media Tab of the Camera Panel. If a file is selected, the Enable File check box on the Video Panel must be selected.\r\n\r\nParameters set on the panel are applied to files globally, and to cameras individually.\r\n\r\nIf the analysis produces an alarm, record and alarm sound actions are taken based on the settings made on the System Tab of the Camera Panel. Files are not connected to alarm processing.\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eMotion Detection\u003c/b\u003e\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eMotion detection is useful in lower powered systems without AI processing capabilities\u003c/i\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/motion.png\" width=\"640\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\nThe motion detector measures the difference between two consecutive frames by calculating the percentage of pixels that have changed. If that result is over a threshold value, an alarm is triggered. The Diff check box will show a visualization of the differential pixel map that is used by the calculation. The status bar will light green to red as the value of the algorithm result increases. The Gain slider can amplify or attenuate the result to adjust the sensitivity of the detector. Higher Gain slider values increase the sensitivity of the detector.\r\n\r\nMotion detection systems are prone to false alarms due to the indiscriminate nature of the analysis. They can be useful in settings where motion is limited, such as a controlled indoor environment. They are not recommended for general use, expecially in outdoor settings.\r\n\r\n---\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eYOLOX\u003c/b\u003e\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eYOLOX is an AI powered analysis for detecting specific types of objects\u003c/i\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/yolox.png\" width=\"640\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cb\u003ePrerequisites\u003c/b\u003e\r\n\r\nYOLOX will run with hardware acceleration on Apple Silicon, NVIDIA GPU and Intel iGPU, NPU, or ARC Graphics.\r\n\r\n\u003cb\u003eInstallation Requirements\u003c/b\u003e\r\n\r\n\u003cb\u003ePlease Note:\u003c/b\u003eThe installation scripts for Linux and Mac OS install the necessary python libraries automatically. The Linux installation scripts will install iGPU drivers on Intel chips automatically. If using NVIDIA GPU, those drivers are usually installed by default on modern Linux distros, but some may require manual installation. Windows users will need to install drivers and python libraries manually for the time being.\r\n\r\n\u003cb\u003eConfiguration\u003c/b\u003e\r\n\r\nThe upper portion of the yolox panel has a model configuration box. Model parameters are system wide, as there will be one model running that is shared by all cameras. The Name combo box selects the model, which is named according to the size of the number of parameters in the model. Larger models may produce more accurate results at the cost of increased compute load. The Size combo box sets the resolution to which the video is scaled for model input. Larger sizes may increase accuracy at the cost of increased compute load. It is possible to change the backend API of the yolo detector by using the API combo box. The Device combo box will populate automatically with available hardware.\r\n\r\nThe model is initialized automatically by starting a camera stream with the Camera tab Video Alarm checked. By default the application is configured to download a model automatically when a stream is started for the first time. There may be a delay while the model is downloaded, during which time a wait box is shown. Subsequent stream launches will run the model with less delay.\r\n\r\nA model may be specified manually by de-selecting the Automatically download model checkbox and populating the Model file name box. Note that if a model is manually specified, it is still necessary to assign the correct Name corresponding to the model parameter size.\r\n\r\nThe lower portion of the panel has settings for detector configuration. Parameters on this section are assigned to each camera individually.\r\n\r\nSkip Frames spin box sets the number of frames to skip between model analysis runs. If the Skip Frames value is set to zero, every frame produced by stream is set through the detector. If the Skip Frames value is set to one, every other frame is sent through the detector, and so on. This setting can be used to reduce computational burden on the system.\r\n\r\nThe yolox detector samples a number of frames as set by the Samples setting. The number of frames with positive detections required to trigger an alarm is set by the Limit slider. For example, if the Sample Size is 4 and the Limit slider is set to 2, at least two of the last four frames observed must have positive detections in order to trigger the alarm.\r\n\r\nThere is also a Confidence slider that applies to the yolox model output. Higher confidence settings require stricter conformance to model expectations to qualify a positive detection. Lower confidence settings will increase the number of detections at the risk of false detections.\r\n\r\nIt is necessary to assign at least one target to the panel in order to observe detections. The + button will launch a dialog box with a list of the available targets. Targets may be removed by using the - button or the delete key while the target is highlighted in the list.\r\n\r\n---\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003e\u003cb\u003eRyzen AI (FOR REFERENCE ONLY - NOT WORKING WITH CURRENT API)\u003c/b\u003e\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eAMD NPU can run YOLOX using the Ryzen AI framework\u003c/i\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\nSource code can be found on [github](https://github.com/sr99622/onvif-gui-ryzen-ai)\r\n\r\nyolox will work with RyzenAI on AMD chips with NPU. Configuration Details are available on [Hugging Face](https://huggingface.co/amd/yolox-s). The AMD system is still under development, so options here are limited to a single model with fixed parameters, but performance is on par with competing solutions. Configuration for this model requires installation of the Ryzen AI Software which in turn requires anaconda as the python provider. Note as well that the anaconda installation required by this setup needs the anaconda binaries available in the PATH environment variable, which may cause conflicts with other python configurations. \r\n\r\n\u003cb\u003eInstalling RyzenAI\u003c/b\u003e\r\n\r\nInstalling the RyzenAI software can be challenging as the instructions are not entirely clear on the procedure. There are four major steps that need to be completed for a successful installation. \r\n\r\n  1.) Visual Studio needs to be installed with the Desktop Development with C++ module. This procedure is fairly well documented by Microsoft, the catch is to install the Desktop C++ module. \r\n  \r\n  2.) Anaconda needs to be installed with the PATH variable set. There is a selection at the beginning of the Anaconda installation for this option along with a warning that it is not recommended. Please note that this selection has two issues. One is that the PATH setting may interfere with an existing Python installation by overriding the existing Python PATH and may cause other applications to fail. Another issue is the scope of the PATH environment variables setting. If the Anaconda installation is set for User, rather than System, the PATH will be set in the User scope only. The RyzenAI installation will expect the PATH in the System scope. You can recover from this error if encountered by copying the anaconda PATH variables from User to System. The PATH settings are accessed by going to Settings -\u003e System -\u003e About -\u003e Advanced System Settings -\u003e Environment Variables.\r\n\r\n  3.) NPU Drivers need to be installed. The drivers are downloaded from the AMD website after a credential assignment requiring account creation. The drivers come in a zip file e.g. RAI_1.3.1_242_WHQL.zip, which should be unpacked. Open a powershell prompt in Administrator mode to run the executable inside the unzipped folder e.g. `.\\npu_sw_installer.exe`. Upon completion of the command, use the Device Manager for Windows to find the NPU in the hardware devices list and check that the driver version matches the installation script to verify successful installation.\r\n\r\n  4.) Install the Ryzen AI Software. The AI software is implemented as a conda environment which is set up by an installation application. You will need to download the installer from the AMD website using the credentials established previously for the driver download. The file will be an msi, e.g. ryzen-ai-1.3.1.msi. A common mistake is to think that this file is meant to be run by double clicking, as most files of this type would normally be run. Instead, use an Administrator privileged powershell prompt to start the install application, e.g. `.\\ryzen-ai-1.3.1.msi`. This will avoid permission errors which are not properly reflected in the error messages. \r\n\r\n\u003cb\u003eInstall Onvif GUI in the conda environment\u003c/b\u003e\r\n\r\nThe Onvif GUI application will need to be installed into the anaconda environment generated by the Ryzen AI installation procedure. If you've lost track of the environment name, you can look for it using the command `conda env list`. The environment will have the necessary dependencies installed automatically. Activate the environment, e.g. `conda activate ryzen-ai-1.3.1`, and use the command `pip install onvif-gui` to install the application.\r\n\r\n\u003cb\u003eConfigure the VAIP\u003c/b\u003e\r\n\r\nNote as well that the configuration requires the location of the \u003cb\u003evaip_config.json\u003c/b\u003e file generated by the RyzenAI Software installation. This file can usually be found in the RyzenAI home directory which is in the `C:\\Program Files\\RyzenAI\\1.3.1\\voe-4.0-win_amd64` folder, where 1.3.1 is the version of the software and can be expected to change with version updates. The model itself will be downloaded automatically from HuggingFace by default, or can be installed manually if preferred.\r\n\r\n\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eAudio Panel\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eAAC Audio streams can be analyzed to generate alarms.\u003c/i\u003e\r\n\r\n---\r\n\r\nThe audio panel can analyze streams in both amplitude and frequency domains. Note that frequency analysis requires slightly more computing power than amplitude analysis. Please note that only AAC encoded audio is supported at this time.\r\n\r\nIn order for the panel to be enabled, either a camera or a file must be selected. If a camera is selected, the Video Alarm check box must also be selected on the Media Tab of the Camera Panel. If a file is selected, the Enable File check box on the Video Panel must also be selected.\r\n\r\nParameters set on the panel are applied to files globally, and to cameras individually.\r\n\r\nIf the analysis produces an alarm, record and alarm sound actions are taken based on the settings made on the System Tab of the Camera Panel. Files are not connected to alarm processing.\r\n\r\n\r\n\u0026nbsp;\r\n\r\n\u003cimage src=\"assets/images/audio_panel.png\" width=\"400\"\u003e\r\n\r\n\u0026nbsp;\r\n\r\n* ### Amplitude\r\n\r\nThe amplitude is measured by calculating the Root Mean Square (rms) value of the audio waveform. If the rms exceeds threshold, an alarm condition is triggered. The Gain slider can be used to amplify or attenuate the value of the signal in order to adjust the sensitivity of the detector.\r\n\r\n* ### Frequency\r\n\r\nThe frequency spectrum is measured by the integrated area under the spectrum curve normalized. The spectrum may be filtered to eliminate undesired frequencies. Lower frequencies are often common background sounds that do not warrant an alarm condition, whereas higher frequency sounds are often associated with a sudden, sharp noise such as breaking glass.\r\n\r\nThere are filter bars that can be adjusted using the cursor handles. Frequencies excluded by the filter are depicted in gray. The Gain slider can be used to amplify or attenuate the value of the signal in order to adjust the sensitivity of the detector.\r\n\r\n* ### Over/Under\r\n\r\nThe detector can be configured to alarm in the absence of sound by selecting the Under radio button. This may be useful in situations such as an engine room monitor configured to alarm if the engine stops running. This mode will invert the status bar level.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eFull Screen\u003c/summary\u003e\r\n\u0026nbsp;\r\n\r\n---\r\n\r\nThe application windows can be configured to run in full screen mode. The F12 key is used to toggle full screen. If the application is running full screen, the Escape key can be used to return to windowed operation.\r\n\r\nThe control tab on the right of the application window may be toggled using the F11 key. On Mac, it is necessary to use the command key + F11 combination to override the default workspace action. The size of the control tab can be changed by dragging the left hand edge of the tab. Reducing the size of the tab beyond it's minimum will hide the tab. If there is at least one stream in the display and the control tab is hidden, clicking on the stream display area will restore the control tab.\r\n\r\n---\r\n\r\n\u0026nbsp;\r\n\r\n\u003c/details\u003e\r\n\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eNotes\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eServers\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eDHCP Servers\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n\u003ci\u003eA network set up as shown in the Recommended Configuration will require some mechanism for setting IP addresses to the cameras and computers that connect to the network. Although this may be achieved by setting  static IP for each device, a DHCP server is recommended. This is a service that is installed on the Onvif GUI server host computer. DHCP service configuration details are shown for each operating system.\u003c/i\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eLinux\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nLinux can be configured to run a kea [DHCP server](https://ubuntu.com/server/docs/how-to-install-and-configure-isc-kea). A sample configuration file `/etc/kea/kea-dhcp4.conf` for this server is shown below.\r\n\r\nIt is necessary to set the server ethernet interface to a static IP address for this configuration. It is recommended to manually set the Onvif GUI server ethernet address connecting to the camera network to be 10.1.1.1. This is a reserved network for private subnets. Please verify that your existing network does not use this address range. There are many references that can provide details on how to set a static ip. On Ubuntu, use the Settings -\u003e Network -\u003e Wired Network then click on the gear to get details, use the IPv4 tab and click the Manual radio button  to enable manual settings. The IP address should be set to `10.1.1.1`, the Subnet Mask to `255.255.255.0` and the Gateway to `10.1.1.1`. If you need internet access, you should have a second network connection to your local router, which is configured separately.\r\n\r\nIt will be necessary to find the name of the network interface intended to provide the DHCP service. On Linux, the command `ip a` will provide a listing of interface properties that will contain the relevant information. It will look something like `enp1s0` but will be different for each machine. The name will be associated with the ip address (\u003ci\u003e10.1.1.1 as set previously\u003c/i\u003e) of the desired interface.\r\n\r\n### Sample Configuration File\r\n\r\n```\r\n{\r\n  \"Dhcp4\": {\r\n    \"interfaces-config\": {\r\n    \"interfaces\": [ \"\u003cyour-interface-name\u003e\" ]\r\n    },\r\n    \"control-socket\": {\r\n        \"socket-type\": \"unix\",\r\n        \"socket-name\": \"/run/kea/kea4-ctrl-socket\"\r\n    },\r\n    \"lease-database\": {\r\n        \"type\": \"memfile\",\r\n        \"lfc-interval\": 3600\r\n    },\r\n    \"valid-lifetime\": 600,\r\n    \"max-valid-lifetime\": 7200,\r\n    \"subnet4\": [\r\n    {\r\n        \"id\": 1,\r\n        \"subnet\": \"10.1.1.0/24\",\r\n        \"pools\": [\r\n        {\r\n            \"pool\": \"10.1.1.64 - 10.1.1.242\"\r\n        }\r\n        ],\r\n        \"option-data\": [\r\n        {\r\n            \"name\": \"routers\",\r\n            \"data\": \"10.1.1.1\"\r\n        },\r\n        {\r\n            \"name\": \"domain-name-servers\",\r\n            \"data\": \"10.1.1.1\"\r\n        },\r\n        {\r\n            \"name\": \"domain-name\",\r\n            \"data\": \"mydomain.example\"\r\n        }\r\n        ]\r\n    }\r\n    ]\r\n  }\r\n}\r\n```\r\n\r\nThis is a basic configuration that will assign addresses in the range of 10.1.1.64 - 10.1.1.242, leaving the balance of addresses available for static ip. The router and name server addresses point back to the server, which is a dead end. This means that there is no direct traffic between the cameras and the internet or the rest of the network. All communication with the cameras is proxied by the Onvif GUI server.\r\n\r\nThe service can be set up by copying the sample file to `/etc/kea/kea-dhcp4.conf`, replacing the tag `\u003cyour-interface-name\u003e` with the appropriate data from the `ip a` command,  This can be done using the command `sudo nano /etc/kea/kea-dhcp4.conf`, then copying the text above and using ctrl+O, enter, ctrl+X to save and exit.\r\n\r\nUse the commands shown below to control the service. Be sure to use the enable command to get persistent service operation through reboots.\r\n\r\n```\r\nsudo systemctl enable kea-dhcp4-server\r\nsudo systemctl disable kea-dhcp4-server\r\nsudo systemctl start kea-dhcp4-server\r\nsudo systemctl restart kea-dhcp4-server\r\nsudo systemctl stop kea-dhcp4-server\r\nsudo systemctl status kea-dhcp4-server\r\n```\r\n\r\nThe `enable` and `disable` commands install and uninstall the kea dhcp4 service into the boot protocol, controlling whether the service is started automatically at boot time. The balance of the commands control or show information about the service.\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eMac\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nOn Mac OS, the DHCP service is provided by bootpd. The service is configured with a file named `/etc/bootpd.plist`. A sample configuration file is shown below. \r\n\r\nIt is necessary to set the server ethernet interface to a static IP address for this configuration. It is recommended to manually set the Onvif GUI server ethernet address connecting to the camera network to be 10.1.1.1. This is a reserved network for private subnets. Please verify that your existing network does not use this address range. To make this configuration, use the Settings -\u003e Network -\u003e Ethernet -\u003e TCP/IP -\u003e Configure IPv4 -\u003e Manually (combo box). The IP address should be set to `10.1.1.1`, the Subnet Mask to `255.255.255.0` and the Router to `10.1.1.1`. If you need internet access, you should have a second network connection to your local router, which is configured separately. Note that you may need to update network priorities in order to use the internet connected interface. Please refer to the section Network Priority on Multi Homed Hosts of this document.\r\n\r\nThis file is configured to use the interface named `en0`, which in most cases will be the ethernet interface on the Mac computer. Please check the name using the `ifconfig` command to verify that this is the correct information.\r\n\r\n### Sample Configuration File\r\n\r\n```\r\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\r\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\r\n\u003cplist version=\"1.0\"\u003e\r\n\u003cdict\u003e\r\n    \u003ckey\u003ebootp_enabled\u003c/key\u003e\r\n    \u003cfalse/\u003e\r\n    \u003ckey\u003edetect_other_dhcp_server\u003c/key\u003e\r\n    \u003cinteger\u003e1\u003c/integer\u003e\r\n    \u003ckey\u003edhcp_enabled\u003c/key\u003e\r\n    \u003carray\u003e\r\n        \u003cstring\u003een0\u003c/string\u003e\r\n    \u003c/array\u003e\r\n    \u003ckey\u003ereply_threshold_seconds\u003c/key\u003e\r\n    \u003cinteger\u003e0\u003c/integer\u003e\r\n    \u003ckey\u003eSubnets\u003c/key\u003e\r\n    \u003carray\u003e\r\n        \u003cdict\u003e\r\n            \u003ckey\u003eallocate\u003c/key\u003e\r\n            \u003ctrue/\u003e\r\n            \u003ckey\u003edhcp_router\u003c/key\u003e\r\n            \u003cstring\u003e10.1.1.1\u003c/string\u003e\r\n            \u003ckey\u003elease_max\u003c/key\u003e\r\n            \u003cinteger\u003e86400\u003c/integer\u003e\r\n            \u003ckey\u003elease_min\u003c/key\u003e\r\n            \u003cinteger\u003e86400\u003c/integer\u003e\r\n            \u003ckey\u003ename\u003c/key\u003e\r\n            \u003cstring\u003e10.1.1\u003c/string\u003e\r\n            \u003ckey\u003enet_address\u003c/key\u003e\r\n            \u003cstring\u003e10.1.1.0\u003c/string\u003e\r\n            \u003ckey\u003enet_mask\u003c/key\u003e\r\n            \u003cstring\u003e255.255.255.0\u003c/string\u003e\r\n            \u003ckey\u003enet_range\u003c/key\u003e\r\n            \u003carray\u003e\r\n                \u003cstring\u003e10.1.1.64\u003c/string\u003e\r\n                \u003cstring\u003e10.1.1.242\u003c/string\u003e\r\n            \u003c/array\u003e\r\n        \u003c/dict\u003e\r\n    \u003c/array\u003e\r\n\u003c/dict\u003e\r\n\u003c/plist\u003e\r\n```\r\n\r\nThis is a basic configuration that will assign addresses in the range of 10.1.1.64 - 10.1.1.242, leaving the balance of addresses available for static ip. The router and name server addresses point back to the server, which is a dead end. This means that there is no direct traffic between the cameras and the internet or the rest of the network. All communication with the cameras is proxied by the Onvif GUI server.\r\n\r\nThe service can be set up by copying the sample file to `/etc/bootpd.plist`, replacing the tag `en0` tag in the `dhcp_enabled` key with the appropriate data from the `ifconfig` command if necessary. This can be done using the command `sudo nano /etc/bootpd.plist`, then copying the text above and using ctrl+O, enter, ctrl+X to save and exit.\r\n\r\nThe service can then be started using the command\r\n\r\n```\r\nsudo launchctl load -w /System/Library/LaunchDaemons/bootps.plist\r\n```\r\n\r\nThe service can be stopped with\r\n\r\n```\r\nsudo launchctl unload -w /System/Library/LaunchDaemons/bootps.plist\r\n```\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eWindows\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\n[DHCP Server for Windows](https://www.dhcpserver.de/cms/) is made available by third party . Older versions are available for [download](https://www.dhcpserver.de/cms/download/) free of charge. Instructions for installation can be found [here](https://www.dhcpserver.de/cms/running_the_server/). Please consider making a donation to the developer if you find the software useful.\r\n\r\nPlease note that the installation procedure does not include instructions for setting up a static IP address on the network interface, which is necessary for operation. This should be done before configuring the DHCP service. An exhaustive resource on this topic is available at [How to set a static IP address on Windows 11](https://pureinfotech.com/set-static-ip-address-windows-11/).\r\n\r\n\u003c/details\u003e\r\n\r\n\u0026nbsp;\r\n\r\n---\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\u003csummary\u003eSetting Up a Samba Share on Linux\u003c/summary\u003e\r\n\r\n\u0026nbsp;\r\n\r\nIt is possible for Windows clients to access camera recordings residing on a Linux server on the local network by installing a samba share on the Linux server. There are a few steps needed to set up the server, which are often not well documented for this type of configuration. The following instructions will set up the shared folder on the server, then show how a Windows client can attach to the shared folder as a mapped drive. Please note that this setup is intended for use in a simple private network where all users can be trusted with data. More sophisticated configurations that control data access are possible, but are beyond the scope of these instructions.\r\n\r\n* #### Linux Server Configuration\r\n\r\n  \u003ch4\u003eStep 1. \u003cb\u003eSet Fixed IP Address\u003c/b\u003e\u003c/h4\u003e The server should have a fixed IP address. This is not completely necessary for system operation, but will prevent mishaps later that can occur if the server address changes. For Ubuntu and similar systems, there is a GUI control dialog that can be used to assign a fixed IP address. The address chosen will depend on the router settings, which will set aside a range of addresses that are available for fixed IP. Usually this will be at the bottom and/or top of the IP range controlled by the router. The router setting that defines these ranges is set by DHCP. Check ahead of time that the desired IP address is not already taken and is available per the router configuration.\r\n\r\n  \u003ch4\u003eStep 2. \u003cb\u003eInstall and Configure Samba\u003c/b\u003e\u003c/h4\u003e On Ubuntu, the Samba server is installed using the apt command\r\n\r\n  ```\r\n  sudo apt install samba\r\n  ```\r\n\r\n  The Samba configuration is performed by editing the `/etc/samba/smb.conf` file. The Samba installation will create a default file in this location, which is not a good fit f","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsr99622%2Flibonvif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsr99622%2Flibonvif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsr99622%2Flibonvif/lists"}