Skip to content

ispysoftware/agentdvr-docker

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

273 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

iSpy Agent DVR multi-arch image

ispyagentdvr

Official Agent DVR image. Website: https://www.ispyconnect.com

License: GPLv3 Docker Pulls Docker Stars GHCR Platforms GitHub Stars GitHub Forks GitHub Issues Last Commit

DISCLAIMER: Buy me coffee link below is NOT affiliated in anyway with the main iSpy AgentDVR. The docker image publisher is NOT affiliated with the main iSpy AgentDVR either.

Buy Me A Coffee

The architectures supported by this image are:

Architecture Available Tag Status
x86-64 amd64-<version tag> Tested "WORKING"
arm64 arm64v8-<version tag> Tested "WORKING"
armhf arm32v7-<version tag> Tested "WORKING" (4.8.2.0 and newer versions)

Anouncements:

  • ⚠️⚠️⚠️ Directory structure reverted to /AgentDVR from /home/agentdvr/AgentDVR. It is SPECIALLY IMPORTANT to correctly apply this change in unRAID, Synology NAS and other GUID based container deployer. ⚠️⚠️⚠️
  • ⚠️ Base image updated to Debian Trixie ⚠️
  • ⚠️ ZSTD compression applied to reduce image size and save bandwidth. Docker Engine 23.0 or later and for Podman deployment Podman Machine v5.1 or later is required for image version 6.5.7.0 and later! ⚠️
  • ⚠️⚠️⚠️ VERY IMPORTANT: TURN Server Port range is changed from 50000-50010 to 50000-50100. Please set the range in Docker CLI or Docker Compose to 50000-50100⚠️⚠️⚠️
  • The ARMHF image has been fixed. For ARM32-bit/ARMHF devices, use image version 4.8.2.0 or newer.
  • For GPU HW-Accelerated Encode/Decode please use version 5.3.5.0 or NEWER images.
  • ⚠️⚠️⚠️ It is Discouraged to use BETA on mission-critical environments!!!
  • Read the update information and use older tags with caution.
Tag Available Description Status
stable "iSpy Agent DVR" Most Stable image to date Tested "WORKING". An image will be made "stable" if an image remains "latest" for at least 5 days
latest "iSpy Agent DVR" Latest releases image Tested "WORKING"
beta ⚠️ "iSpy Agent DVR" BETA releases image ⚠️ LATEST BETA for "BETA TESTING". Backup config before trying!!! Discouraged to use on mission-critical environments!!! ⚠️
7.4.5.0 "iSpy Agent DVR" Static version 7.4.5.0 image Tested "WORKING"
7.2.4.0-beta ⚠️ "iSpy Agent DVR" 7.2.4.0 beta release for testing ⚠️ THOROUGH TESTING REQUIRED. Backup config before trying!!! Discouraged to use on mission-critical envirenments!!! ⚠️

Running Image :

docker-compose (recommended, docs)

---
services:
  ispyagentdvr:
    image: mekayelanik/ispyagentdvr:latest
    container_name: ispyagentdvr
    environment:
      - PUID=1000
      - PGID=1000
      - AGENTDVR_WEBUI_PORT=8090 
      - TZ=Asia/Dhaka
    volumes:
      - /path/to/config:/AgentDVR/Media/XML
      - /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
      - /path/to/models:/AgentDVR/Media/Models
      - /path/to/commands:/AgentDVR/Commands
    ports:
      - 8090:8090
      - 3478:3478/udp
      - 50000-50100:50000-50100/udp
    restart: unless-stopped

Note:

- On Raspberry Pi and other low-power ARM SBCs, wait about 30 seconds after deployment before opening WebUI, then refresh if needed.

- With many cameras, startup may take longer.

docker cli ( docs)

docker run -d \
  --name=ispyagentdvr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e AGENTDVR_WEBUI_PORT=8090
  -e TZ=Asia/Dhaka \
  -p 8090:8090 \
  -p 3478:3478/udp \
  -p 50000-50100:50000-50100/udp \
  -v /path/to/config:/AgentDVR/Media/XML \
  -v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
  -v /path/to/models:/AgentDVR/Media/Models \
  -v /path/to/commands:/AgentDVR/Commands \
  --restart unless-stopped \
  mekayelanik/ispyagentdvr:latest

Dedicated local IP using MACVLAN ( docs)

