Skip to content


Follow this guide to set up your system to run the ONVIF Device Service.

System Requirements

  • Intel™ Core® processor
  • Ubuntu 20.04.4 LTS or later
  • ONVIF-compliant Camera


The instructions in this guide were developed and tested using Ubuntu 20.04 LTS and the Tapo C200 Pan/Tilt Wi-Fi Camera, referred to throughout this document as the Tapo C200 Camera. However, the software may work with other Linux distributions and ONVIF-compliant cameras. Refer to our list of tested cameras for more information

Other Requirements

You must have administrator (sudo) privileges to execute the user guide commands.

Make sure that the cameras are secured and the computer system runnning this software is secure.


The software has dependencies, including Git, Docker, Docker Compose, and assorted tools. Follow the instructions below to install any dependency that is not already installed.

Install Git

Install Git from the official repository as documented on the Git SCM site.

  1. Update installation repositories:

    sudo apt update

  2. Add the Git repository:

    sudo add-apt-repository ppa:git-core/ppa -y

  3. Install Git:

    sudo apt install git

Install Docker

Install Docker from the official repository as documented on the Docker site.

Verify Docker

To enable running Docker commands without the preface of sudo, add the user to the Docker group. Then run Docker with the hello-world test.

  1. Create Docker group:

    sudo groupadd docker


    If the group already exists, groupadd outputs a message: groupadd: group docker already exists. This is OK.

  2. Add User to group:

    sudo usermod -aG docker $USER

  3. Restart your computer for the changes to take effect.

  4. To verify the Docker installation, run hello-world:

    docker run hello-world
    A Hello from Docker! greeting indicates successful installation.

    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    2db29710123e: Pull complete 
    Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
    Status: Downloaded newer image for hello-world:latest
    Hello from Docker!
    This message shows that your installation appears to be working correctly.

Install Docker Compose

Install Docker Compose from the official repository as documented on the Docker Compose site.

Install Tools

Install the build, media streaming, and parsing tools:

sudo apt install build-essential ffmpeg jq curl

Tool Descriptions

The table below lists command line tools this guide uses to help with EdgeX configuration and device setup.

Tool Description Note
curl Allows the user to connect to services such as EdgeX. Use curl to get transfer information either to or from this service. In the tutorial, use curl to communicate with the EdgeX API. The call will return a JSON object.
jq Parses the JSON object returned from the curl requests. The jq command includes parameters that are used to parse and format data. In this tutorial, the jq command has been configured to return and format appropriate data for each curl command that is piped into it.
base64 Converts data into the Base64 format.

Table 1: Command Line Tools

Download EdgeX Compose

Clone the EdgeX compose repository:

git clone

Proxy Setup (Optional)


These steps are only required if a proxy is present in the user environment.

Setup Docker Daemon or Docker Desktop to use proxied environment.

  • Follow guide here for Docker Daemon proxy setup (Linux)

  • Follow guide here for Docker Desktop proxy setup (Windows)

Configuration file to set Docker Daemon proxy via daemon.json

        "proxies": {
            "http-proxy": "",
            "https-proxy": "",
            "no-proxy": "*,,"

Note if building custom images

If building your own custom images, set environment variables for HTTP_PROXY, HTTPS_PROXY and NO_PROXY


export HTTP_PROXY=
export NO_PROXY=*,localhost,


Automated discovery of ONVIF device requires updating proper discovery subnets and proper network interface in ONVIF configuration.yaml or setting up EdgeX environment variables

Next Steps

Default Images>


While not recommended, you can follow the process for manually building the images.

Build Images>