Skip to content

How to Configure Ivideon Server for CLI⚓︎

Summary⚓︎

This article will explain how to configure a headless Ivideon Server for CLI using Docker. The overall configuration is straightforward, but does require a bit of effort.

Initial Config⚓︎

Since Ivideon Server will be running in a Docker container, the following configuration should be used in docker-compose_homelab.yml:

docker-compose_homelab.yml

  ivideon:
    image: sisaenkov/ivideon-server
    hostname: ${DOCKERHOSTNAME}
    container_name: ivideon
    ports:
      - 1270:8080
    environment:
      - EMAIL=ivideon@encoded.org
      - SERVER_NAME=Home
    volumes:
      - /home/dave/.config/appdata/ivideon:/config
      - /storage/ivideon:/archive
    restart: unless-stopped

Bring up the container with docker-compose up -d.

Configuration File⚓︎

The instructions from the project say to do the following:

The best way to create a configuration file is to setup Ivideon Server application through a graphical interface on any Desktop Windows or Linux system. Then copy obtained config file from ~/.IvideonServer/videoserverd.config or C:\Users\<USER>\AppData\Local\Ivideon\IvideonServer\videoserverd.config to /config volume location.

Since I already had a configuration file setup on my old server, I brought up the server and navigated to ~/.IvideonServer/videoserverd.config. After launching the container, a default configuration file is created automatically. This file should be deleted in favor of the configuration file being copied from the old server.

The configuration file can be found below.

videoserverd.config
{
   "account" : {
      "email" : "dave.levine87@gmail.com",
      "password" : "cqe13i2ubk9hS9Zp",
      "serverName" : "Jackson's Room",
      "uid" : "{a972352e-044e-4fdb-bbf9-6c0186f58ab2}",
      "uin" : 100002163063
   },
   "analytics" : {
      "tevian_faces" : null
   },
   "archive" : {
      "id" : 0,
      "maxEventLogSize" : 10,
      "name" : "Local archive",
      "path" : "/home/xenadmin/.IvideonServer/archive",
      "sizeLimit" : 40960,
      "sizeToCleanup" : 1024,
      "useArchive" : true,
      "useEventLog" : false,
      "webcamBitRate" : 2048,
      "webcamFrameRate" : 30,
      "webcamResolution" : 0,
      "webcamVideoFormat" : 1
   },
   "cameras" : [
      {
         "archiveId" : 0,
         "audioUrl" : "",
         "gui" : {
            "desktop" : {
               "channel" : 0,
               "manufacturer" : "",
               "model" : "",
               "password" : "",
               "showAdvancedSettings" : true,
               "showSubstreamsSettings" : true,
               "syncSubstreams" : true,
               "user" : ""
            }
         },
         "id" : 0,
         "mdExcludedZoneList" : null,
         "mdSensitivity" : 67,
         "mdType" : "",
         "name" : "Jackson's Room",
         "ptzUrl" : "",
         "recordQuality" : "high",
         "recordType" : "motion",
         "rtspTransport" : "auto",
         "schedule" : [
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "su",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "mo",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "tu",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "we",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "th",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "fr",
               "end" : 86400
            },
            {
               "action" : "rec_m",
               "begin" : 0,
               "dayOfWeek" : "sa",
               "end" : 86400
            }
         ],
         "soundDetectorThreshold" : 50,
         "streamHigh" : {
            "audioBitrateKbps" : 0,
            "audioBufferLenSec" : 0,
            "audioMaxFrameSize" : 0,
            "videoBitrateKbps" : 0,
            "videoBufferLenSec" : 0,
            "videoMaxFrameSize" : 0
         },
         "streamLow" : {
            "audioBitrateKbps" : 0,
            "audioBufferLenSec" : 0,
            "audioMaxFrameSize" : 0,
            "videoBitrateKbps" : 0,
            "videoBufferLenSec" : 0,
            "videoMaxFrameSize" : 0
         },
         "streamMedium" : {
            "audioBitrateKbps" : 0,
            "audioBufferLenSec" : 0,
            "audioMaxFrameSize" : 0,
            "videoBitrateKbps" : 0,
            "videoBufferLenSec" : 0,
            "videoMaxFrameSize" : 0
         },
         "streamPreview" : {
            "audioBitrateKbps" : 0,
            "audioBufferLenSec" : 0,
            "audioMaxFrameSize" : 0,
            "videoBitrateKbps" : 0,
            "videoBufferLenSec" : 0,
            "videoMaxFrameSize" : 0
         },
         "urlHigh" : "rtsp://192.168.1.200:7447/3A4fHOC8FJEMKilp",
         "urlLow" : "",
         "urlMedium" : "",
         "urlPreview" : "",
         "useCamera" : true,
         "useCameraMotionDetector" : false,
         "useMotionDetector" : false,
         "usePreview" : false,
         "usePtz" : false,
         "useSound" : true,
         "useSoundDetector" : false
      }
   ],
   "customDevInfo" : {
      "modulesPath" : ":/cdi_modules",
      "useModules" : true
   },
   "externalModules" : {
      "enabled" : true,
      "path" : ":/modules"
   },
   "gui" : {
      "desktop" : {
         "geometry" : [ 400, 116, 400, 600 ],
         "isHidden" : false,
         "isHiddenMode" : false,
         "isMaximized" : false,
         "language" : "en",
         "lastArchiveId" : 65535,
         "lastDvrId" : 65535,
         "lastId" : 0,
         "notifyUpdates" : true,
         "openIvideonPage" : true,
         "startWithWindows" : true,
         "useSecureConnection" : true
      }
   },
   "ivslog" : {
      "profile" : "default",
      "profiles" : {
         "default" : [
            {
               "in" : [ "qmmcast" ],
               "level" : "info",
               "out" : [
                  {
                     "file" : "/home/xenadmin/.IvideonServer/videoserver.log{1}~2048K"
                  }
               ]
            },
            {
               "in" : [ "*", "!rtsp" ],
               "level" : "info",
               "out" : [
                  {
                     "file" : "/home/xenadmin/.IvideonServer/service.log{1}~2048K"
                  }
               ]
            },
            {
               "in" : [ "rtsp" ],
               "level" : "info",
               "out" : [
                  {
                     "file" : "/home/xenadmin/.IvideonServer/RTSPClientDll.log{1}~2048K"
                  }
               ]
            },
            {
               "in" : [ "vsdll.analyt" ],
               "level" : "debug",
               "out" : [
                  {
                     "file" : "/home/xenadmin/.IvideonServer/analytics.log{1}~8192K"
                  }
               ]
            }
         ]
      }
   },
   "localEvents" : {
      "dbPath" : "/home/xenadmin/.IvideonServer/local-event-storage.db",
      "timeLimit" : "3d",
      "useLocalStorage" : true
   },
   "localView" : {
      "gui" : {
         "desktop" : {
            "isNetworkEnabled" : false
         }
      },
      "passwordHash" : "",
      "streamerPort" : 8080,
      "useLocalView" : false
   },
   "network" : {
      "httpProxyUrl" : "http://:3128/",
      "useHttpProxy" : false
   },
   "system" : {
      "cloudConfig" : true,
      "cwd" : "/home/xenadmin/.IvideonServer"
   }
}

Finishing Touches⚓︎

Once the config file is saved, the container needs to be restarted in order for the new configuration to take effect.

  • Run docker ps and locate the Container ID.
  • Copy the Container ID and run docker restart <container ID> to restart the container.
  • Once the container finishes restarting, open the Ivideon Client and confirm the video feed appears. Additionally, motion recordings should also be saved to /storage/ivideon/, which can be played back through the Ivideon Client.

References⚓︎