---
services:
  ispyagentdvr:
    image: ghcr.io/mekayelanik/ispyagentdvr:latest
    container_name: ispyagentdvr
    environment:
      - PUID=1000
      - PGID=1000
      - AGENTDVR_WEBUI_PORT=8090 
      - TZ=Asia/Dhaka
    volumes:
      - /path/to/config:/AgentDVR/Media/XML
      - /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
      - /path/to/models:/AgentDVR/Media/Models
      - /path/to/commands:/AgentDVR/Commands
    ports:
      - 8090:8090
      - 3478:3478/udp
      - 50000-50100:50000-50100/udp
    restart: unless-stopped
    hostname: ispyagentdvr
    domainname: local
    mac_address: AB-BC-C0-D1-E2-EF
    networks:
      macvlan-1:
        ipv4_address: 192.168.2.12
networks:
  macvlan-1:
    name: macvlan-1
    external: True

To make MACVLAN work, set valid values for mac_address, ipv4_address, subnet, ip_range, and gateway.

In the case of MACVLAN, you must access the WebUI using http://ipv4_address:8090

GPU HW-Acceleration (Tested "WORKING" on images with tag 5.3.5.0 or NEWER)

One must use images from 5.3.5.0 or NEWER images to get the provisioned GPU HW-Acceleration. Older images will not work. If you face any issues, please report this on GitHub of this image. The GitHub link can be found at the bottom of this page.

docker-compose (recommended, docs)

One must be able to pass GPU (Rendering devices) to the container as is instructed below!

---
services:
  ispyagentdvr:
    image: ghcr.io/mekayelanik/ispyagentdvr:latest
    container_name: ispyagentdvr
    environment:
      - PUID=1000
      - PGID=1000
      - AGENTDVR_WEBUI_PORT=8090
      - TZ=Asia/Dhaka
    volumes:
      - /path/to/config:/AgentDVR/Media/XML
      - /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media
      - /path/to/models:/AgentDVR/Media/Models
      - /path/to/commands:/AgentDVR/Commands
    ports:
      - 8090:8090
      - 3478:3478/udp
      - 50000-50100:50000-50100/udp
    restart: unless-stopped

docker cli ( docs)

docker run -d \
  --name=ispyagentdvr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e AGENTDVR_WEBUI_PORT=8090 \
  -e TZ=Asia/Dhaka \
  -p 8090:8090 \
  -p 3478:3478/udp \
  -p 50000-50100:50000-50100/udp \
  -v /path/to/config:/AgentDVR/Media/XML \
  -v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
  -v /path/to/models:/AgentDVR/Media/Models \
  -v /path/to/commands:/AgentDVR/Commands \
  --restart unless-stopped \
  mekayelanik/ispyagentdvr:latest

For Nvidia GPUs

To get GPU Hardware acceleration from Nvidia, user MUST INSTALL THE "LATEST" Nvidia Drivers & Nvidia Container Toolkit on the Host Machine/Server/VM/LXC provided by Nvidia. Instructions for Nvidia Container Toolkit can be found here:

Nvidia-Container-Toolkit

We added the necessary environment variable that will utilize all the features available on a GPU on the host. Once Nvidia container runtime is installed on your host you will need to re/create the docker container with the nvidia container runtime `--runtime=nvidia` and add an environment variable `-e NVIDIA_VISIBLE_DEVICES=all` (can also be set to a specific gpu's UUID, this can be discovered by running `nvidia-smi --query-gpu=gpu_name,gpu_uuid --format=csv` ). NVIDIA automatically mounts the GPU and drivers from your host into the AgentDVR docker container.

For AMD GPUs & iGPUs

The following have to be added in docker-compose file/docker-cli cm respectively

docker compose

devices:
    - /dev/dri/renderD128:/dev/dri/renderD128
    - /dev/dri/card0:/dev/dri/card0
    - /dev/kfd:/dev/kfd

docker cli

--device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri:/dev/dri/card0 --device /dev/kfd:/dev/kfd

For Intel GPUs & iGPUs

The following have to be added in docker-compose file/docker-cli cm respectively

docker compose

devices:
    - /dev/dri/renderD128:/dev/dri/renderD128
    - /dev/dri/card0:/dev/dri/card0

docker cli

--device /dev/dri/renderD128:/dev/dri/renderD128 --device /dev/dri/card0:/dev/dri/card0

For Rockchip SBC's integrated VPU, use the CLI command below

docker run -d \
  --name=ispyagentdvr \
  -e PUID=1000 \
  -e PGID=1000 \
  -e AGENTDVR_WEBUI_PORT=8090 \
  -e TZ=Asia/Dhaka \
  -p 8090:8090 \
  -p 3478:3478/udp \
  -p 50000-50100:50000-50100/udp \
  -v /path/to/config:/AgentDVR/Media/XML \
  -v /path/to/recordings:/AgentDVR/Media/WebServerRoot/Media \
  -v /path/to/models:/AgentDVR/Media/Models \
  -v /path/to/commands:/AgentDVR/Commands \
  --restart unless-stopped \
`for dev in dri dma_heap mali0 rga mpp_service \
   iep mpp-service vpu_service vpu-service \
   hevc_service hevc-service rkvdec rkvenc vepu h265e ; do \
  [ -e "/dev/$dev" ] && echo " --device /dev/$dev"; \
 done` 
  mekayelanik/ispyagentdvr:latest

DISCLAIMER: Jellyfin FFMPEG and corresponding ideas were used in this image to enable the HW-Acceleration

Parameters

Container images use runtime parameters. These are separated by a colon and indicate <external>:<internal>. For example, -p 8090:80 exposes port 80 inside the container on host port 8090.

Parameter Function
-p 8090 Map AgentDVR WebUI Port to HOST
-p 3478/udp Map Main port used for TURN server communication to HOST
-p 50000-50100//udp Map Ports from AgentDVR to HOST, to be used to create connections or WebRTC. These will be used as needed
-e PUID=1000 For UserID - see below for explanation
-e PGID=1000 For GroupID - see below for explanation
-e TZ=Asia/Dhaka Specify a timezone to use, see this list.
-e AGENTDVR_WEBUI_PORT=8090 Specify a Port to Expose AgentDVR WebUI
-v /AgentDVR/Media/XML Contains all relevant configuration files.
-v /AgentDVR/Media/WebServerRoot/Media Location of Surveillance Recordings on disk.
-v /AgentDVR/Media/Models Model files location for AgentDVR.
-v /AgentDVR/Commands Location to store desired iSpy Agent DVR Commands.

User / Group Identifiers

When using volumes ( -v flags) permissions issues can arise between the host OS and the container, One can avoid this issue by allowing you to specify the user PUID and group PGID.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance PUID=1000 and PGID=1000, to find yours use id user as below:

$ id username
uid=1000(docker user) gid=1000(docker group) groups=1000(docker group)

For iSpy Agent DVR specific user guide visit:

https://www.ispyconnect.com/userguide-agent-dvr.aspx

Non host network use:

To use a Non-host network, you will need to open up ports for this to properly work, thus the UDP ports listed in the sample runs.

To access WebUI go to the container's http://container's ip:8090 or http://ipv4_address:8090

Updating Info

Below are the instructions for updating containers:

Via Docker Compose (recommended)

  • Update all images: docker compose pull
    • or update a single image: docker compose pull ispyagentdvr
  • Let compose update all containers as necessary: docker compose up -d
    • or update a single container (recommended): docker compose up -d ispyagentdvr
  • To remove the old unused images run: docker image prune

Via Docker Run

  • Update the image: docker pull mekayelanik/ispyagentdvr:latest
  • Stop the running container: docker stop ispyagentdvr
  • Delete the container: docker rm ispyagentdvr
  • Recreate a new container with the same docker run parameters as instructed above (if mapped correctly to a host folder, your /AgentDVR/Media/XML folder and settings will be preserved)
  • To remove the old unused images run: docker image prune

Via Watchtower auto-updater (only use if you don't remember the original parameters)

  • Pull the latest image at its tag and replace it with the same env variables in one run:

    docker run --rm \
    -v /var/run/docker.sock:/var/run/docker.sock \
    containrrr/watchtower\
    --run-once ispyagentdvr
  • To remove the old unused images run: docker image prune

Image Update Notifications - Diun (Docker Image Update Notifier)

  • You can also use Diun for update notifications. Other tools that automatically update containers unattended are not encouraged

Migration Notes:

If you had the old format of audio and video volumes please move them to the new media folder before starting the container again.

It would look something like this:

mkdir -p /ispyagentdvr/media/old && \
mv /path/to/recordings/audio /ispyagentdvr/media/old && \
mv /path/to/recordings/video /ispyagentdvr/media/old

NOTES:

- Audio playback on Linux host: If you experiencing sound playback issues on Linux server hosts (Debian/Ubuntu etc.), i.e. Action sound won't play through server's speaker, add these lines to docker-compose.yml:

    group_add:
        - audio
    devices:
        - /dev/snd:/dev/snd

- ARM SBCs: Raspberry Pi 4+ may support limited acceleration with proper host setup. Performance can vary; if you get a reliable VAAPI/VPU configuration, share it via GitHub and it can be documented with credit.

- Things to make sure before Submitting a issue:

  • Update your Docker Engine to the latest available, specially on OSX. After updating the docker engine please check if the issue has been resolved.
  • Inspect the AgentDVR-IP:AGENTDVR_WEBUI_PORT/logs.html for Error list
  • If you intend to run this image on Raspberry Pi 5 then use Ubuntu or Ubuntu Server as your OS. There is a bug in Debian that fatally affects the execution of AgentDVR and many other applications that are written on .Net Core. Other Raspberry Pi doesn't have this issue at the time of writing this.
  • When reporting issues, include your Docker Compose/Docker CLI deployment command and relevant logs.html output.

- Major Changes

  • 7.2.0.0: - ⚠️⚠️⚠️ NEW directory mapping required for persistant AI model storage/AgentDVR/Media/Models ⚠️⚠️⚠️
  • 6.6.2.0: - ⚠️⚠️⚠️ Directory structure reverted to /AgentDVR from /home/agentdvr/AgentDVR. It is SPECIALLY IMPORTANT to correctly apply this change in unRAID, Synology NAS and other GUID based container deployer. ⚠️⚠️⚠️
  • 6.6.2.0: - ⚠️⚠️⚠️ Base image changed to Debian Trixie from Bookworm (mekayelanik:ispyagentdvr-trixie-slim-vlc-jellyfin-ffmpeg-7.1.1-7-intel-25.31.34666.3) ⚠️⚠️⚠️
  • 6.6.2.0: - ✅ UPDATED: Intel driver Version to: 25.31.34666.3 and AMD Mesa Driver Version to: 25.2.2-1
  • 6.6.2.0: - ⚠️⚠️⚠️ Armhf will not get any Jellyfin FFMEG from now on as the suppoprt has been dropped by Jellyfin. Instead, FFMEG from Debian SID will be used for ARMHF builds. ⚠️⚠️⚠️
  • 6.5.7.0: - ⚠️⚠️⚠️ ZSTD compression applied to reduce image size and save bandwidth. Docker Engine 23.0 or later and in case of Podman deployment, Podman Machine v5.1 or later is required for image version 6.5.7.0 and later! ⚠️⚠️⚠️
  • 6.3.4.0: - ✅ Regular version updated to 6.3.4.0. Updated Intel GPU driver to Comute Runtime Version: 25.18.33578.6, AMD Mesa Driver Version: 25.0.7-1 and updated jellyfin-ffmpeg to 7.1.1-6
  • 6.1.3.0: - ✅ Regular version updated to 6.1.3.0. Using BETA images in a mission-critical environment is STRICTLY DISCOURAGED ⚠️
  • 6.0.9.0: - ⚠️⚠️⚠️ Updated Intel GPU driver and updated jellyfin-ffmpeg to 7.0.2-9 ⚠️⚠️⚠️
  • 6.0.1.0: - ⚠️⚠️⚠️ Added driver support for Intel Battlemage GPUs ⚠️⚠️⚠️
  • 5.8.4.0: - ⚠️⚠️⚠️ Config files file format changed from XML to JSON ⚠️⚠️⚠️
  • 5.8.1.0: - ⚠️ FFMPEG version bumped from 6.0.1 to 7.0.2
  • 5.8.1.0: - mekayelank/ispyagentdvr image is now fully backword compatible with doitandbedone/ispyagentdvr image. From now on, you don't have to change the directory mapping to switch from doitandbedone/ispyagentdvr to mekayelank/ispyagentdvr, UNLESS you are using unRAID/Synology NAS or other GUI based container deployer. In that case, you will have to follow the contents of the documentation to deploy this image

Support

Buy Me A Coffee

Issues & Requests

To submit this Docker image specific issues or requests visit this docker image's Github Link: https://www.github.com/MekayelAnik/ispyagentdvr-docker

For iSpy AgentDVR-related issues and requests, please visit: https://www.reddit.com/r/ispyconnect/

To have a deeper dive into the custom base image of this container, please visit: https://github.com/MekayelAnik/ispyagentdvr-base-image

About

Multi Aarch image of iSpy's Agent DVR, standalone free-to-use NVR software for IP Camera management

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Shell 100.0%