---
language: "en"
---
# VXG Knowledge Base

New! Use the Gen AI powered Chat to ask your questions about VXG!

<https://www.videoexpertsgroup.com/chat/>

Welcome to VXG Knowledge Base. VXG is the Cloud VMS engine for SaaS companies that is fully scalable, cost-effective and customizable. Here you will find all the information about the VXG Cloud VMS.

*** ** * ** ***

![image-20230131-225405.png](https://help.videoexpertsgroup.com/__attachments/a_10a84e9653e87d642bc6862dfd4fde312ea57f630e0ffa98bb2423cb9cf07639/image-20230131-225405.png?cb=4625363baef8913fc5e3dfe5e121f94e)

* [Overview](https://help.videoexpertsgroup.com/kb/overview.md)
* [Components](https://help.videoexpertsgroup.com/kb/components.md)
* [Deployment](https://help.videoexpertsgroup.com/kb/deployment.md)
* [Running cost](https://help.videoexpertsgroup.com/kb/running-cost.md)
* [Connecting cameras](https://help.videoexpertsgroup.com/kb/connecting-cameras.md)
* [Artificial Intelligence (AI)](https://help.videoexpertsgroup.com/kb/artificial-intelligence.md)
* [Architecture](https://help.videoexpertsgroup.com/kb/architecture.md)
* [Functions](https://help.videoexpertsgroup.com/kb/functions.md)
* [Use cases](https://help.videoexpertsgroup.com/kb/use-cases.md)
* [Privacy and multi-tenancy](https://help.videoexpertsgroup.com/kb/privacy-user-management-and-multi-tenancy.md)
* [Cybersecurity](https://help.videoexpertsgroup.com/kb/cybersecurity.md)
* [Disaster Recovery](https://help.videoexpertsgroup.com/kb/disaster-recovery.md)
* [Managed service](https://help.videoexpertsgroup.com/kb/managed-service.md)
* [FAQ](https://help.videoexpertsgroup.com/kb/faq.md)
* [User Guide](https://help.videoexpertsgroup.com/kb/new-web-client-cloud-two.md)
* [Integration platform](https://help.videoexpertsgroup.com/kb/integration-platform.md)
* [Technical Support](https://help.videoexpertsgroup.com/kb/technical-support.md)

---
language: "en"
---
# Adding a camera - ONVIF or Video URL?

When you are adding a new camera in your web client you need to select the camera type:  
![image-20240112-204145.png](https://help.videoexpertsgroup.com/__attachments/a_3d60e31d6a196dc08e1eacdc25b11608e17ec731c8d619996e8fc3c9838ecdee/image-20240112-204145.png?cb=496c8c283991fb72f705add7074d915c)

**ONVIF camera** - this type should be selected if you would like to have basic control over your IP camera. ONVIF protocol gives access to PTZ (pan/tilt/zoom) controls and allows you to change major video settings like profiles, resolution, and bitrate right in the web client UI. You will also be able to access the camera's UI remotely.  
![image-20240112-205542.png](https://help.videoexpertsgroup.com/__attachments/a_b9c75a42da5494985c4c4b77cfe7140a4877327a5b7ccd0b19db902c881789e1/image-20240112-205542.png?cb=974810d8df10596087ddec498f10d2bd)

However, in this case, you will need to specify both RTSP and HTTP ports of your camera, which is not always possible. You can learn more about easy ways of port forwarding using the UPnP protocol for [Vivotek](https://help.videoexpertsgroup.com/kb/vivotek-connecting-through-onvif.md)and [Hikvision](https://help.videoexpertsgroup.com/kb/hikvision-connecting-through-onvif.md)cameras.

**Video URL** - in all other cases you should select this option. This type supports various video sources (not only IP cameras) - all you need to provide is just the video stream URL address.

---
language: "en"
---
# Adding Cameras

There are multiple different ways to add cameras to CloudTwo.

* Directly by IP address

* Through the Uplink App

* Connected through a gateway (uplink, docker or hybrid)

We also support the connection of multilens cameras through any of these methods of connection. In this section you can find information on how to setup your camera for any one of these connection types, as well as information on what you need to do to in the UI to view these cameras in CloudTwo

---
language: "en"
---
# Adding Multi-lens Camera with Axis Uplink App

## Initial Camera Setup - Lens 1

1. Add the first instance of the camera, which will act as lens number 1, to the Cloud VMS.

   Use the camera's Serial Number, MAC Address, and select lens number 1 when adding the Uplink camera.

   ![image-20260402-165944.png](https://help.videoexpertsgroup.com/__attachments/a_059c3419e14d59b1ef1b458992f5148fb8828741586ba709383e402fdeab827d/image-20260402-165944.png?cb=e8616bf80a84a3cab28b06757aa2e788)
2. [Install the Uplink App](https://help.videoexpertsgroup.com/kb/axis-setup.md) on the camera and start the application.

## Adding Additional Lenses

1. Add another Uplink camera using the camera's Serial Number, MAC Address.

   Make sure to specify the new lens number which is being added.

   ![image-20260402-170228.png](https://help.videoexpertsgroup.com/__attachments/a_661d9893e3b4cc0b68a3cc988b9447b79f422af0e4984bf06ca0cd5ccdf670ec/image-20260402-170228.png?cb=27a5ed57c59dc6411956ed33ab7e7515)  
   ![image-20260402-180407.png](https://help.videoexpertsgroup.com/__attachments/a_fdfce06a5eef660e22a7f2daf1f39e228f3cd1f8c85218fdd159ce91f839a879/image-20260402-180407.png?cb=50b66d157474a4f5844dd1e9661a86b4)

---
language: "en"
---
# Admin (Owner Level)

---
language: "en"
---
# Advanced configuration

## SSL certificate

Before you get started, you will need to choose and purchase a **domain name** for your server and get the **SSL certificate** for this domain name. Then you will need to create a **DNS A record** for the IP address where your VXG Server is installed.

VXG Server uses the certificate and private key located in the directory **/ssl/.**

**Step 1:** Replace the contents of the following files:

1. certificate.pem - must contain full certificate chain to the root CA in PEM format;

2. private_key.pem - must contain matching private key in PEM format.

Please contact your certificate issuer to get the full chain of certificates and the private key in the required formats.

**Step 2:** Restart server

### Ports

VXG Server uses the following TCP ports:  

| Port  |                                                    Description                                                     |
|-------|--------------------------------------------------------------------------------------------------------------------|
| 80    | HTTP Access port                                                                                                   |
| 83    | Web API HTTP port                                                                                                  |
| 86    | Web API HTTPS port                                                                                                 |
| 443   | HTTPS Access port                                                                                                  |
| 1935  | RTMP streaming port                                                                                                |
| 1936  | RTMPS streaming port                                                                                               |
| 8080  | WebRTC insecure port                                                                                               |
| 8083  | WebRTC secure port                                                                                                 |
| 8888  | WS camera protocol port                                                                                            |
| 8883  | WSS camera protocol port                                                                                           |
| 9000  | Storage server HTTP port                                                                                           |
| 9443  | Storage server HTTPS port                                                                                          |
| 12050 | Account server HTTP port. (Only if you are running on the compatibility mode with earlier versions of VXG Server)  |
| 12443 | Account server HTTPS port. (Only if you are running on the compatibility mode with earlier versions of VXG Server) |

Please make sure that there are no conflicts with other services on the same machine.

You can configure ports used by the VXG server at the **start.sh** script.

### Running server behind NAT

It's possible to run VXG Server behind NAT, but there's a restriction that NAT external and internal ports should match.

For example, if your server is configured to use port 1935 for RTMP you can forward to it only from port 1935 on your NAT device.

If you have some ports on NAT server already occupied for another service, you can just remap the ports that VXG Server is using.

Check the **Ports** section above for the list of used ports and instructions on how to remap them.

### Backup and restore

To backup or restore VXG Server properly, you should first stop the server with stop.bat/stop.sh. This will guarantee consistency of the server's volumes.

To backup VXG Server to an OUTPUT_FILE run the following commands:

    .\backup.sh OUTPUT_FILE

To restore VXG Server from a BACKUP_FILE run the following commands:

    .\restore.sh BACKUP_FILE

### Customize the storage directory

**Step 1:** Stop VXG Server

    ./stop.sh

**Step 2:** Create a directory to store video files

    mkdir <PATH>

**Step 3, optional:** Copy your already recorded files there

    sudo cp /var/lib/docker/volumes/vxg_server_record/_data/ <PATH>

**Step 4:** Remove old docker volume for recordings

    docker volume rm vxg_server_record

**Step 5:** Edit /docker-compose.override.yml file:

    version: "3.3"

    volumes:
      record:
        driver_opts:
          type: none
          o: bind
          device: <PATH>

**Step 6:** Start the server, the newly recorded files will be stored in the PATH

    ./start.sh

### Command line commands

    backup.sh / backup.bat OUTPUT_FILE

Makes a backup copy of server settings to the OUTPUT_FILE

    cleanup.sh / cleanup.bat

Performs cleanup, removing VXG Server from your machine, along with your settings and recorded storage

    docker_install.sh / docker_install.bat

Installs or upgrades the docker engine and docker-compose in your system

    restore.sh / restore.bat BACKUP_FILE

Restores server settings from the BACKUP_FILE

    start.sh / start.bat

Starts VXG Server

    stop.sh / stop.bat

Stops VXG Server

---
language: "en"
---
# AWS advanced AWS cnfiguropi

## End-point domain names

If you prefer to use your own domain names for all endpoints, we will need the following.

### a. A sub-domains

A sub-domain name like,

*product_name.example.com*

It'll be used for AWS instances, including API endpoints.

#### b. Domain delegation

A new domain name can be created in AWS Route53 or you can use an existing domain name. If you use the existing domain, the responsibility for the subdomain must be delegated to Route 53 - <https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingNewSubdomain.html#UpdateDNSParentDomain>

Alternatively, VXG can provide domain names of the following format

*your_company_name.cloud-vms.com*

and configure everything on our end.

---
language: "en"
---
# AI costs

AI is an extra service that can be enabled and disabled per camera at any time. If enabled, it's typically few dollars/month per camera and depends on the amount of motion and AI services as described below.  
***total AI cost*** = ***\[number of (motion) triggers\]*** ***x \[AI cost per image\]***

## Generative AI cost

The cost of Generative AI per image depends on the model and image resolution.

**Resolution**

Frames with a higher resolution consume GenAI tokens. Full high definition (FHD) consumes usually more tokens than high definition (HD) video.

**Model**

The model determines which LLM (Large Language Model) will be used to perform queries on. Some models are more sophisticated than others, hence the Advanced, Pro, and Lite naming convention. The specific names of these models are:  

|   **Name**    |              Advanced               |                  Pro                   |                  Lite                  |
|    **LLM**    |          Claude 4.5 Sonnet          |                  Qwen                  |               Nova Lite                |
| **Use cases** | * Deep analysis * Finding anomalies | * General analysis * Scene description | * Scene description * Object detection |
|---------------|-------------------------------------|----------------------------------------|----------------------------------------|

### Models and costs

AWS Bedrock price per 1M tokens  

|------------|---------------|
| **Model**  | **1M tokens** |
| Nova Lite  | $0.06         |
| Qwen       | $0.53         |
| Claude 4.5 | $3.00         |

Each image consumes from 500 to 3,000 tokens. Assuming that on average HD image consumes 1,000 and FHD 2,000 tokens we have the following cost estimate per 1,000 images  

|------------|--------|---------|
| **Model**  | **HD** | **FHD** |
| Nova Lite  | $0.06  | $0.12   |
| Qwen       | $0.53  | $1.06   |
| Claude 4.5 | $3.00  | $6.00   |

The cost per camera will largely depend on the number of triggers per month and cost per image. Please see the examples below:  

|------------|----------------|--------------------|------------------------|----------|
| **Model**  | **Resolution** | **Triggers/month** | **Use case**           | **Cost** |
| Nova Lite  | HD             | 2,000              | Indoor, low activity   | $0.12    |
| Nova Lite  | FHD            | 5,000              | Indoor, high activity  | $0.60    |
| Nova Lite  | HD             | 20,000             | Outdoor, low activity  | $1.20    |
| Nova Lite  | FHD            | 50,000             | Outdoor, high activity | $6.00    |
| Qwen       | HD             | 2,000              | Indoor, low activity   | $1.06    |
| Qwen       | FHD            | 5,000              | Indoor, high activity  | $5.30    |
| Qwen       | HD             | 20,000             | Outdoor, low activity  | $10.60   |
| Qwen       | FHD            | 50,000             | Outdoor, high activity | $53.00   |
| Claude 4.5 | HD             | 2,000              | Indoor, low activity   | $6.00    |
| Claude 4.5 | FHD            | 5,000              | Indoor, high activity  | $30.00   |
| Claude 4.5 | HD             | 20,000             | Outdoor, low activity  | $60.00   |
| Claude 4.5 | FHD            | 50,000             | Outdoor, high activity | $300.00  |

More information can be found using the links below:

<https://aws.amazon.com/bedrock/pricing/>

<https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html>

<https://docs.aws.amazon.com/nova/latest/userguide/modalities-image.html>

<https://aws.amazon.com/ai/generative-ai/nova/understanding/>

## Facial Recognition and Object Recognition AI cost

The cost per 1,000 images is $1, with discounts available for large volumes.

<https://aws.amazon.com/rekognition/pricing/>

---
language: "en"
---
# Alerts aren't coming

1. The most likely reason is that the **motion events are is not configured** on the camera. It depends on a camera model and to configure motion you'll need to use the camera UI:

![image-20250521-215912.png](https://help.videoexpertsgroup.com/__attachments/a_cb265806599196db10a270d46527deb6a46c7d68158cfef5beb99fb24d8eee60/image-20250521-215912.png?cb=c97835d02ee90d99c2fde1de9d18ee05)

In the camera UI, find the Motion detection section and configure motion. Below is an example of Hanwha Motion detection UI:  
![image-20250521-220159.png](https://help.videoexpertsgroup.com/__attachments/a_c1ec1706962ee89b9f1686771a6c14e782a1582b04b188d8ce32032f1a33d565/image-20250521-220159.png?cb=9581c2384535936467e0542dbe093013)

2. Check that motion events are received on the VMS side. There are 2 ways of doing that.

   1. Go to Monitoring-\>Sites and select the camera. Click on "Records and Controls" and check that the timeline has "red dots" that indicate motion events

![image-20250521-220639.png](https://help.videoexpertsgroup.com/__attachments/a_2f9fba0bce6b814f7919f20aa60a4e8aed0c70236a76edcd5dd1ff97e6cd6f7b/image-20250521-220639.png?cb=d127db0444df5f06908f4e4c27dd25a0)

b. Create a motion only Alert Rule  
![image-20250521-221103.png](https://help.videoexpertsgroup.com/__attachments/a_86fc33bb768a23eb235314655acff410d86a67b2aff30caeaa59db96ab6961be/image-20250521-221103.png?cb=c6b1b63435b44be2634cf106b0ad109e)

You should see "motion only" alerts coming in the Alert page:  
![image-20250521-221155.png](https://help.videoexpertsgroup.com/__attachments/a_50f5598c1da175ea65c5c14e3dcf3b39c505b4c6af806f25d0638cffffb5076e/image-20250521-221155.png?cb=164a026ad0c39dcc3234a8d26862c9f1)

3. If motion detection is configured and verified, try to create an Alert Rule with a simple GenAI prompt like "Is there a person?" and verify the the Alerts with AI are now coming.

---
language: "en"
---
# Alerts page

![image-20260302-225131.png](https://help.videoexpertsgroup.com/__attachments/a_dfc3c566254c7419e7651bd58b937b12585a2b1ccfd74b78b9f329f5de287216/image-20260302-225131.png?cb=8da3ebd1efc24f584765d944ee6b7f65)

## **Generating Alerts**

Alerts can be generated using the following tools:

1. **Generative AI**-- Alerts can be triggered based on natural language queries, such as "Is there a security concern?"

2. **Cloud AI Facial Recognition** -- Detects and recognizes known faces or identifies unknown faces.

3. **Cloud AI Object Recognition** -- Identifies objects such as vehicles, people, weapons, and more.

4. **Camera-Based Events** -- Triggers alerts based on motion detection, line crossing, or other predefined camera events.

5. **Health Check Detection** -- Monitors camera status changes and generates alerts for connectivity or operational issues.

### **Filtering Alerts**

You can filter alerts based on the following criteria:

* **Site** -- Filter alerts by location.

* **Camera** -- View alerts from specific cameras.

* **Name** -- Search for alerts associated with specific names.

* **Time** -- Filter alerts within a specific timeframe.

### **Reviewing Alerts**

To review an alert, click on the **"Review"** action. This will display a brief description and a snapshot of the alert.  
![image-20260302-225224.png](https://help.videoexpertsgroup.com/__attachments/a_228b4efbe63bd13ff09969b0977dee1f78a29a3383eae025efc4fed51056a220/image-20260302-225224.png?cb=90968de570de78ee6fc8b9b0d5a05521)

#### **Generative AI Alerts**

* Generative AI alerts will show the **natural language query** used for the alert, such as:

  *"Is there a hazard or security concern in the front yard?"*

* The **Generative AI response** will provide an analysis, for example:

  *"Yes, there appears to be a security concern. The image shows a person in dark clothing crouched near the front entrance, possibly attempting to access the property or engage in suspicious activity."*

#### **How to Review an Alert**

1. Click on the **Review** button.

2. The results will open in a **new tab**, displaying the details of the alert.

3. Use the **same video playback controls** as described in the [Monitoring page](https://help.videoexpertsgroup.com/kb/monitoring-page.md)

![image-20250202-180138.png](https://help.videoexpertsgroup.com/__attachments/a_40cfed562b900d081fbf3b2e173f01521ef975c45e319c91d5a5dc19139c6b53/image-20250202-180138.png?cb=9ccd7e788913902f2e16383bb2dba2da)

---
language: "en"
---
# REST API

VXG provides a powerful API for integration with other services and front-ends. The API functions are divided into several sections. Each section has an API reference in Swagger format. Each function can be called and tested online.  
![image-20230207-010603.png](https://help.videoexpertsgroup.com/__attachments/a_420e2f135ee9b220d73c666f97deaba209335e84943d12dfc2424028ce8c6536/image-20230207-010603.png?cb=d5ddc6ca1a423db40d5e7e3953c46fb0)

## Authorization

The API functions are divided into 3 categories with different levels of security.

### "Acc" authorization

The least secure API uses a "camera access token" for authorization and it's designed for use with front-ends like web and mobile apps. The "camera access token" is a unique camera identifier that can be changed at any time.

All function calls require an authorization header:

    'Authorization: Acc %channel_access_token%'

Example of an authorization header:

    curl -X GET \
      "https://web.vxgdemo.vxgdemo.cloud-vms.com/api/v4/live/watch/" \
      -H "accept: application/json" \
      -H "Authorization: Acc eyJjYW1pZCI6IDI0ODUyNywgImNtbmdyaWQiOiAyNDg5NjQsICJhY2Nlc3MiOiAiYWxsIiwgInRva2VuIjogInNoYXJlLmV5SnphU0k2SURJek5UWXpPWDAuNjFhOTY0YzN0YmMxZmFiMDAueEJXWGRrc0FVUnY2d3M1TU9aWC1BUUloLUtNIiwgImFwaSI6ICJ3ZWIuc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIiwgImNhbSI6ICJjYW0uc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIn0="

Similar to a "camera access token", Cloud VMS also operates with "group access tokens" that represent a group of cameras. The API for "group access tokens" uses "SI" instead of "Acc" in the authorization header.

### "LKey" authorization

The next level is Admin API which uses a "license key" for authorization and it's designed to be used from a back-end. On this level, the API can add new cameras and control cloud resources. It can also retrieve "camera access tokens" and generate new ones. There is one "license key" per account/user (which can be a user, organization, or customer).

The "license key" should be injected into the Authorization header of every request:

    Authorization: LKey %license_key%

For example, if the license key is "v3.X9tKpuXq0btatj":

    curl -X GET \
      "https://web.vxgdemo.vxgdemo.cloud-vms.com/api/v3/channels/" \
      -H "accept: application/json" \
      -H "Authorization: LKey v3.X9tKpuXq0btatj"

### Key \& certificate authentication

The highest level of security is used by super admin API and it requires a key \& certificate for authentication. It's designed for cloud-to-cloud communication. On this level, the API can create accounts/users, retrieve existing "license keys", or generate new ones.

For example:

    curl -X POST \
      --key ./company.key\
      --cert ./company.crt\
      -k\
      https://ip:9000/api/v2/admin/users/\
      -H "accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{ \"suid\": \"user_id\", \"usrc\": \"Company_name\", \"license_key\": {\"value\": \"LICENSEKEY\"}, \" limits\": {\"hosted_cameras\": 100} }"

## V2 API

Authorization - license key (LKey) or access token (Acc)

<https://web.vxgdemo.vxgdemo.cloud-vms.com/docs/v2.html>

## V3 API

Authorization - license key (LKey)

<https://web.vxgdemo.vxgdemo.cloud-vms.com/docs/v3.html>

## V4 API

Authorization - access token (Acc)

<https://web.vxgdemo.vxgdemo.cloud-vms.com/docs/v4.html>

## V5 API

Authorization - group access token (SI)

<https://web.vxgdemo.vxgdemo.cloud-vms.com/docs/v5.html>

## V2 Super-admin API

Authorization - SSL key/certificate pair

<https://web.vxgdemo.vxgdemo.cloud-vms.com/docs/v2_admin.html>

*** ** * ** ***

---
language: "en"
---
# How to Use UTC and Local Time

VXG API always functions in UTC. However, it is possible to request certain objects (clips in the examples below) in the local camera time by adding the **usecamtz**parameter - in the timezone that was configured when the camera was added to the cloud.

Here are the examples for GET method **v2/storage/clips/{CLID}/** returning times in UTC or camera local time:

UTC:

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com/api/v2/storage/clips/44038648/" -H "accept: application/json" -H "Authorization: LKey LICENSEKEY"

Response:

    {
      "access": [
        "all"
      ],
      "camid": 284741,
      "created": "2022-08-12T16:12:46.491208",
      "delete_at": null,
      "duration": 60,
      "end": "2022-08-12T16:01:00",
      "event_time": null,
      "expire": "2022-08-12T21:44:40.809575",
      "group": "Lessons",
      "id": 44038648,
      "size": "13377803",
      "start": "2022-08-12T16:00:00",
      "status": "done",
      "thumb": {
        "height": 1080,
        "size": 175187,
        "time": "2022-08-12T16:00:00",
        "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m285181/c284741/clips/44038648.jpg?AWSAccessKeyId=ASIAWEOIJQJ5SQWH7FEX&Expires=1660340680&x-amz-security-token=IQoJb3JpZ2luX2VjEBAaCXVzLWVhc3QtMSJHMEUCIAiuV6XdkP5phVFdPxvOs1c1egTgyF4Dh0VM9mHKHa4DAiEA40GOpje%2B7EoP3NOU09zXmP1nk0Q0IoEVJTokC5kVatUq0gQIeRAAGgw0MjE4NjM3MTk1NDciDAj5Z2jHVTQYpWVcLyqvBAKMYkRxjfopbPpwtoWBvPSFq9hh5LH48l%2BhcjKWXL7YlYmn%2BOKyqwz03ivnEbt5MgfEBcdafuKHh4jsWo5O7PcNdneOReD3knl4vrpA6ru1Vkq16iuDuVJZkRLG%2F0xBUhTGN4ci%2FguBoVrPjs%2BlLrn8Qxu3qNccsJdvfmjBq5FpqiGvqr7y%2FBHkKYoOotZodJP0Hitif7ubseEo%2BRngnDrOHdG6brvotFxydA58O%2F%2BsC1V3FTX5p8lIc3D2FtyZBhE%2FD7puwiskG7F9N7cwM06Sz4Ec%2FZ8%2BZkcqDk66xqWW3DSwEPSmxm%2BfFGYf4x7DMMBBkNRcHJYYwNQF8Z41xSjoqE76iVZBmVy9CE8TZT1T6%2BA5Rtuw7VqLlhLUr4A2yeFYdKGFqlgnErQdIIeITIGmvG4olhdTBOcexcrEvJhubXuMyFY0hSKBdD4Zi6VoRJmD%2BJZnGagDRgwbn7BJU2JSbrTPafpoKBJ9aLb9f0ivuTsUmt%2FNEipACdx0COzf87ImZ%2BphHDurBB9GwYF5J%2Bb%2FX%2BlmrMDuw2%2FTnaxZacbg4Zg6vx5ovsu2eF4ZLsz5LWkgD3kHfXlNWzd78t4%2Beayf0Veveu0JRmrTIOsSZxqY4P3sX9%2BFaKFMRGOXnwlg40uRck60158V3TtDj88a8%2BOj8aISeSPEKQb0gIgPuklTwqBTwfUWeATiwkbRVKt57W6R84DR7wptlsbxpo%2BD%2FI7JQ0ZD8K9qBfCD8Hy27F8wvunZlwY6qQG5n4ixfzABea9%2FBre54De2heWQvCt4pZxUi4eo%2FjIbJ4HJ3509A%2Femo9kYzK8f2Avvce16uSPQFPGYw%2FHjxSxoMmUZd2bGdNg5m3XTqEZZKXUJNtLWZ7eNpSNxTmGd%2BPYOc8ZH6nPwUShM1p%2FkSWvMHuaDSWzN8gBHBnLjfD8HTE6QdOL0AYTmOFHRT36dUuBP2s%2F9zL%2B3cvf%2B4ShUcFW0848RhbV2Gme9&Signature=1yscS%2BeguYETtYPdd0c0MOQyQhI%3D",
        "width": 1920
      },
      "title": "Intro",
      "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m285181/c284741/clips/44038648_d60.mp4?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27Intro.mp4&AWSAccessKeyId=ASIAWEOIJQJ5SQWH7FEX&Expires=1660340680&x-amz-security-token=IQoJb3JpZ2luX2VjEBAaCXVzLWVhc3QtMSJHMEUCIAiuV6XdkP5phVFdPxvOs1c1egTgyF4Dh0VM9mHKHa4DAiEA40GOpje%2B7EoP3NOU09zXmP1nk0Q0IoEVJTokC5kVatUq0gQIeRAAGgw0MjE4NjM3MTk1NDciDAj5Z2jHVTQYpWVcLyqvBAKMYkRxjfopbPpwtoWBvPSFq9hh5LH48l%2BhcjKWXL7YlYmn%2BOKyqwz03ivnEbt5MgfEBcdafuKHh4jsWo5O7PcNdneOReD3knl4vrpA6ru1Vkq16iuDuVJZkRLG%2F0xBUhTGN4ci%2FguBoVrPjs%2BlLrn8Qxu3qNccsJdvfmjBq5FpqiGvqr7y%2FBHkKYoOotZodJP0Hitif7ubseEo%2BRngnDrOHdG6brvotFxydA58O%2F%2BsC1V3FTX5p8lIc3D2FtyZBhE%2FD7puwiskG7F9N7cwM06Sz4Ec%2FZ8%2BZkcqDk66xqWW3DSwEPSmxm%2BfFGYf4x7DMMBBkNRcHJYYwNQF8Z41xSjoqE76iVZBmVy9CE8TZT1T6%2BA5Rtuw7VqLlhLUr4A2yeFYdKGFqlgnErQdIIeITIGmvG4olhdTBOcexcrEvJhubXuMyFY0hSKBdD4Zi6VoRJmD%2BJZnGagDRgwbn7BJU2JSbrTPafpoKBJ9aLb9f0ivuTsUmt%2FNEipACdx0COzf87ImZ%2BphHDurBB9GwYF5J%2Bb%2FX%2BlmrMDuw2%2FTnaxZacbg4Zg6vx5ovsu2eF4ZLsz5LWkgD3kHfXlNWzd78t4%2Beayf0Veveu0JRmrTIOsSZxqY4P3sX9%2BFaKFMRGOXnwlg40uRck60158V3TtDj88a8%2BOj8aISeSPEKQb0gIgPuklTwqBTwfUWeATiwkbRVKt57W6R84DR7wptlsbxpo%2BD%2FI7JQ0ZD8K9qBfCD8Hy27F8wvunZlwY6qQG5n4ixfzABea9%2FBre54De2heWQvCt4pZxUi4eo%2FjIbJ4HJ3509A%2Femo9kYzK8f2Avvce16uSPQFPGYw%2FHjxSxoMmUZd2bGdNg5m3XTqEZZKXUJNtLWZ7eNpSNxTmGd%2BPYOc8ZH6nPwUShM1p%2FkSWvMHuaDSWzN8gBHBnLjfD8HTE6QdOL0AYTmOFHRT36dUuBP2s%2F9zL%2B3cvf%2B4ShUcFW0848RhbV2Gme9&Signature=m4rYiKn6vix5RzJIDovZouSzMJo%3D",
      "wait_for_data": false
    }

Camera timezone (Canada/Eastern) used:

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com/api/v2/storage/clips/44038648/?usecamtz" -H "accept: application/json" -H "Authorization: LKey LICENSEKEY"

Response:

    {
      "access": [
        "all"
      ],
      "camid": 284741,
      "created": "2022-08-12T16:12:46.491208",
      "delete_at": null,
      "duration": 60,
      "end": "2022-08-12T12:01:00",
      "event_time": null,
      "expire": "2022-08-12T21:44:40.809575",
      "group": "Lessons",
      "id": 44038648,
      "size": "13377803",
      "start": "2022-08-12T12:00:00",
      "status": "done",
      "thumb": {
        "height": 1080,
        "size": 175187,
        "time": "2022-08-12T12:00:00",
        "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m285181/c284741/clips/44038648.jpg?AWSAccessKeyId=ASIAWEOIJQJ5SQWH7FEX&Expires=1660340680&x-amz-security-token=IQoJb3JpZ2luX2VjEBAaCXVzLWVhc3QtMSJHMEUCIAiuV6XdkP5phVFdPxvOs1c1egTgyF4Dh0VM9mHKHa4DAiEA40GOpje%2B7EoP3NOU09zXmP1nk0Q0IoEVJTokC5kVatUq0gQIeRAAGgw0MjE4NjM3MTk1NDciDAj5Z2jHVTQYpWVcLyqvBAKMYkRxjfopbPpwtoWBvPSFq9hh5LH48l%2BhcjKWXL7YlYmn%2BOKyqwz03ivnEbt5MgfEBcdafuKHh4jsWo5O7PcNdneOReD3knl4vrpA6ru1Vkq16iuDuVJZkRLG%2F0xBUhTGN4ci%2FguBoVrPjs%2BlLrn8Qxu3qNccsJdvfmjBq5FpqiGvqr7y%2FBHkKYoOotZodJP0Hitif7ubseEo%2BRngnDrOHdG6brvotFxydA58O%2F%2BsC1V3FTX5p8lIc3D2FtyZBhE%2FD7puwiskG7F9N7cwM06Sz4Ec%2FZ8%2BZkcqDk66xqWW3DSwEPSmxm%2BfFGYf4x7DMMBBkNRcHJYYwNQF8Z41xSjoqE76iVZBmVy9CE8TZT1T6%2BA5Rtuw7VqLlhLUr4A2yeFYdKGFqlgnErQdIIeITIGmvG4olhdTBOcexcrEvJhubXuMyFY0hSKBdD4Zi6VoRJmD%2BJZnGagDRgwbn7BJU2JSbrTPafpoKBJ9aLb9f0ivuTsUmt%2FNEipACdx0COzf87ImZ%2BphHDurBB9GwYF5J%2Bb%2FX%2BlmrMDuw2%2FTnaxZacbg4Zg6vx5ovsu2eF4ZLsz5LWkgD3kHfXlNWzd78t4%2Beayf0Veveu0JRmrTIOsSZxqY4P3sX9%2BFaKFMRGOXnwlg40uRck60158V3TtDj88a8%2BOj8aISeSPEKQb0gIgPuklTwqBTwfUWeATiwkbRVKt57W6R84DR7wptlsbxpo%2BD%2FI7JQ0ZD8K9qBfCD8Hy27F8wvunZlwY6qQG5n4ixfzABea9%2FBre54De2heWQvCt4pZxUi4eo%2FjIbJ4HJ3509A%2Femo9kYzK8f2Avvce16uSPQFPGYw%2FHjxSxoMmUZd2bGdNg5m3XTqEZZKXUJNtLWZ7eNpSNxTmGd%2BPYOc8ZH6nPwUShM1p%2FkSWvMHuaDSWzN8gBHBnLjfD8HTE6QdOL0AYTmOFHRT36dUuBP2s%2F9zL%2B3cvf%2B4ShUcFW0848RhbV2Gme9&Signature=1yscS%2BeguYETtYPdd0c0MOQyQhI%3D",
        "width": 1920
      },
      "title": "Intro",
      "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m285181/c284741/clips/44038648_d60.mp4?response-content-disposition=attachment%3B%20filename%2A%3DUTF-8%27%27Intro.mp4&AWSAccessKeyId=ASIAWEOIJQJ5SQWH7FEX&Expires=1660340680&x-amz-security-token=IQoJb3JpZ2luX2VjEBAaCXVzLWVhc3QtMSJHMEUCIAiuV6XdkP5phVFdPxvOs1c1egTgyF4Dh0VM9mHKHa4DAiEA40GOpje%2B7EoP3NOU09zXmP1nk0Q0IoEVJTokC5kVatUq0gQIeRAAGgw0MjE4NjM3MTk1NDciDAj5Z2jHVTQYpWVcLyqvBAKMYkRxjfopbPpwtoWBvPSFq9hh5LH48l%2BhcjKWXL7YlYmn%2BOKyqwz03ivnEbt5MgfEBcdafuKHh4jsWo5O7PcNdneOReD3knl4vrpA6ru1Vkq16iuDuVJZkRLG%2F0xBUhTGN4ci%2FguBoVrPjs%2BlLrn8Qxu3qNccsJdvfmjBq5FpqiGvqr7y%2FBHkKYoOotZodJP0Hitif7ubseEo%2BRngnDrOHdG6brvotFxydA58O%2F%2BsC1V3FTX5p8lIc3D2FtyZBhE%2FD7puwiskG7F9N7cwM06Sz4Ec%2FZ8%2BZkcqDk66xqWW3DSwEPSmxm%2BfFGYf4x7DMMBBkNRcHJYYwNQF8Z41xSjoqE76iVZBmVy9CE8TZT1T6%2BA5Rtuw7VqLlhLUr4A2yeFYdKGFqlgnErQdIIeITIGmvG4olhdTBOcexcrEvJhubXuMyFY0hSKBdD4Zi6VoRJmD%2BJZnGagDRgwbn7BJU2JSbrTPafpoKBJ9aLb9f0ivuTsUmt%2FNEipACdx0COzf87ImZ%2BphHDurBB9GwYF5J%2Bb%2FX%2BlmrMDuw2%2FTnaxZacbg4Zg6vx5ovsu2eF4ZLsz5LWkgD3kHfXlNWzd78t4%2Beayf0Veveu0JRmrTIOsSZxqY4P3sX9%2BFaKFMRGOXnwlg40uRck60158V3TtDj88a8%2BOj8aISeSPEKQb0gIgPuklTwqBTwfUWeATiwkbRVKt57W6R84DR7wptlsbxpo%2BD%2FI7JQ0ZD8K9qBfCD8Hy27F8wvunZlwY6qQG5n4ixfzABea9%2FBre54De2heWQvCt4pZxUi4eo%2FjIbJ4HJ3509A%2Femo9kYzK8f2Avvce16uSPQFPGYw%2FHjxSxoMmUZd2bGdNg5m3XTqEZZKXUJNtLWZ7eNpSNxTmGd%2BPYOc8ZH6nPwUShM1p%2FkSWvMHuaDSWzN8gBHBnLjfD8HTE6QdOL0AYTmOFHRT36dUuBP2s%2F9zL%2B3cvf%2B4ShUcFW0848RhbV2Gme9&Signature=m4rYiKn6vix5RzJIDovZouSzMJo%3D",
      "wait_for_data": false
    }

---
language: "en"
---
# How to Check the SD Card Status

The SD card status can be retrieved with Camera Settings API **/cameras/{CAMID}/memory_card/**. It will return the SD card size, the amount of available space, and the current status:

* 'none' - the card is not installed;

* 'normal' - card's health is OK;

* 'need-format' - the card must be formatted to become usable;

* 'formatting' - formatting is in progress;

* 'initialization' - preparation of a memory card for reading and writing

---
language: "en"
---
# API Reference

## REST API reference (Docker Gateway)

This document describes the HTTP API exposed by the gateway Django application. Examples use `localhost` as the host; replace it with your gateway's IP or hostname.

### Base URL and ports

|              Access              |                              Typical URL                              |
|----------------------------------|-----------------------------------------------------------------------|
| **Through nginx (recommended)**  | `http://localhost/` (port **80**)                                     |
| **Direct to Django (debugging)** | `http://localhost:8000/` (only if port 8000 is published to the host) |

All paths below are **relative to that origin** (for example `http://localhost/api/auth-token/`).

### Authentication

Most endpoints require a **Token** header:

    Authorization: Token <your-token-hex>

Obtain the token with [Get auth token](#).

*** ** * ** ***

### Get auth token

Returns an authentication token for a user (used with `Authorization: Token ...` on subsequent requests).

**Default credentials** are often **username** `admin` and password `admin`, but your deployment may use different values from `.env` (see [Gateway Configuration](https://help.videoexpertsgroup.com/kb/gateway-configuration.md)).

#### Request

`POST /api/auth-token/`

**Headers:** `Content-Type: application/json`

**Body:**

    {
      "username": "super",
      "password": "1234"
    }

#### Example

    curl -X POST -L 'http://localhost:8000/api/auth-token/' \
      -H 'Content-Type: application/json' \
      -d '{"username": "super", "password": "1234"}'

When using nginx on port 80, use `http://localhost/api/auth-token/` instead of port `8000`.

#### Responses

**200 OK** --- valid credentials:

    {
      "token": "8656763e69dd6ead1d167b865f8caf08bf907227"
    }

**400 Bad Request** --- invalid credentials or malformed body.

*** ** * ** ***

### Get list of cameras

Returns all cameras registered on the gateway.

#### Request

`GET /api/cameras/`

**Headers:** `Authorization: Token <token>`

#### Example

    curl -H 'Authorization: Token 274c1e23f3aaccc97a21c9bb02e085f7baa54756' \
      -X GET 'http://localhost:8000/api/cameras/'

#### Responses

**200 OK**

    [
      {
        "camera_id": 1,
        "access_token": "",
        "ip": "104.251.103.214",
        "http_port": 7080,
        "rtsp_port": 7554,
        "is_active": true,
        "pid": 151,
        "serial": "FAKECAMERA",
        "mac": "FAKECAMERA",
        "rtsp_only": false
      }
    ]

**400 Bad Request** --- error payload or message depending on server validation.

*** ** * ** ***

### Add camera

Creates a camera on the gateway and, on success, starts the proxy for that camera according to server logic.

#### Request

`POST /api/add-camera/`

**Headers:**

* `Authorization: Token <token>`

* `Content-Type: application/json`

**Body:** JSON fields align with the gateway's camera model. Commonly used fields include:  

|     Field      |      Type       |                       Notes                       |
|----------------|-----------------|---------------------------------------------------|
| `ip`           | string          | Camera IP address (required).                     |
| `http_port`    | integer         | HTTP port.                                        |
| `rtsp_port`    | integer         | RTSP port.                                        |
| `is_active`    | boolean         | Whether the camera is active.                     |
| `pid`          | integer or null | Process id (often managed by the server).         |
| `serial`       | string or null  | Camera serial.                                    |
| `mac`          | string or null  | Often used as API password for serial-based auth. |
| `access_token` | string          | VMS access token when applicable.                 |
| `rtsp_only`    | boolean         | If true, RTSP tunnel only.                        |

#### Example

    curl -H 'Authorization: Token 274c1e23f3aaccc97a21c9bb02e085f7baa54756' \
      -X POST 'http://localhost:8000/api/add-camera/' \
      -H "Content-Type: application/json" \
      -d '{"ip": "<CAMERA_IP>", "http_port": <HTTP_PORT>, "rtsp_port": <RTSP_PORT>, "is_active": false, "pid": null, "serial": "<CAMERA_SERIAL>", "mac": "<CAMERA_MAC>"}'

Replace placeholders with real values. Add `access_token` and `rtsp_only` when needed. Some product builds accept extra fields (for example camera credentials) beyond the open-source model; send only what your deployment accepts.

#### Responses

**201 Created** --- camera created; example shape:

    {
      "camera_id": 1,
      "access_token": "",
      "ip": "104.251.103.214",
      "http_port": 7080,
      "rtsp_port": 7554,
      "is_active": false,
      "pid": null,
      "serial": "FAKECAMERA",
      "mac": "FAKECAMERA",
      "rtsp_only": false,
      "username": "admin",
      "password": "pass"
    }

**400 Bad Request** --- validation errors.

*** ** * ** ***

### Delete camera

Deletes the camera identified by `camera_id` in the path.

The server may resolve **VMS camera ids** embedded in `access_token` (decoded payload `camid`) when the numeric id does not match a local row.

#### Request

`DELETE /api/cameras/<camera_id>/`

**Headers:** `Authorization: Token <token>`

#### Example

    curl -H 'Authorization: Token 274c1e23f3aaccc97a21c9bb02e085f7baa54756' \
      -X DELETE 'http://localhost:8000/api/cameras/1/'

#### Responses

**204 No Content** --- deleted successfully.

**404 Not Found** --- camera does not exist on the gateway.

**400 Bad Request** --- may occur for other error conditions.

*** ** * ** ***

### Restart gateway proxy

Restarts the **main** proxy connection from the gateway device to the cloud (runs the gateway restart script).

#### Request

`POST /api/restart/`

**Headers:** `Authorization: Token <token>`

#### Example

    curl -H 'Authorization: Token 9d994f82420881f3ba0d3537e54ef3906638830f' \
      -X POST 'http://localhost:8000/api/restart/'

#### Responses

**200 OK**

    {
      "message": "Server restarted successfully"
    }

**500 Internal Server Error** --- script failure; body may include an error message.

*** ** * ** ***

### Edit camera

Updates an existing camera. You may use either the **local** `camera_id` on the gateway or the **VMS** camera id encoded in the access token (same resolution behavior as delete).

#### Request

`POST /api/edit-camera/<camera_id>/`

**Headers:**

* `Authorization: Token <token>`

* `Content-Type: application/json`

**Body:** Same fields as [Add camera](#), but **omit** any field you do not want to change (partial update).

#### Example

    curl -H 'Authorization: Token cbb76707798dc84ca7e1d1b1e584ae8ed62c6dbc' \
      -X POST 'http://vxgoffice.ddns.net:22080/api/edit-camera/15446/' \
      -H "Content-Type: application/json" \
      -d '{"ip": "192.168.2.136"}'

#### Responses

**200 OK**

    {
      "camera_id": 1,
      "access_token": "eyJjYW1pZCI6IDE1ND...",
      "ip": "192.168.2.136",
      "http_port": 80,
      "rtsp_port": 554,
      "is_active": true,
      "pid": 141,
      "serial": null,
      "mac": null,
      "rtsp_only": false
    }

**404 Not Found** --- camera does not exist on the gateway.

**400 Bad Request** --- validation errors.

*** ** * ** ***

### Get camera info

Fetches database fields for a single camera. You may use either the **local** `camera_id` or the **VMS** id from the access token, consistent with edit/delete behavior.

#### Request

`GET /api/camera/<camera_id>/`

**Headers:** `Authorization: Token <token>`

#### Example

    curl -H 'Authorization: Token cbb76707798dc84ca7e1d1b1e584ae8ed62c6dbc' \
      -X GET 'http://vxgoffice.ddns.net:22080/api/camera/15446/'

#### Responses

**200 OK**

    {
      "camera_id": 1,
      "access_token": "eyJjYW1pZCI6IDE1ND...",
      "local_token": "eyJjYW1pZCI6IDE1ND...",
      "ip": "192.168.2.136",
      "http_port": 80,
      "rtsp_port": 554,
      "is_active": true,
      "pid": 141,
      "serial": null,
      "mac": null,
      "rtsp_only": false
    }

**404 Not Found** --- camera does not exist on the gateway.
> **Note:** Confirm that your deployed build registers `GET /api/camera/<id>/`. If the route is missing, use `GET /api/cameras/` and filter client-side, or add the endpoint in your branch.

*** ** * ** ***

### Web UI routes (non-API)

The gateway also serves HTML pages (login required for most actions), including routes such as:  

|                           Path                            |        Purpose         |
|-----------------------------------------------------------|------------------------|
| `/`                                                       | Gateway dashboard      |
| `/login/`, `/logout/`                                     | Session authentication |
| `/add-camera`, `/edit-camera/<id>`, `/delete/<camera_id>` | Browser flows          |
| `/settings/`, `/restart/`                                 | Settings and restart   |

These are separate from the `/api/...` JSON API.

*** ** * ** ***

### Implementation notes

* **Token authentication** uses Django REST framework `TokenAuthentication` (`rest_framework.authtoken`).

* **SQLite** stores cameras; persistence lives in the app container filesystem unless you mount a volume over `/code/server/db.sqlite3` (not shown in the default Compose file --- data may be lost if the container is recreated without a volume).

* Response bodies for create/update reflect the **serializer and model** in your build; extra keys in examples may appear only on specific product variants.

---
language: "en"
---
# How to Get Video, Clips and Images

In all examples below, `ACCESS_TOKEN` should be replaced with an actual access token for a selected channel (camera). For watching live or recorded video it is sufficient to have an access token with "watch" permission and you will need a "full" permission access token for image and clip extraction.

## Live video

Get live video URLs:

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/live/watch/" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN

Example of a response:

    {
      "expire_hls": "2021-08-06T15:41:37.662355",
      "rtsp": "rtsp://54.172.31.247:554/live/u17m239530c239093_primary?ticket=media.eyJuIjogInUxN20yMzk1MzBjMjM5MDkzX3ByaW1hcnkifQ.1628261204.kW71CV7LPKxzWZCxUPczPDTAOK4",
      "hls": "https://d88wn9kkji59m.cloudfront.net:443/live/media-22/media.eyJuIjogInUxN20yMzk1MzBjMjM5MDkzX3ByaW1hcnkifQ.1628265397.RD39GS18IIRD7L8r2vqNwyPunVw/hls/u17m239530c239093_primary/index.m3u8?ticket=media.eyJuIjogInUxN20yMzk1MzBjMjM5MDkzX3ByaW1hcnkifQ.1628265397.RD39GS18IIRD7L8r2vqNwyPunVw",
      "expire": "2021-08-06T14:46:44.347031",
      "rtmp": "rtmp://54.172.31.247:1935/live/u17m239530c239093_primary?ticket=media.eyJuIjogInUxN20yMzk1MzBjMjM5MDkzX3ByaW1hcnkifQ.1628261204.kW71CV7LPKxzWZCxUPczPDTAOK4",
      "webrtc": {
        "ice_servers": [
          {
            "urls": [
              "stun:stun.l.google.com:19302"
            ]
          },
          {
            "username": "vxgturn",
            "credential": "vxgturn",
            "urls": [
              "turn:turn.vxg.io:3478?transport=udp"
            ]
          }
        ],
        "version": "2.0.2",
        "connection_url": "wss://webrtc-2.inst.auth2.cloud-svcp.com:443/239093/watch/08b6e083a9af4359f2f58feef045314629a2c4be/?ticket=media.eyJuIjogIjIzOTA5My93YXRjaC8wOGI2ZTA4M2E5YWY0MzU5ZjJmNThmZWVmMDQ1MzE0NjI5YTJjNGJlIn0.1628282504.eNXSKx8s6FLwoM9xrcGXLRQnbQc",
        "scripts": {
          "player": "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/static/webrtc/CloudPlayer.webrtc2.js",
          "helpers": "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/static/webrtc/CloudHelpers.js"
        }
      }
    }

The response contains URLs and information for connecting to the live video using the following formats:

* RTSP

* RTMP

* HLS

* WebRTC

## Recorded video

Get Recorded video URLs:

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/records/?start=2021-08-06T10%3A45%3A00&end=2021-08-06T10%3A50%3A00" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN

Example of a response:

    {
      "meta": {
        "expire": "2021-08-06T20:13:34.606064",
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null,
        "total_count": 3
      },
      "objects": [
        {
          "end": "2021-08-06T10:45:19",
          "id": 2637475242,
          "size": 10324026,
          "start": "2021-08-06T10:44:22",
          "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m238299/c237863/20210806/104422.000000_profile-1-h264_d57.mp4?AWSAccessKeyId=ASIAWEOIJQJ5ZZKJDGET&Expires=1628280814&x-amz-security-token=IQoJb3JpZ2luX2VjEEcaCXVzLWVhc3QtMSJIMEYCIQCcnH7OqHNx5vo6rFjf2k0SF1kq21nmpmkx4ogFwV1LvwIhAI7bKCS1FARmdquqlckXF%2B%2FC1rL6zmwThRgKv9LlT83OKvoDCF8QABoMNDIxODYzNzE5NTQ3IgyzOf4dVS%2BZu9GOte0q1wORexA2crdwtd%2Fj10RpTlHnpsLJ9sm4%2B0bcvskjhRcMDeumVYN6VjvMdgFUxrKZ742S5L8GFbNp1I1IGT2ydYiByR5wcWfFCQl%2FQgayP8j3vNeK%2F6nHzqPuI8crAxQ3HOhTzpsAAHNZTm74VL3IVBRhWgzfTsaz5P3TwesJiiiUQH9TblU%2BjePGpJaC7qqdI%2BITndp0t%2Bohr5Wo3gR6k0fDkPUxulRSFXqGzdtSh5ZujRe5U6OavMCZDAumdT%2B58PIKa%2BPKqGcd8mMZywWQbrW%2FENJNP9UDgic3XS8v9CWB9BFw2Yq%2BEuuNcjVaRPS%2BLJIiSk95j%2BURaizwqIVGI8BSB6H8WHrVw0zRIGd7QWvyuDdFpSLER6h%2B6Ra2U4sibPjfIdyd2pfifaTu7j03aQo7yxmDkj3zI8gWA2LVHWSe08xIKnEZ9l8b3vUTnYyQoq25%2BWQtDcx81VMpB4r%2F35GJ5928yajBYNEZSiTjMIVd3U4QTEM4U8cA6WGzzwnH0Oam0%2BN1%2Bkn3uytnsTzvv9mb1SLtnWSmC8FW2anUcEU1%2BbbNEdj9TNnWG1KYHLmF1n6vUU2qmjGBi%2FuVdoK%2FLNhlb8y8kjJb0DgsziXA3LjIOqvmvs%2BM7XMw%2Boa1iAY6pAEGe%2BXUdeyVNeJK%2BcjmHljn1ugTdk0ji2CUeG%2BFE11cAjSU7u2F%2FFisWEJgHQ8qAsDq6JGIolISktVeGv83yKfDEnUKvSDysziVjZBgUnDF2ssYxtxq%2Furbkev6cD4xX8NHMmySUTlxUqkic%2FBumdXF0RvGxzdPuZ49WdYB5T7KA5w4L83iHhkT2Ey8wDuNyNhRBQiEKKpN1D7WMvz61ypCk4uVsg%3D%3D&Signature=Dq1d%2BYKuzhpQ558JoLplUjyWHRM%3D"
        },
        {
          "end": "2021-08-06T10:46:15",
          "id": 2637479315,
          "size": 10475722,
          "start": "2021-08-06T10:45:19",
          "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m238299/c237863/20210806/104519.000000_profile-1-h264_d56.mp4?AWSAccessKeyId=ASIAWEOIJQJ5ZZKJDGET&Expires=1628280814&x-amz-security-token=IQoJb3JpZ2luX2VjEEcaCXVzLWVhc3QtMSJIMEYCIQCcnH7OqHNx5vo6rFjf2k0SF1kq21nmpmkx4ogFwV1LvwIhAI7bKCS1FARmdquqlckXF%2B%2FC1rL6zmwThRgKv9LlT83OKvoDCF8QABoMNDIxODYzNzE5NTQ3IgyzOf4dVS%2BZu9GOte0q1wORexA2crdwtd%2Fj10RpTlHnpsLJ9sm4%2B0bcvskjhRcMDeumVYN6VjvMdgFUxrKZ742S5L8GFbNp1I1IGT2ydYiByR5wcWfFCQl%2FQgayP8j3vNeK%2F6nHzqPuI8crAxQ3HOhTzpsAAHNZTm74VL3IVBRhWgzfTsaz5P3TwesJiiiUQH9TblU%2BjePGpJaC7qqdI%2BITndp0t%2Bohr5Wo3gR6k0fDkPUxulRSFXqGzdtSh5ZujRe5U6OavMCZDAumdT%2B58PIKa%2BPKqGcd8mMZywWQbrW%2FENJNP9UDgic3XS8v9CWB9BFw2Yq%2BEuuNcjVaRPS%2BLJIiSk95j%2BURaizwqIVGI8BSB6H8WHrVw0zRIGd7QWvyuDdFpSLER6h%2B6Ra2U4sibPjfIdyd2pfifaTu7j03aQo7yxmDkj3zI8gWA2LVHWSe08xIKnEZ9l8b3vUTnYyQoq25%2BWQtDcx81VMpB4r%2F35GJ5928yajBYNEZSiTjMIVd3U4QTEM4U8cA6WGzzwnH0Oam0%2BN1%2Bkn3uytnsTzvv9mb1SLtnWSmC8FW2anUcEU1%2BbbNEdj9TNnWG1KYHLmF1n6vUU2qmjGBi%2FuVdoK%2FLNhlb8y8kjJb0DgsziXA3LjIOqvmvs%2BM7XMw%2Boa1iAY6pAEGe%2BXUdeyVNeJK%2BcjmHljn1ugTdk0ji2CUeG%2BFE11cAjSU7u2F%2FFisWEJgHQ8qAsDq6JGIolISktVeGv83yKfDEnUKvSDysziVjZBgUnDF2ssYxtxq%2Furbkev6cD4xX8NHMmySUTlxUqkic%2FBumdXF0RvGxzdPuZ49WdYB5T7KA5w4L83iHhkT2Ey8wDuNyNhRBQiEKKpN1D7WMvz61ypCk4uVsg%3D%3D&Signature=32Jhl9PqKUcUcCKqiAKJwFVgXak%3D"
        },
        {
          "end": "2021-08-06T10:47:11",
          "id": 2637483404,
          "size": 10479294,
          "start": "2021-08-06T10:46:15",
          "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m238299/c237863/20210806/104615.000000_profile-1-h264_d56.mp4?AWSAccessKeyId=ASIAWEOIJQJ5ZZKJDGET&Expires=1628280814&x-amz-security-token=IQoJb3JpZ2luX2VjEEcaCXVzLWVhc3QtMSJIMEYCIQCcnH7OqHNx5vo6rFjf2k0SF1kq21nmpmkx4ogFwV1LvwIhAI7bKCS1FARmdquqlckXF%2B%2FC1rL6zmwThRgKv9LlT83OKvoDCF8QABoMNDIxODYzNzE5NTQ3IgyzOf4dVS%2BZu9GOte0q1wORexA2crdwtd%2Fj10RpTlHnpsLJ9sm4%2B0bcvskjhRcMDeumVYN6VjvMdgFUxrKZ742S5L8GFbNp1I1IGT2ydYiByR5wcWfFCQl%2FQgayP8j3vNeK%2F6nHzqPuI8crAxQ3HOhTzpsAAHNZTm74VL3IVBRhWgzfTsaz5P3TwesJiiiUQH9TblU%2BjePGpJaC7qqdI%2BITndp0t%2Bohr5Wo3gR6k0fDkPUxulRSFXqGzdtSh5ZujRe5U6OavMCZDAumdT%2B58PIKa%2BPKqGcd8mMZywWQbrW%2FENJNP9UDgic3XS8v9CWB9BFw2Yq%2BEuuNcjVaRPS%2BLJIiSk95j%2BURaizwqIVGI8BSB6H8WHrVw0zRIGd7QWvyuDdFpSLER6h%2B6Ra2U4sibPjfIdyd2pfifaTu7j03aQo7yxmDkj3zI8gWA2LVHWSe08xIKnEZ9l8b3vUTnYyQoq25%2BWQtDcx81VMpB4r%2F35GJ5928yajBYNEZSiTjMIVd3U4QTEM4U8cA6WGzzwnH0Oam0%2BN1%2Bkn3uytnsTzvv9mb1SLtnWSmC8FW2anUcEU1%2BbbNEdj9TNnWG1KYHLmF1n6vUU2qmjGBi%2FuVdoK%2FLNhlb8y8kjJb0DgsziXA3LjIOqvmvs%2BM7XMw%2Boa1iAY6pAEGe%2BXUdeyVNeJK%2BcjmHljn1ugTdk0ji2CUeG%2BFE11cAjSU7u2F%2FFisWEJgHQ8qAsDq6JGIolISktVeGv83yKfDEnUKvSDysziVjZBgUnDF2ssYxtxq%2Furbkev6cD4xX8NHMmySUTlxUqkic%2FBumdXF0RvGxzdPuZ49WdYB5T7KA5w4L83iHhkT2Ey8wDuNyNhRBQiEKKpN1D7WMvz61ypCk4uVsg%3D%3D&Signature=z6e1YYYSdJHzQByUsj1FtTQW0uE%3D"
        }
      ]
    }

The response contains links to recorded video chunks in standard MP4 format.

## Images from recorded video

You can generate images from the recorded video for any duration and with a period that is bigger than a keyframe interval for a particular video stream. For example, you can generate images every 30 seconds for the last 12 hours. The result of this operation will be 60/30x60x12 = 1,440 JPEG images. The image resolution will be the same as the original video resolution.

1. Start an image generation task and specify duration and interval.

    curl -X POST "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/images/generation/tasks/" 
         -H "accept: application/json" 
         -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" 
         -d "{ 
                \"start\": \"2020-02-07T09:00:00\", 
                \"end\": \"2020-02-07T10:00:00\", 
                \"period\": 1.5
            }"

Here `start` and `end` are times in UTC format, `period` is an image generation period in seconds.

The response will contain a task `id` that can be used for checking the status. It can take time if you extract images for a long duration.

    {
        "id": 6832,
    }

1. Check the task status.

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/images/generation/tasks/6832/" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN"

Here `6832` is the task ID.

The response will contain the status.

    {
        "status": "done",
    }

1. Retrieve the generated images.

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/storage/images/?start=2020-02-07T09%3A00%3A00&end=2020-02-07T10%3A00%3A00" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN"

The response will have links to JPEG images.

    {
      "objects": [
        {
          "height": 240,
          "id": 689124135,
          "origin": "recording_thumbnail",
          "size": 11959,
          "time": "2020-02-07T09:00:41",
          "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m214679/c214255/20200427/090041.000000_primary_d42.jpg?Signature=...",
          "width": 320
        },
        {
          "height": 240,
          "id": 689125536,
          "origin": "recording_thumbnail",
          "size": 11983,
          "time": "2020-02-07T09:01:23",
          "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m214679/c214255/20200427/090123.000000_primary_d42.jpg?Signature=...",
          "width": 320
        }
      ]

## Images from live video

You can generate images from live video with a period that is bigger than a keyframe interval for a particular video stream. Once enabled the image generation will keep working until it is disabled.

1. Enable or disable image generation for live video.

    curl -X PUT "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/images/generation/live" 
         -H "accept: application/json" 
         -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" 
         -d "{ 
                \"image_generation_period\": 60
            }"

Here `60` is the image generation period in seconds. Set it to `null` to disable live image generation.

1. Check if live image generation is enabled.

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/images/generation/live" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" 

The response will contain an image generation period or `null` if image generation is disabled.

    {
        "image_generation_period": 60,
    }

1. Retrieve the generated images.

It is the same as in the previous section for images from recorded video.

## Clips from recorded video

1. Start a clip creation task:

    curl -X POST "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/clips" 
         -H "accept: application/json" 
         -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" 
         -d "{ 
                \"start\": \"2020-02-07T09:00:00\", 
                \"end\": \"2020-02-07T09:15:00\", 
            }"

Here `start` and `end` are times in UTC format.

The response will contain a task id that can be used for checking the task status. It can take time if you create a long clip.

    {
        "id": 142,
    }

1. Check the task status and retrieve the clip.

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v4/clips/142" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN"

Here `142` is the task ID.

The response will contain the status.

    {
        "status": "done",
    }

If the status is `done` then a link to a clip and a clip's thumbnail will be in the same response.

    {
        "url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m212787/c212363/clips/2295627_d298.mp4?Signature=...",
        "thumb.url": "https://skyvr-av-auth2-rel.s3.amazonaws.com/u17/m212787/c212363/clips/2295627.jpg?Signature=..."
    }

---
language: "en"
---
# How to Work with Channel Groups

A group of channels can be associated with a *group access token* . The *group access token*can be used for

1. Enumerating channels and get access to each channel individually.

2. Performing operations on a group of channels.

In all examples below, `GROUP_ACCESS_TOKEN` should be replaced with an actual *group access token*received from your integrator or using API.

## Enumerating channels and getting access to each channel individually

Returning a list of channels

    curl -X GET "https://web.skyvr.videoexpertsgroup.com/api/v5/channels/" 
         -H "accept: application/json" 
         -H "Authorization: SI GROUP_ACCESS_TOKEN

Example of a response:

    {
      "meta": {
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null,
        "total_count": 2
      },
      "objects": [
        {
          "id": 237832,
          "name": "driveway",
          "recording": false,
          "status": "inactive",
          "token": "eyJjYW1pZCI6IDIzNzgzMiwgImNtbmdyaWQiOiAyMzgyNjgsICJhY2Nlc3MiOiAiYWxsIiwgInRva2VuIjogInNoYXJlLmV5SnphU0k2SURJeE1qSTJNMzAuNjBjMTM1MDZ0YmMxZmFiMDAuNkxSbWdmcjYtV3M3b1RkQUhGdGVvcVVHQ21JIiwgImFwaSI6ICJ3ZWIuc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIiwgImNhbSI6ICJjYW0uc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIn0="
        },
        {
          "id": 237833,
          "name": "room",
          "recording": false,
          "status": "inactive",
          "token": "eyJjYW1pZCI6IDIzNzgzMywgImNtbmdyaWQiOiAyMzgyNjksICJhY2Nlc3MiOiAiYWxsIiwgInRva2VuIjogInNoYXJlLmV5SnphU0k2SURJeE1qSTJObjAuNjBjMTM4N2R0YmMxZmFiMDAuemVPRXRTSnZ1ZjVaTDRPZkkyWGVQdmpJSjA4IiwgImFwaSI6ICJ3ZWIuc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIiwgImNhbSI6ICJjYW0uc2t5dnIudmlkZW9leHBlcnRzZ3JvdXAuY29tIn0="
        }
      ]
    }

Here `token` is an access token of an individual channel. This token can be used for retrieving live and recorded video, generating images and clips. See [How to Get Video, Clips and Images](https://help.videoexpertsgroup.com/kb/application-notes-retrieving-video-data.md) for more details.

For returning information about one selected channel from the group, the following function can be used:

    curl -X GET "https://web.skyvr.videoexpertsgroup.com/api/v5/channels/236716/" 
         -H "accept: application/json" 
         -H "Authorization: SI GROUP_ACCESS_TOKEN

Here `236716` is the `id` of the channel.

## Performing operations on a group of channels

The following operations can be performed on a group of channels:

1. Creating clips.

2. Extracting images.

3. Retrieving recorded video.

The syntax is similar to corresponding operations on individual channels. For example, creating clips for a group of channels:

    curl -X GET "https://web.skyvr.videoexpertsgroup.com/api/v5/clips/?start=2021-08-06T10%3A45%3A00&end=2021-08-06T10%3A47%3A00" 
         -H "accept: application/json" 
         -H "Authorization: SI GROUP_ACCESS_TOKEN

---
language: "en"
---
# API: Working with events

Cameras can support different types of events, the full list of supported events for a certain camera can be obtained with `GET/cameras/{CAMID}/event_processing/events/` request. In the examples below, `ACCESS_TOKEN` should be replaced with an actual access token of the selected channel with "all" permission.

For example:

    curl -X GET "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v2/cameras/237863/event_processing/events/" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN"

The response contains the list of all supported events along with the capabilities:

    {
      "meta": {
        "limit": 20,
        "next": null,
        "offset": 0,
        "previous": null,
        "total_count": 3
      },
      "objects": [
        {
          "caps": {
            "can_be_triggered": false,
            "can_record": true,
            "can_snapshot": true,
            "is_periodic": false
          },
          "generate_images": false,
          "name": "motion",
          "notify": true,
          "receive": true,
          "record": true,
          "snapshot": true
        },
        {
          "caps": {
            "can_be_triggered": false,
            "can_record": false,
            "can_snapshot": false,
            "is_periodic": false
          },
          "generate_images": false,
          "name": "net",
          "notify": true,
          "receive": true
        },
        {
          "caps": {
            "can_be_triggered": false,
            "can_record": false,
            "can_snapshot": true,
            "is_periodic": true
          },
          "generate_images": false,
          "name": "snapshot",
          "notify": true,
          "period": 0,
          "receive": false,
          "snapshot": true
        }
      ]
    }

## Adding new types of events

It is possible to add new custom types of events using `POST/cameras/{CAMID}/event_processing/events/` request.

For example:

    curl -X POST "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v2/cameras/237863/event_processing/events/" 
         -H "accept: application/json" 
         -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" -d "{ \"name\": \"custom_event\", \"notify\": true}"

The response contains capabilities of the new event type:

    {
      "caps": {
        "can_be_triggered": false,
        "can_record": false,
        "can_snapshot": false,
        "is_periodic": false
      },
      "custom": true,
      "name": "custom_event",
      "notify": true,
      "receive": false
    }

## Creating events

In most cases, cameras are generating events themselves, but sometimes it is needed to create an event on the backend. For example, custom events can only be created by the backend.

To create an event, you need to specify the camera, type of event (it must be supported), and the event time. Also, it is possible to add metadata if needed. For example:

    curl -X POST "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v2/storage/events/" 
         -H "accept: application/json" 
         -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" -d "{ \"camid\": 237863, \"name\": \"custom_event\", \"time\": \"2021-09-23T16:30:00\", \"meta\": { \"tag1\": \"value1\" }}"

Response:

    {
      "camid": 237863,
      "id": 33794128,
      "meta": {
        "tag1": "value1"
      },
      "name": "custom_event",
      "time": "2021-09-23T16:30:00"
    }

## Triggering events

Some types of events can be triggered (`"can_be_triggered": true` in capabilities) which means that the backend sending the command to the camera and the camera generates the event itself.

To trigger an event, you need to specify the camera, type of event, and the event time. Also, it is possible to add metadata if needed. For example:

    curl -X POST "https://web.vxgdemo.vxgdemo.cloud-vms.com:443/api/v2/cameras/240977/event_processing/events/audio_event/trigger/" 
         -H "accept: application/json" -H "Content-Type: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN" -d "{ \"time\": \"2021-09-23T19:15:00\", \"meta\": { \"tag1\": \"value1\" }}"

---
language: "en"
---
# How to Read and Write Metadata

Metadata can be recorded, updated, and deleted for each channel individually and for a group of channels. In the examples below, `ACCESS_TOKEN `should be replaced with an actual access token of the selected channel with "all" permission.

Base URL: `web.skyvr.videoexpertsgroup.com/api/v4`

Operations:

* `POST /meta/` Creates or replaces one or more meta documents

* `PUT /meta/` Updates one or more meta documents

* `DELETE /meta/` Deletes one or more meta documents

* `POST /meta/filter/` Returns search hits that match the query defined in the request

* `DELETE /meta/filter/` Deletes meta documents that match the query defined in the request

For example, to write metadata for a selected channel we will use the following function:

    curl -X POST "https://web.skyvr.videoexpertsgroup.com/api/v4/meta/" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN 
         -H "Content-Type: application/json" 
         -d "[ 
               { 
                  \"timestamp\": \"2021-08-06T00:01:00.947\", 
                  \"long\": { 
                      \"people_count\": 12, 
                      \"cars_count\": 1 
                  }, 
                  \"float\": { 
                       \"luminosity\": 0.114 
                  }, 
                  \"string\": { 
                       \"objects\": \"people,cars\", 
                       \"location\": \"street\" 
                  }, 
                  \"raw_data\": \"Scene detector a0014_j\" }
              ]"

The response will contain the status and id of the record:

    {
      "objects": [
        {
          "status": 201,
          "id": "prod_cmt0006_240160_9541c83575b9d4579bb365487192926b"
        }
      ],
      "meta": {
        "errors_count": 0,
        "total_count": 1
      }
    }

Example of retrieving metadata:

    curl -X POST "https://web.skyvr.videoexpertsgroup.com/api/v4/meta/filter/" 
         -H "accept: application/json" 
         -H "Authorization: Acc ACCESS_TOKEN 
         -H "Content-Type: application/json" 
         -d "{ 
             \"filter\": { 
                 \"and\": [ 
                     { 
                         \"field\": \"timestamp\", 
                         \"gte\": \"2021-08-06T00:00:00\", 
                         \"lte\": \"2021-08-07T00:00:00\" 
                     } 
                  ] 
              }
          }"

The response:

    {
      "objects": [
        {
          "timestamp": "2021-01-25T00:01:02.947",
          "long": {
            "people_count": 12,
            "cars_count": 1
          },
          "float": {
            "luminosity": 0.114
          },
          "string": {
            "objects": "people,cars",
            "location": "street"
          },
          "raw_data": "Scene detector a0014_j",
          "id": "prd_cmt0000_huJcWHcB5abuaaFTMQiN"
        }
      ],
      "meta": {
        "limit": 300,
        "next_offset": "ZMDyUdhWzETTNM",
        "total_count": 8107
      }
    }

---
language: "en"
---
# Application security

The VMS is 100% API driven and cyber security is focused on API cyber security in the first place.

## Secure API.

We have 3 levels of API with different levels of security:

1. Level 3 requires an SSL key/cert pair for authentication. This is the most secure API and can be used for creating "license keys" that can be associated with customers or users. Designed for cloud-to-cloud (service-to-service) calls.

2. Level 2 requires a "license key" for authentication; this API can be used for adding/removing cameras and associated resources, and each new camera receives a "camera access token". Designed for back-end calls.

3. Level 1 requires the "camera access token" for authentication, this API is used to control the corresponding camera and access its data (live, recorded, events, archive, etc.). Designed for front-end calls.

## Input validation and rate limiting

In addition to tools provided by cloud infrastructure providers, Cloud VMS uses call rate limitation for invalid API calls as a countermeasure to DDoS attacks.

In the case of AWS, we also use AWS Shield for protection from DDoS attacks.

## Secure development life cycle (SDLC)

VXG runs vulnerability tests on the test VMS deployment at the end of each development cycle.

## Vulnerability tests (pentests)

The VMS has passed professional penetration tests. The tests were carried out as a grey box penetration tests.

### Methodology.

We ensure to use only current technologies, and tools and follow best practices for penetration testing. For that we use professional pentest tools from the leading cybersecurity providers All tests are guided and inspired by the OWASP Testing Guide and Open Source Security Testing Methodology Manual (OSSTMM) to reach the highest standards.

### Reports

The list of tools and reports are available upon request. These reports include

* Network Vulnerability Scanner

* API Vulnerability Scanner

* Web Vulnerability Scanner

---
language: "en"
---
# Architecture

![image-20230131-225732.png](https://help.videoexpertsgroup.com/__attachments/a_80d855935f3aca4e62bff22e4ac9c649bbc41247d05afa8554f7e372c7705d3e/image-20230131-225732.png?cb=87882370d5d42e06092901a4b8135ca8)

## Micro-services

VXG has a unique micro-services architecture. Each function is a service, and it can scale up and down independently of other services. For example, when you need to extract images from 10,000 cameras only the service responsible for image extraction will scale up to have enough capacity to perform the task.

VXG was designed as a cloud-first platform however it can be deployed in an isolated network or even on a single server. The cloud platform is fully auto-scaling and can be deployed on Kubernetes or AWS.

## Connection with cameras

Cameras are connected in 3 different ways:

1. [Direct to Cloud](https://help.videoexpertsgroup.com/kb/direct-to-cloud.md) (camera plug-ins)

2. [Cloud Gateway](https://videoexpertsgroup.atlassian.net/wiki/display/HELP/Gateway+and+NVR) (bridged).

3. [Direct ONVIF](https://help.videoexpertsgroup.com/kb/direct-onvif.md).

![image-20230201-044433.png](https://help.videoexpertsgroup.com/__attachments/a_b52327b5e80a51e2ac4b24e0e08af1530cd875120fa23d37e920a01b24297347/image-20230201-044433.png?cb=e9dbe14bd93c03a0be92913ef136a976)

Read more in the dedicated [Connecting cameras](https://help.videoexpertsgroup.com/kb/connecting-cameras.md) section.

## Multi-tenancy

Cloud VMS is completely detached from user management. It only deals with cameras. Association between cameras and users is done outside of the Cloud VMS. This allows different services, with different authentication and user management work with the same Cloud VMS as on the diagram below:  
![image-20220909-025520.png](https://help.videoexpertsgroup.com/__attachments/a_f56f292a9e256177d6cf8add2aa51cc7d2236bb4938333d64dfb39c9ee96f952/image-20220909-025520.png?cb=c18abfeaeaaa0ad21e489738e853b911)

## White-label Web and Mobile clients (VSaaS)

Cloud VMS comes with a fully white-label Web front-end and mobile apps - a complete Video-Surveillance-as-a-Service. Everything comes with full source code. VSaaS uses ReactJS for the web front-end, Flutter for mobile apps, and NodeJS for the backend that **associates cameras with users**. The Authentication service and the back-end logic can be easily replaced with customer-specific solutions.  
![image-20251029-155659.png](https://help.videoexpertsgroup.com/__attachments/a_f8afefb274060b35ed1b2722ce36b30f70f5ae2af142743069228481b2609392/image-20251029-155659.png?cb=574e95e51da128a10fbd65d66a48f1ef)

White-label Web front-end and mobile apps can be easily modified, from a simple change of logo and colors to a complete rework of the apps to align with customers' service logic.

---
language: "en"
---
# Archive page

The **Archive** page displays all your **archived clips** , which are stored **permanently** unless manually deleted by an **Operator**.  
![image-20260302-203929.png](https://help.videoexpertsgroup.com/__attachments/a_ca344aafdc86e1436afe0244c8a7294b0a55c7a120e35eca176cab0f45875894/image-20260302-203929.png?cb=df5da631b696bcca8549a843aa3244ad)

## **Filtering Clips**

* You can filter archived clips by:

  * **Site**

  * **Camera**

  * **Time**

### **Viewing a Clip**

* Click on a **clip's snapshot** to **watch the clip**.

![image-20260302-203951.png](https://help.videoexpertsgroup.com/__attachments/a_6206c4beb3a7ccf9785e094a56c10a957746459ba4f8a3334d66d7bb2c77b099/image-20260302-203951.png?cb=c7fd77fcbc59e5eb50168ba44a5faa5a)

### **Clip Management Options**

* **Share a Clip** -- Generate a **one-time link** with an **expiration time**. Anyone with this link will be able to watch video in a browser by just clicking on this link.

  * If the password feature is enabled for the system, it will autogenerate a password for the clip link. In order for someone to access the clip, they also need the password for this clip.

![image-20260302-204016.png](https://help.videoexpertsgroup.com/__attachments/a_ffbd05a42ba8c3f54877fce644de485022dd3900f7bf1698e6cbf8a0f2132456/image-20260302-204016.png?cb=da4423a562348efd257b7a797ab125f2)

* **Download a Clip** -- Save the clip as a **standard MP4 file**.

* **Delete a Clip** -- Permanently remove a clip from the archive.

---
language: "en"
---
# Artificial Intelligence (AI)

VXG VMS has a unique pipeline for Cloud AI processing that makes video analytics cost-effective, scalable, and flexible.  
![image-20240725-022757.png](https://help.videoexpertsgroup.com/__attachments/a_c02f3edd7e193f06b9fcff55287b4627f1b5627bc53c6813982978ad8ce5027d/image-20240725-022757.png?cb=e115cc38fd0f907a73042d474f7aa55f)

## Architecture

To make the AI operations cost-efficient, VXG will first filter video by events, such as motion detection. Then sample data - extract short clips and images and then send this to AI engines. This will result in the processing of a fraction of data compared to the input streams.

Cloud VMS provides a variety of pre-processing functions and an interface for integration with Cloud AI engines.

You can connect the same camera to multiple AI engines, or switch between different AI engines based on certain conditions. This provides unmatched flexibility to video analytics.

Event filtering and data sampling are key operations for Cloud video analytics, they make Cloud AI scalable and cost-efficient.  
![image-20210917-000513.png](https://help.videoexpertsgroup.com/__attachments/a_351900eab6dd16c04bd5ccefe58cc91235c03292c039991fd3564f34365cf2f7/image-20210917-000513.png?cb=3b8420662f8ef36201b335672ae78675)

The pipeline has 3 main stages.

### Event filtering

Event filtering is usually done by motion events generated on a camera. It can also be any type of event produced by a camera, external sensor, or software service. VXG Cloud VMS can process millions of events simultaneously and filter data based on selected criteria per camera.

### Video sampling

Sampling is a process of extracting video fragments and/or images from videos that contain the most significant information. VXG Cloud VMS can extract images and clips from 100s of thousands of cameras simultaneously.

### Communicating to AI

After video from a camera is filtered by events and then sampled (extracted images or short clips) we'll get a small fraction of data that will be sent to a Cloud AI and the results of AI processing - metadata will be stored in the VMS.

Cloud AI engines only charges for actually processed data. If after filtering and sampling, we'll get 10 images in a day, we'll only pay for the processing of these 10 images.

For example, when we need to detect a person in a front yard, we'll first filter video by motion, then from each video duration with motion we'll extract several images and send these images to Cloud AI for object detection. If Cloud AI returns "human" as one of the objects then we'll trigger an alarm.

## Functions

AI is used for 2 VMS functions:

1. Real-time Alerts

2. Video Search

### Real-time Alerts

The system will generate real-time alerts based on real-time video analysis using one of the supported AI engines. Alert Rules should be configured to instruct the system when an alert should be triggered, what cameras should be used and what is the criteria. There are 3 types of alerts:

1. Generative AI alerts - based on natural language description.

2. Facial Recognition - based on recognition of known or unknown faces.

3. Object Detection - based on detection of a certain object type.

### Video Search

The system will search video using a natural language prompt using one of the supported Generative AI engines.

---
language: "en"
---
# Audio formats

Usually cameras produce audio in G.711 or AAC format.  

|            | **G.711** | **AAC** |
|  **HLS**   |    no     |   yes   |
|  **DASH**  |    no     |   yes   |
| **WebRTC** |    yes    |   no    |
|  **MP4**   |    yes    |   yes   |
|  **RTSP**  |    yes    |   yes   |
|  **RTMP**  |    yes    |   yes   |
|------------|-----------|---------|

Optionally, Cloud VMS can transcode G.711 to AAC allowing live audio in HLS and DASH formats.

Backward audio is G.711 packaged into the following ONVIF compliant formats that must be supported by a camera

* RTSP over TCP

* RTSP over HTTP

---
language: "en"
---
# Audio from a camera

The support of the audio depends on the audio encoding selected in the camera settings and the protocol used for video streaming. Please refer to the table below.

1. Check that there is a sound when you **playback recorded stream**. If there is no sound then most likely audio is not enabled on the camera.

   1. Go to the Camera UI, find the audio settings and enable audio.

2. If there is audio in recorded stream but no audio in live view then it's most likely because of the **format mismatch**.

|------------------|----------------|-------------------------|---------------------------|
| **Audio format** | **Protocol**   | **Is audio supported?** | **Comments**              |
| AAC              | HLS            | YES                     |                           |
|                  | WebRTC         | YES                     |                           |
|                  | Recorded (mp4) | YES                     |                           |
| G.711            | HLS            | NO                      | HLS doesn't support G.711 |
|                  | WebRTC         | YES                     |                           |
|                  | Recorded (mp4) | YES                     |                           |

a. Try to switch to WebRTC and check if audio is present.

b. Go to the Camera UI, find the audio settings and switch the audio format to AAC. This should make it playable in HLS format.

---
language: "en"
---
# Audio to a camera

The backward audio (audio from the client to the camera) is only supported for G.711 audio encoding, which is the common standard. Depending on the camera type, the backward audio can be passed through RTSP over HTTPS or RTSP over TCP.  

|------------------|-----------------|-------------------------|
| **Audio format** | **Protocol**    | **Is audio supported?** |
| G711             | RTSP over HTTPS | YES                     |
| G711             | RTSP over TCP   | YES                     |

---
language: "en"
---
# AWS services and costs

## AWS cost estimation

The main total AWS cost can be estimated as follows  
***total cost*** = ***connectivity cost*** + ***storage cost*** (optional) ***+ AI cost***(optional)

### Connectivity cost

The connectivity cost includes costs for all services excluding the storage and AI. This provides a connection to a camera, the ability to access, manage, and watch video and receive camera events.

For 24/7 connectivity it is typically

* $1/month per camera.

This cost can be significantly reduced in the case of event-based connectivity, or by using an enhanced Uplink module on cameras. In this case the typical cost is

* $0.1 - $0.3/month per camera

The AWS ***storage cost*** is approximately

* $2/month with H.265, or $3/month with H.264 per camera for 24/7 continuous recording and 30 days retention, or

* $0.5/month per camera for event recording and 30 days retention.

* $0.2 - $0.5/month per camera for AI filtered recordings.

The estimate is based on 1Mbps bitrate for H.264 and 0.65Mbps for H.265 and S3 Infrequent access single zone $10/month per TB.

The ***AI cost*** depends on underlying services and is usually few dollars/month per camera. More details can be found in [AI costs](https://help.videoexpertsgroup.com/kb/ai-costs.md) section.

#### Typical AWS services

The main 3 operational costs are the following:

1. S3 storage

2. EC2 instances

3. RDS database

S3 storage starts from $10/month per TB for One Zone - Infrequent Access storage type, which we recommend for video. 1TB is sufficient for approximately 3 IP cameras with 24/7 - 30 days full framerate recording or 18 IP cameras motion - 30 days recording (see more on S3 pricing [here](https://aws.amazon.com/s3/pricing/)).

One m5.large EC2 instance can serve approximately 100 IP cameras and it costs $69/month for on-demand or $44/month for reserved instances (see more on EC2 pricing [here](https://aws.amazon.com/ec2/pricing/on-demand/) and [here](https://aws.amazon.com/ec2/pricing/reserved-instances/pricing/)).

The RDS database starts from $9/month for instances like db.t3.micro (see more on RDS pricing [here](https://aws.amazon.com/rds/mysql/pricing/)) and can be in hundreds of dollars for multizone instances as the system grows.

Other costs, such as egress (streaming) costs, ELB, and other services are less significant.

#### Idle Cloud VMS

A minimal set of services should be running regardless of connected cameras. The cost per camera will decrease with more cameras connected to the Cloud VMS. See the estimates of the minimal cost and the cost per camera in [AWS first and minimal deployment](https://help.videoexpertsgroup.com/kb/aws-first-and-minimal-deployment.md) and [AWS production deployment](https://help.videoexpertsgroup.com/kb/aws-production-deployment.md) sections.

---
language: "en"
---
# AWS prerequisites

The list of prerequisites for the deployment of Cloud VMS on AWS:

1. **AWS Account ID**

2. Admin level ++**Access Key and Secret Key**++ , or ++**Username and Password**++.

3. **AWS region** (e.g. us-east-1, us-east-2, eu-central, etc.).

## 1. Access to AWS account

VXG will need administrator-level access to the customer's AWS console to set up all necessary components of Cloud VMS. This access can be temporary for deployment only, then it can be switched to read-only access.

To keep your existing AWS infrastructure securely isolated, we recommend creating a separate AWS account and making it a part of your AWS Organization for centralized management and billing consolidation. Please follow the official AWS guide to add a new AWS account under your Organization - <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html>

If you do not have an AWS Organization created yet - please follow this guide - <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html>

Sometimes, there is a need to limit the access of this administrator account to certain resources running in AWS, in this case, please follow this guide - <https://docs.aws.amazon.com/medialive/latest/ug/setting-up-restricted-admin.html>

You can either provide a Username and Password to an admin-level user on your AWS account or create an Access Key and Secret Key as described in the following article [Creating AWS Access Key](https://help.videoexpertsgroup.com/kb/creating-aws-access-key.md)

### 2. AWS Region

Please let us know which AWS Region we should use for deployment - <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html>

---
language: "en"
---
# AWS first and minimal deployment

The first deployment includes all services at the lowest capacity. It's good for evaluation purposes with up to 100 cameras.

Different components can be disabled or re-enabled after the deployment for cost optimization.

Upgrade to the production deployment involves several steps:

1. Selecting required services.

2. Upgrading the services (EC2, DB, etc.) to the production capacity.

3. Fine-tuning based on the use case.

## First deployment

The first deployment and cost. Includes all essential services for evaluation.  

|    |                                   |         **Type**         | **On-demand** |
|----|-----------------------------------|--------------------------|---------------|
| 1  | EC2 - Web                         | t3a.small                | $14           |
| 2  | EC2 - Media                       | t3a.small                | $14           |
| 3  | EC2 - Host                        | t3a.small                | $14           |
| 4  | EC2 - CM                          | t3a.small                | $14           |
| 5  | EC2 - Control                     | t3a.small                | $14           |
| 6  | EC2 - AI Poller                   | t3a.small                | $14           |
| 7  | EC2 - AI Adapter                  | t3a.small                | $14           |
| 8  | EC2 - Uplink                      | t3.small                 | $15           |
| 9  | EC2 - Backup                      | t3a.micro                | $7            |
| 10 | EC2- WebRTC                       | t3a.small                | $14           |
| 11 | EC2 - CloudOne (VSaaS template)   | t2.micro                 | $8            |
| 12 | RDS - VMS                         | db.t3.small (Single AZ)  | $28           |
| 13 | RDS - AI                          | db.t4g.micro (Single AZ) | $14           |
| 14 | RDS - Backup                      | db.t4g.micro (Single AZ) | $14           |
| 15 | AMQ - Backup                      | mq.t3.micro              | $20           |
| 16 | ElastiCache - AI                  | cache.t3.micro           | $12           |
| 17 | ElastiCache - Uplink              | cache.t4g.micro          | $12           |
| 18 | CloudWatch                        | 1                        | $40           |
| 19 | ELB - Web, CM, Uplink, AI, Backup | 5                        | $80           |
| 20 | VPC (new)                         | (number of instances)    | $44           |
| 21 |                                   | **Total**                | **$406**      |

### Minimal deployment

Different services can be disabled and re-enabled after the deployment for cost optimization. These are the main components:

1. Core VMS - recording, streaming, and management.

2. AI services.

3. Backup services.

4. Uplink services.

5. WebRTC service.

The minimal deployment that only includes the core VMS will have the following services and costs  

|    |                                 |        **Type**         | **On-demand** |
|----|---------------------------------|-------------------------|---------------|
| 1  | EC2 - Web                       | t3a.small               | $14           |
| 2  | EC2 - Media                     | t3a.small               | $14           |
| 3  | EC2 - Host                      | t3a.small               | $14           |
| 4  | EC2 - CM                        | t3a.small               | $14           |
| 5  | EC2 - Control                   | t3a.small               | $14           |
| 6  | EC2 - CloudOne (VSaaS template) | t2.micro                | $8            |
| 7  | RDS - VMS                       | db.t3.small (Single AZ) | $28           |
| 8  | CloudWatch                      | 1                       | $40           |
| 9  | ELB - Web, CM                   | 2                       | $32           |
| 10 | VPC (new)                       | (number of instances)   | $24           |
| 11 |                                 | **Total**               | **$202**      |

### Cost per component

|   | **Component**  | **Cost** |
|---|----------------|----------|
| 1 | Core VMS       | $202     |
| 2 | AI service     | $78      |
| 3 | Backup service | $61      |
| 4 | Uplink service | $47      |
| 5 | WebRTC service | $18      |

---
language: "en"
---
# AWS services and purpose

## EC2 instances

Typically you'll see the following EC2 instances on your AWS deployment  

|    |              | **Mandatory** | **Auto-scalable** |         **Purpose**          |   |
|----|--------------|---------------|-------------------|------------------------------|---|
| 1  | Web          | yes           | yes               | REST API                     |   |
| 2  | Media        | yes           | yes               | Recording, streaming         |   |
| 3  | Host         | yes           | yes               | Camera connectivity          |   |
| 4  | CM           | yes           | yes               | Camera manager               |   |
| 5  | Control      | yes           | no                | Resource manager             |   |
| 6  | Backup       | no            | yes               | SD card backup               |   |
| 7  | WebRTC       | no            | yes               | Low latency streaming        |   |
| 8  | AI Adapter   | no            | no                | AI API                       |   |
| 9  | AI Poller    | no            | yes               | AI processing                |   |
| 10 | Uplink       | no            | yes               | Uplink plug-in connectivity  |   |
| 11 | LiveImageGen | no            | yes               | generate images from live    |   |
| 12 | ImageGen     | no            | yes               | generate images from storage |   |

### RDS instances

Plus, the following RDS  

|   |        | **Mandatory** |               **Purpose**                |
|---|--------|---------------|------------------------------------------|
| 1 | VMS    | yes           | Camera, events, storage meta             |
| 2 | AI     | no            | AI meta                                  |
| 3 | Uplink | no            | Manages cameras connected through Uplink |

---
language: "en"
---
# AWS production deployment

## Core VMS deployment

Services and cost  

|    |                                 |        **Type**         | **On-demand** | **Compute saving plan** |
|----|---------------------------------|-------------------------|---------------|-------------------------|
| 1  | EC2 - Web                       | m5.large                | $69           | $42                     |
| 2  | EC2 - Media                     | m5.large                | $69           | $42                     |
| 3  | EC2 - Host                      | m5.large                | $69           | $42                     |
| 4  | EC2 - CM                        | m5.large                | $69           | $42                     |
| 5  | EC2 - Control                   | m5.large                | $69           | $42                     |
| 6  | EC2 - VMS Services              |                         |               |                         |
| 7  | RDS                             | db.t3.large (Single AZ) | $105          | $75                     |
| 8  | EC2 - CloudOne (VSaaS template) | t2.small                | $16           | $10                     |
| 9  | CloudWatch                      | 1                       | $40           | $40                     |
| 10 | ELB - Web, CM                   | 2                       | $32           | $32                     |
| 11 | VPC (new)                       | (number of instances)   | $24           | $24                     |
| 12 |                                 | **Total**               | **$562**      | **$391**                |

### Cameras per instance

VMS - Horizontally scaling  

|   |      **Name**      |  **Type**  | **Number of cameras** |
|---|--------------------|------------|-----------------------|
| 1 | EC2 - Control      | m5a.large  | 10,000                |
| 2 | EC2 - Web          | t3a.large  | 5,000                 |
| 3 | EC2 - Media        | m5a.large  | 160                   |
| 4 | EC2 - Host         | t3a.large  | 100                   |
| 5 | EC2 - CM           | m5a.large  | 400                   |
| 6 | EC2 - WebRTC       | m5a.large  | 5,000                 |
| 7 | EC2 - VMS Services | t2.medium  | 1000                  |
| 8 | EC2 - Uplink       | t3a.small  | 100                   |
| 9 | EC2 - CloudTwo     | m7a.medium | 20,000                |

RDS - vertically scaling  

|   |    **Type**     | **Number of cameras** |
|---|-----------------|-----------------------|
| 1 | db.m8g.large    | \< 5000               |
| 2 | db.m8g.4xlarge  | \<20,000              |
| 3 | db.m8g.8xlarge  | \<50,000              |
| 4 | db.m8g.16xlarge | \<100,000             |

### Example of 200 cameras

|    |                                 |        **Type**         | **Number of instances** | **On-demand** | **Compute saving plan** |
|----|---------------------------------|-------------------------|-------------------------|---------------|-------------------------|
| 1  | EC2 - Web                       | m5.large                | 1                       | $69           | $42                     |
| 2  | EC2 - Media                     | m5.large                | 1                       | $69           | $42                     |
| 3  | EC2 - Host                      | m5.large                | 2                       | $138          | $84                     |
| 4  | EC2 - CM                        | m5.large                | 1                       | $69           | $42                     |
| 5  | EC2 - Control                   | m5.large                | 1                       | $69           | $42                     |
| 6  | RDS                             | db.t3.large (Single AZ) | 1                       | $105          | $75                     |
| 7  | EC2 - CloudOne (VSaaS template) | t2.small                | 1                       | $16           | $10                     |
| 8  | CloudWatch                      | 1                       | $40                     | $40           | $40                     |
| 9  | ELB - Web, CM                   | 2                       | $32                     | $32           | $32                     |
| 10 | VPC (new)                       | (number of instances)   | $28                     | $28           | $28                     |
| 11 |                                 | **Total**               |                         | **$635**      | **$437**                |
| 12 |                                 | **Per camera**          |                         | $3.17         | $2.18                   |

### Example of 1000 cameras

|    |                                 |        **Type**         | **Number of instances** | **On-demand** | **Compute saving plan** |
|----|---------------------------------|-------------------------|-------------------------|---------------|-------------------------|
| 1  | EC2 - Web                       | m5.large                | 1                       | $69           | $42                     |
| 2  | EC2 - Media                     | m5.large                | 5                       | $345          | $210                    |
| 3  | EC2 - Host                      | m5.large                | 10                      | $690          | $420                    |
| 4  | EC2 - CM                        | m5.large                | 3                       | $207          | $126                    |
| 5  | EC2 - Control                   | m5.large                | 1                       | $69           | $42                     |
| 6  | RDS                             | db.t3.large (Single AZ) | 1                       | $105          | $75                     |
| 7  | EC2 - CloudOne (VSaaS template) | t2.small                | 1                       | $16           | $10                     |
| 8  | CloudWatch                      | 1                       | $40                     | $40           | $40                     |
| 9  | ELB - Web, CM                   | 2                       | $32                     | $32           | $32                     |
| 10 | VPC (new)                       | (number of instances)   | $80                     | $80           | $80                     |
| 11 |                                 | **Total**               |                         | **$1,653**    | **$1,077**              |
| 12 |                                 | **Per camera**          |                         | $1.65         | $1.08                   |

---
language: "en"
---
# Axis Camera Uplink Plugin

Moved to [AXIS setup](https://help.videoexpertsgroup.com/kb/axis-setup.md)

---
language: "en"
---
# Axis: connecting through ONVIF

1. When you have connected a new camera to your router, you need to open its web interface - just type in the local IP address of your new camera in a web browser - you can find this local IP address (usually in format 192.168.x.x) in your router among other connected devices.

2. When you have just opened the camera's web interface, you need to activate it first by setting up a password.

   ![axis_0.png](https://help.videoexpertsgroup.com/__attachments/a_210eb7007960c7054b5bbf840e56746e5e00d47069e16c749c83337a3c874f11/axis_0.png?cb=7643c7627001964ab3253ce7936b9223)

3. Login to the camera using the password and navigate to Settings \> System \> ONVIF. Here you will need to create a new operator user account:

   ![axis_1.png](https://help.videoexpertsgroup.com/__attachments/a_5c37e24b5f5792c6ecc104ac846a9c1338d1555230837c98dc49bce2ec92bb23/axis_1.png?cb=546948761808188376a836a34c4efe8b)

4. Now you need to enable PTZ controls on the camera - go to System \> View area and click 'New'. This will create a new view area with the whole screen selected by default:

   ![axis_3.png](https://help.videoexpertsgroup.com/__attachments/a_55be8c652917138dcc1f2dfb1ac7827731507f38f7b9c8d4b960fb6343a308d5/axis_3.png?cb=0e1c817d6df526dad8769f7b5311395d)

   Now click on 'View Area 1', enable PTZ and save changes:

   ![axis_4.png](https://help.videoexpertsgroup.com/__attachments/a_d566bafa628b9ee787d3435ed3865b22ea4c088af11e7313002338c9af3b1b2e/axis_4.png?cb=96899c7a57c1b9010bf2df98f3dd5722)

5. Now you need to set up port forwarding on your router - you can find the step-by-step guide for your router on [this website](https://portforward.com/router.htm). You need to create forwarding rules for HTTP (80) and RTSP (554) ports.

6. Then go to your web client UI and add a new camera: Cameras \> Add camera \> ONVIF. Set the stream parameters - your public IP address, HTTP \& RTSP ports that you have selected in step 5, username and password of the Onvif user you have created in step 3:

   ![cloudone_new_onvif.png](https://help.videoexpertsgroup.com/__attachments/a_23caff9a6c62d3999030db62c580efa4bb45da1bde6058535a2f0fa15b5bc305/cloudone_new_onvif.png?cb=9f47e1beb6474f58e7c02d762b3995e5)

7. Disabling Replay Attack Protection

   In some cases, time synchronization cannot be achieved and disrupts authentication attempts but it is possible to disable Replay Attack Protection. Please use discretion when disabling this feature as it may lead to security risks.

   To disable Replay Attack Protection:

* From the web browser interface, navigate to System Options \> Advanced \> Plain Config.

* From the dropdown menu Select a group of parameters to modify and click WebService.

* Un-check "Enable replay attack protection" and click Save.

  ![axis_6.png](https://help.videoexpertsgroup.com/__attachments/a_039591c012876e864a13f4f2a3c09eb7e2b14a1fe45cce467660768848d4e7ae/axis_6.png?cb=df705425ac13d70f4f650db1ed2d0060)

*** ** * ** ***

*Was tested with the following camera models: M1045-LW, M1054, M3045-V, M3065-V, P3227-LV.*

---
language: "en"
---
# AXIS setup

## Camera pre-setup

Check for [camera firmware updates](https://www.axis.com/support/device-software) and upgrade to the latest version.

1. Find your camera's local IP address. You can use your router's Web UI or a network scanner to find the camera's IP address. For example <https://www.advanced-ip-scanner.com/> is a free tool that will scan your network and show all connected devices:

   ![image-20250105-022203.png](https://help.videoexpertsgroup.com/__attachments/a_83b454fa515b89b355cc88495f8e7d94fe1ec72c6955afba14cb3d4aa8ec4de5/image-20250105-022203.png?cb=321bb504fee10b66c31eb122e91fbd08)

2. Log in to the camera Web UI and go to **System → Network** . Ensure that the hostname is set to the AXIS default hostname, which is `axis-<SERIAL_NUMBER>`.

   For example: `axis-xxxxxxxxxxxx`

   ![image-20250811-145412.png](https://help.videoexpertsgroup.com/__attachments/a_714726aeb2334caa4c2dd5a1c12fc2dbd4e63f12dda852d4fe41e80e7a2df57e/image-20250811-145412.png?cb=f013bebd2e00cf7a8fcbd9ddc96c280a)

3. On the same **Network** page, check if there is a secondary public **DNS server** added, for example **8.8.8.8**

4. The camera will communicate with the cloud using the ONVIF protocol, so we need to create an ONVIF user on the camera. The best option is to add your camera root/admin user to ONVIF users (use the same username and password for Web and ONVIF authorization). Go to **System → ONVIF → Add account** , enter the username and password, and select **Administrator** privileges.

   ![image-20251124-201013.png](https://help.videoexpertsgroup.com/__attachments/a_4a855de5c7b94a40d55991872c64fb6deb3a8ae78a8877ffeae776f478931a35/image-20251124-201013.png?cb=1b88e9dc73c76cf64a5364d201bc37bb)

*** ** * ** ***

## Uplink app installation

1. Go to **Apps → Add app** , upload a plug-in package for the corresponding camera platform and click **Install** *(see the list of models and platforms below)* . The 12+ firmware version will show you the camera's platform and architecture on this page. The latest app version can be downloaded here - <https://downloads.cloud-vms.com/>

   ![image-20251124-203354.png](https://help.videoexpertsgroup.com/__attachments/a_1d449ba84b41f3bfc6200bfc50053ff0ab492f6b30e8eb6bc1d6302da5102c6e/image-20251124-203354.png?cb=81ef0c91d14b2a5c5ab9702b4fea5f3f)

2. Start the application.

   ![image-20251124-204430.png](https://help.videoexpertsgroup.com/__attachments/a_a9823d994cd1e0bdde5fc878f3e16dd3fb73cff0ec58fc063dc02d2cf1bc1672/image-20251124-204430.png?cb=77922f80d13b44c0e9f8f3fcfca4a83e)

3. Copy the camera **Serial Number** and the **MAC address**.  
For AXIS, the MAC address is equal to the serial number formatted as AA:AA:AA:AA:AA:AA

The Serial Number can be found in **Status → Device Info** or on a sticker attached to the camera.  
![image-20250214-210602.png](https://help.videoexpertsgroup.com/__attachments/a_68281b782c9d567cd31c967b4ca83485242a31a1d8e5bf4ea9889ada78612460/image-20250214-210602.png?cb=4ae5bdffd6d428281e8969d1b3c2bb5f)

*** ** * ** ***

## Adding camera to VMS

Follow the instructions on [Settings -\> Cameras page \| Adding a New Camera](https://help.videoexpertsgroup.com/kb/settings-cameras-page.md#Adding-a-New-Camera) page. You will need the following information:

1. **Camera serial number**

2. **Camera MAC address**

3. **Camera ONVIF username and password**

*** ** * ** ***

## Supported platforms

### Uplink packages and corresponding platforms

|           **Platforms**           |         **Uplink app packages**          |
|-----------------------------------|------------------------------------------|
| ARTPEC 8 and 9, S5, S5L, and CV25 | Uplink_App_X_X_X_aarch64.eap             |
| ARTPEC 6 and 7                    | Uplink_App_X_X_X_armv7hf.eap             |
| ARTPEC 5                          | Uplink_App_X_X-X_mipsisa32r2el.eap (EOS) |
| Ambarella S3L / S2L               | Uplink_App_X_X_X_S3L.eap (EOS)           |

### Camera models tested in our lab or remotely at the AXIS lab

| **Model** | **Platform** | **Firmware** |
|-----------|--------------|--------------|
| P3227-LV  | ARTPEC-6/7   |              |
| M3065-V   | S5/S5L/CV25  |              |
| P3248-LVE | ARTPEC-6/7   |              |
| M2025-LE  | ARTPEC-5     |              |
| M3044-V   | S3L          |              |
| P3267-LVE | ARTPEC-8     |              |
| P3275-LVE | ARTPEC-9     |              |

### Camera models that failed tests

None.

### Camera models supported based on information from the vendor

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     **Model**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |          **Platform**           |   **Firmware**    |
|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------|-------------------|
| Q3558-LVE, Q3548-LVE, Q6355-LE, Q6358-LE, Q6411-LE, Q1728, P1475-LE, P1485-LE, P1487-LE, P1488-LE, P3275-LV, P3275-LVE, P3277-LVE, P3278-LVE, P3288-LV                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | ARTPEC-9 (aarch64)              | 12.7.53 or later  |
| Q3538-LVE, Q3536-LVE, P3268-LVE, Q1656-LE, P3265-LVE, P1468-LE, P3268-LV, P3267-LVE, P3267-LV, P1467-LE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | ARTPEC-8 (aarch64)              | 9.50.1.2 or later |
| Q1659, P1367, P1367-E, P1368-E, P3227-LV, P3227-LVE, P3228-LV, P3228-LVE, FA54, Q3517-LV, P1447-LE, P1448-LE, M3057-PLVE, M3058-PLVE, Q1645, Q1647, Q3515-LV, Q3515-LVE, Q3517-LVE, Q1645-LE, Q1647-LE, P1445-LE, Q3518-LVE, Q3517-SLVE, P1445-LE-3, P3807-PVE, P3717-PLE, Q1785-LE, Q1786-LE, Q3527-LVE, Q6215-LE, P1375, P1375-E, M7104, P5655-E, P7304, A8207-VE, Q1700-LE, Q6075-S, P3245-LVE, P3245-VE, P3245-V, P3245-LV, Q1798-LE, M1135, M1135-E, M1137, M1137-E, Q6074, Q6074-E, Q6075-E, M1134, P1378-LE, M3115-LVE, P1378, M3116-LVE, P1377, P1377-LE, P5654-E, M3068-P, M3067-P, P3925-R, V5925, P1455-LE, P3935-LR, Q1615-LE MK III, P3715-PLVE, Q6135-LE, P3247-LV, P3247-LVE, M3057-PLVE MK II, V5938, M3077-PLVE, P3248-LVE, P3255-LVE, P8815-2, Q3517, Q3515, Q3819-PVE, Q6315-LE, Q6078-E, Q6075-SE, Q1615 MK III, FA51, P3925-LRE, M3077-PLE, P3818-PVE, M4308-PLE, Q1715, I8016-LVE, F9111, M5000-G, M5000, P3727-PLE, M1135 Mk II, M1135-E Mk II, M1137 Mk II, M1137-E MK II, XPQ1785, M5075-G, M5075, M5074, F9114-B                                                                                                                                                                                                        | ARTPEC-6/7 (armv7hf)            | 9.50.1.2 or later |
| A8004-VE, A8105-E, F41, F34, F44, M1124, M1124-E, M1125, M1125-E, M2025-LE, M3104-L, M3104-LVE, M3105-L, M3105-LVE, M7011, P1244, P1254, P1264, P1364, P1364-E, P1365, P1365-E, P1435-E, P1435-LE, P3224-LV, P3224-LVE, P3225-LV, P3225-LVE, P3707-PE, P5514, P5514-E, P5515, P5515-E, P5624-E, P5635-E, Q1615, Q1615-E, Q1635, Q1635-E, Q1775, Q1775-E, Q1941-E, Q1942-E, Q3505-V, Q3505-VE, Q3615-VE, Q3617-VE, Q6000-E, Q6052, Q6052-E, Q6054, Q6054-E, Q6055, Q6055-E, Q6114-E, Q6115-E, Q6155-E, V5914, V5915, Q6055-C, P1365 MK II, P1365-E MK II, P1405-LE MK II, P1425-LE MK II, P3224-LV MK II, P3224-LVE MK II, P3224-V MK II, P3224-VE MK II, P3225-LV MK II, P3225-LVE MK II, P3225-V MK II, P3225-VE MK II, P5624-E MK II, P5635-E MK II, Q1615 MK II, Q1615-E MK II, Q3505-SVE MK II, Q3505-V MK II, Q3505-VE MK II, Q6000-E MK II, Q8685-LE, P3375-VE, M5525-E, P3374-V, P3375-V, Q3504-V, Q3504-VE, M5054, M5055, P12 MK II, P1275, P1265, P3374-LV, P3375-LV, P3375-LVE, Q6055-S, Q8685-E, M5065, Q6124-E, Q8641-E, Q8642-E, Q8741-E, Q8741-LE, Q8742-E, P1245, P1280-E, P3904-R MK II, P3905-R MK II, P3915-R MK II, Q6054 MK II, Q6054-E MK II, P3235-LV, P3235-LVE, Q6054-E MKIII, Q6054 MKIII, P1290-E, Q6154-E, Q3505 MK II | ARTPEC-5 (mips)                 | 6.40 or later     |
| M3205-LVE, M3206-LVE, M3064-V, M3065-V, M3066-V, M3075-V, P3719-PLE, Q9216-SLV, Q6010-E, Q6100-E, M4216-LV, M4216-V, M2035-LE, M2036-LE                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | Ambarella S5/S5L/CV25 (aarch64) | 9.50.1.2 or later |
| M2026-LE, M2026-LE MK II, M3015, M3016, M3106-L MK II, M3106-LVE MK II, Q6125-LE, M4206-LV, M4206-V, M1045-LW, M1065-L, M1065-LW, M3044-V, M3044-WV, M3045-V, M3045-WV, M3046-V, M3106-L, M3106-LVE, P9106-V, M3046-1-8MM                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | Ambarella S3L/S2L               | 9.50.1.2 or later |

## Troubleshooting

If the camera is not coming online, please check the following:

* Make sure that you are using the **ONVIF user** credentials that you created on the camera pre-setup step 4.

* Go to **System → Network** and check if there is a secondary DNS server **8.8.8.8** set up.

* If your camera runs on firmware version 12+, then it is possible to run the connectivity test. Go to **Maintenance** and in the **Port check** section, enter the address **camera.vxg.io** , port **443**and check if the connection is successful.

If the camera became online, but you don't see live video, please check the video streaming settings. In the Cloud VMS interface, go to **Settings → Cameras → 3-dot button → Streams** and check that the bitrate is not too high. The exact streaming settings depend on your camera and use case, but the recommended neutral settings are: 1920x1080 resolution, 1024 Kbps bitrate, and 30 fps  
![image-20251125-185900.png](https://help.videoexpertsgroup.com/__attachments/a_e2ec969f981720df11d0ca5b0cb13362576596d5a9ee90cadb43ca9f3d4d2471/image-20251125-185900.png?cb=49aa348d950d8a9c7481aaa790a80cc5)

If you are still experiencing issues, please download the camera logs (**Apps → VXG Uplink App → App log**) and send them to technical support.  
![image-20251124-215110.png](https://help.videoexpertsgroup.com/__attachments/a_ce92c879586640592e011ce092a8d02ffcc647d141150f94664cf23f585ed7f1/image-20251124-215110.png?cb=692754bf38c536491104e8f7eea9b4bb)

---
language: "en"
---
# Broken or green video stream on ONVIF cameras

There could be many reasons causing a broken video stream but usually, this problem happens when the bitrate is too high (or inadequate to resolution) or when the video streaming settings were changed on the camera while it was connected to VXG Cloud or Server.

For any ONVIF IP camera having a such problem, we recommend to:

1. Set average video settings on the camera (2 Mbit bitrate, 1920x1080 resolution, 25 fps, 50 GOP-size)

2. Then initiate the re-connection:

   - go to the camera settings in VXG Server

   - add any symbol to the URL, username, or password to make it incorrect and save

   - revert the change back to the correct credential and save

We recommend using the VXG interface or API to change camera video streaming settings if it is needed instead of changing them in the camera interface.

---
language: "en"
---
# Camera doesn't go online

## Direct IP cameras

1. Make sure that the IP address or domain name and ports are correct.

Use "Test" button on Camera-\>Settings-\>Connection tab of the specific camera  
![image-20250521-201808.png](https://help.videoexpertsgroup.com/__attachments/a_4a55bf184dd8274ce199b501564056a5b3ef4f2a4c9872fa21e2e4ecca2a558d/image-20250521-201808.png?cb=215ed235c22a17b9534db220e5276c9d)

2. Make sure the username and password correct. Connect to the Web UI using the specified IP address and domain name and HTTP port

In the example above it's:

http://vxg.ddns.net:5080

3. Make sure that camera is streaming using H.264 or H.265 codec (not MJPEG)

## Uplink Camera

1. Make sure that the Serial Number and MAC are correct. For some cameras, the Serial Number is same as the MAC address.

2. Make sure the format is the correct. For example, for some camera the Serial Number is same as the MAC address or slightly reformatted. Examples:

S/n: 0046D82B5F81

MAC: 00:46:D8:2B:5F:81

S/n: 00:46:D8:2B:5F:81

MAC: 00:46:D8:2B:5F:81

3. Make sure that both S/n and MAC are in uppercase

4. Make sure that the username and password are correct. If you connect to this camera locally in your network (using it's local IP address) try to open it in a browser and login using the same username and password.

5. If the camera was previously connected to a different account - **the camera must be rebooted** to connect to a new account.

---
language: "en"
---
# Camera Connectivity & Onboarding Guide

To successfully connect cameras to VXG Cloud VMS, certain requirements must be met. These requirements vary based on your selected connection type. Please ensure you have physical access to your cameras and the following information ready before your onboarding meeting.

For available connectivity options, refer to our Knowledge Base:

🔹 [**Connecting Cameras**](https://help.videoexpertsgroup.com/kb/connecting-cameras.md)

🔹 [**Compatible IP Cameras**](https://help.videoexpertsgroup.com/kb/compatible-ip-cameras.md)

## Pre-Onboarding Checklist

Before your scheduled meeting, please review and provide the following details to VXG:  
* [x] Ensure your cameras are ONVIF conformant
* [x] Have physical access to your cameras
* [x] Confirm your desired camera connection type: 1) Camera to Cloud, 2) Cloud Gateway, 3) Direct to Camera (ONVIF or VPN)
* [x] Provide Camera brand(s) and model(s)

*** ** * ** ***

## Camera Connection Methods

### 1. Camera to Cloud

For this option please read the section [Camera to Cloud](https://help.videoexpertsgroup.com/kb/direct-to-cloud.md) and prepare the following.

Information required for installing the Uplink plug-in.

1. Camera model (ex. AXIS P3225, Hanwha QND-7012R, etc.)

2. Camera local IP address (only needed once).

You should be able to open the camera Web UI in your browser to install the Uplink plug-in.  
Please check with the Technical Support if we support **Uplink plug-in**for your camera model prior to the onboarding call.

The following information will be required for each camera:

1. Camera Serial Number.

2. Camera MAC address.

3. Camera username.

4. Camera password.

### 2. Using Gateway

For this option please review the [Using Gateway](https://help.videoexpertsgroup.com/kb/gateway-nvr.md) section.

#### GL.iNET router

In case if you use [GL.iNET](https://www.amazon.com/GL-iNET-GL-MT300N-V2-Repeater-300Mbps-Performance/dp/B073TSK26W/ref=sr_1_5?crid=2HC2GU6HD994Z&keywords=GL.iNET&qid=1697063145&sprefix=gl.inet%2Caps%2C214&sr=8-5) please follow the instruction in[GL.iNET setup](https://help.videoexpertsgroup.com/kb/gl-inet-setup.md) section and provide the following information:

1. Device ID

2. Device MAC

3. Device S/N

##### OpenWRT routers

For other OpenWRT routers please contact Technical Support for instructions.  
Please check with the Technical Support if we support the **Uplink module**for your router model prior to the onboarding call.

##### Docker image

For using a docker image, please have the following information about your x86 or ARM computer running Docker.

* Local IP address of your computer running Docker.

You should be able to connect to this computer by IP and run the Docker console. The Technical support team will walk you through the installation process of the docker image.

##### Cameras

Please provide the following information for each camera that will be connected through the Gateway:

1. Camera local IP address.

2. Camera username

3. Camera password

### 3. Direct ONVIF

Please follow the instruction in [Direct ONVIF](https://help.videoexpertsgroup.com/kb/direct-onvif.md) section and provide the following information for each camera:

1. Public IP address or domain name of your router.

2. HTTP port (forwarded on your router)

3. RTSP port (forwarded on your router)

4. Camera username

5. Camera password

---
language: "en"
---
# Camera Settings

The **Camera Settings** page consists of five tabs, each providing specific configuration options for managing your camera.  
![image-20260302-210532.png](https://help.videoexpertsgroup.com/__attachments/a_026dd4065e05102011db3fef1b05bbcecabe48d954d160488fe8d1590d5c05d0/image-20260302-210532.png?cb=c1826d2a0e12aec8714938cad6e46af0)

## **Tabs Overview**

1. **Info**

   * Displays key details about the camera, including its name, model, and location.

   * The "Advanced" button shows information key for debugging such as camera ID and access token.

2. **Connection**

   * Configure camera **connection parameters**, such as:

     * **IP address and ports** (for network-connected cameras).

     * **Serial Number (S/N) and MAC address** (for Uplink cameras).

3. **Streams**

   * Adjust **video encoding parameters**, including:

     * **Resolution**

     * **Frames per second (FPS)**

     * **Bitrate**

4. **AI Parameters**

   * This is a legacy feature that was discontinued when moving to a single AI model structure. For more information on this tab, you can view

5. **Events**

   * Map **ONVIF Profile S and M events** to standard event names for easier identification.

6. **SD Backup**

   * Enables auto backups from the SD card for this camera.

7. **Services**

   * Manage **virtual plans** assigned to the camera. There are 2 types of plans

     * Retention Plans - sets the amount of time a records are stored

     * AI Alerts - enables the ability to create AI alerts for this camera.

---
language: "en"
---
# Camera test cases

## Functional Test Procedures

**F1. Web User Interface (UI) Accessibility**

1. Navigate to Settings → Cameras, select the desired camera, and access the Camera UI.

2. Verify that the camera's Web UI is accessible and responsive.

![image-20250203-003215.png](https://help.videoexpertsgroup.com/__attachments/a_9aebc95306f1f90872429d417018ddfc93adc0c2f16ec9d2fb8109aa7bc02d72/image-20250203-003215.png?cb=ffa017585b3b6ba9f40662ca3ccc000f)

**F2. Stream Configuration Validation**

1. In Settings → Cameras, select the target camera and open the Streams section.

2. Modify the stream profile and/or adjust stream parameters as required.

3. Confirm via the camera Web UI that the updated stream parameters have been correctly applied.

![image-20250904-150338.png](https://help.videoexpertsgroup.com/__attachments/a_83a13ff8e16b01c3a8e16493654a947f43f3d750e8ef8384e384e8f36664cac9/image-20250904-150338.png?cb=89866aa7757f79939bdfcf8b90903759)

**F3. PTZ (Pan-Tilt-Zoom) Control Verification** *(if supported)*

1. Ensure the "PTZ" icon is enabled in single camera Live View mode.

2. Switch to WebRTC (low latency) mode.

3. Operate PTZ controls and verify correct functionality.

![image-20250904-150433.png](https://help.videoexpertsgroup.com/__attachments/a_efd3c4f20e61450fd2416b4891a7bf656aaf12e39e2d5d0ecf18f5c428bf1147/image-20250904-150433.png?cb=cfd061c15369b501c6b0ae028b280881)

**F4. Two-Way Audio (Backward Audio) Functionality** *(if supported)*

1. Confirm the "microphone" icon is enabled in single camera Live View mode.

2. Switch to WebRTC (low latency) mode.

3. Test backward audio transmission and verify operational integrity.

![image-20250904-151831.png](https://help.videoexpertsgroup.com/__attachments/a_387e837e38076c882637efba723f4714c9db7a8961aa6757438e886d1bf6fcf2/image-20250904-151831.png?cb=69cd8e82577f7f8b3fedab4cdec38b5b)

**F5. SD Card Backup and Cloud Synchronization**

1. Access the camera UI and verify that recording to the SD card is active.

2. Modify the recording plan to motion-based or disable recording for the test camera as needed.

3. In single camera Live View mode, click the SD card icon.

4. Select a time interval containing SD card recordings.

5. Confirm that video data is successfully copied to cloud storage (the timeline indicator should turn white).

6. Playback the video from cloud storage to ensure data integrity.

![image-20250904-150610.png](https://help.videoexpertsgroup.com/__attachments/a_d41fa3d4d4d25a08c11bf101ec116560142ea83fe82b2facfceb3e0a19149ca9/image-20250904-150610.png?cb=0d084929c8ff6700453da8b88f2cc969)

**F6. ONVIF Event Handling**

1. Configure an event (e.g., motion detection) on the camera.

2. Trigger the configured event.

3. Validate event occurrence using ODM (ONVIF Device Manager).

4. Verify the event is logged in the camera's timeline on the monitoring page. Ensure recording is enabled for the camera.

![image-20250904-150711.png](https://help.videoexpertsgroup.com/__attachments/a_cea7375440d166c5bbe4208d0a277cc46d163f0cebe972d1d61c0004478da773/image-20250904-150711.png?cb=929ea81a960bf0decbe293fa4fd4dac8)

*** ** * ** ***

## Stress Test Procedures

**S1. Power Cycling Robustness**

1. Power cycle the camera by disconnecting and reconnecting the power supply.

2. Verify that the camera successfully reconnects and video streaming resumes.

3. Repeat the power cycle process 10 times consecutively.

**S2. Network Disconnection Recovery**

1. Disconnect the Ethernet cable from the PoE switch (simulating Internet loss) and reconnect after 1 minute.

2. Confirm that the camera re-establishes connection and resumes video streaming.

3. Repeat this procedure 10 times.

**S3. Add/Remove Camera Stability**

1. Add a camera via the UI.

2. Wait for the camera to come online.

3. Remove the camera from the system.

4. Restart the application or reboot the camera.

5. Repeat the add/remove cycle 10 times.

*** ** * ** ***

---
language: "en"
---
# Camera Uplink agent

VXG provides a reference code -- [Uplink SDK](https://github.com/VideoExpertsGroup/VXG.Uplink.SDK)and documentation for integration with IP cameras. The code can be integrated with a camera in one of 2 ways:

1. As a camera plug-in, if camera firmware supports an open platform (camera applications or plug-ins).

2. Build-in into camera firmware.

The Uplink agent uses minimal camera resources. It creates a Web Socket Secure (WSS) channel between a camera and the Cloud VMS and tunnels ONVIF and RTSP protocols.

The requirements for interfacing with the camera are very minimal, the Uplink agent should be able to do the following:

1. Retrieve the camera Serial Number.

2. Retrieve the camera Mac Address.

You can find the full source code with build instructions and step-by-step testing instructions in our GitHub repository:

<https://github.com/VideoExpertsGroup/VXG.Uplink.SDK->

The file `vxg_proxy_client.cc` is example code for how to use the VXGUplink library.

For verification, please refer to [Camera test cases](https://help.videoexpertsgroup.com/kb/camera-test-cases.md) page.

---
language: "en"
---
# Camera was online and now it's not

1. Check when the camera went offline in the Health tab.

![image-20250522-182539.png](https://help.videoexpertsgroup.com/__attachments/a_c5bcbd070e355e77b9dd8df193d9417683e5f286f4fefcebd107855ea40ae1c8/image-20250522-182539.png?cb=64f11bfe8c39a57596db76c7565a2152)

2. If you have more than 1 camera at the same site - check if other cameras are online and if they went offline temporarily during the same time.

## Direct IP camera

1. Router changed it's IP address - all cameras from the same location should be down.

   1. Update the IP address for the camera in the Settings-\>Cameras-\>Connection tab.

   2. Use DDNS (like [no-ip.com](http://no-ip.com/)) instead of IP address.

2. Router may reset it's port forwarding table, this happens often after router's f/w upgrade or reset.

   1. Configure port forwarding again, using the same ports.

## Uplink Camera

1. Camera can't reach DNS server

   1. Configure an extra DNS server on the camera, it could be for example 8.8.8.8

2. Uplink plug-in stopped working (unlikely)

   1. Log-in to the camera in the local network and check that the plug-in is installed and running.

   2. Download logs from the camera

   3. Reboot the camera

---
language: "en"
---
# Can't build on Xcode 12.3

You can get the following error when building an app with universal framework from VXG iOS SDK using Xcode 12.3:
> Building for iOS, but the linked and embedded framework 'ffmpeg.framework' was built for iOS + iOS Simulator.

All you need to do is to go to **Build Settings** , set **Yes** to **Validate Workplace** and build the app.  
![image-20210114-221527.png](https://help.videoexpertsgroup.com/__attachments/a_510328955faae9202d0b9b9ee26cebf0813f754c474b30191a5803cfef02000f/image-20210114-221527.png?cb=a0378d60a03ecb8fc7f62718401a49eb)

---
language: "en"
---
# Can't create an alert rule

Trying to create an alert rule but the Cloud AI and GenAI checkboxes are grayed. This is likely because the same camera is used in another Alert Rule. There is a restriction of **1 Alert Rule with AI per camera**.

* Remove this camera from a different Alert Rule.

* Modify the Alert Rule with this camera.

---
language: "en"
---
# Can't login to Web client

1. Make sure that the connection is secure.

If the browser shows that the connection is not secure then the problem is likely in expired SSL certificate and it should be updated by the system administrator.

2. Check that your username and password is correct.

3. Use "Forgot your password" to e-mail a reset password link.

---
language: "en"
---
# Cloud AI engines

The VMS supports the Cloud AI engines of 2 types:

1. Generative AI

2. Image Recognition (Legacy Cloud) AI

## Generative AI

The VMS supports Amazon Bedrock.

Amazon Bedrock is a fully managed service that offers a choice of high-performing foundation models (FMs) from leading AI companies.

The VMS supports 3 different models to give users a choice between the cost and performance:

1. Claud 3.5.

2. Nova Pro.

3. Nova Lite.

For the models descriptions, performance and limitations please refer to Amazon Bedrock materials:

<https://aws.amazon.com/bedrock/>

<https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html>

### Guidelines for safe operations

The VMS supports Amazon Guardrails.

Amazon Bedrock Guardrails provides configurable safeguards for generative AI applications. With a consistent and standard approach used across a wide range of foundation models (FMs) including FMs supported in Amazon Bedrock Guardrails delivers industry-leading safety protections. For more information on Guardrails please refer to Amazon Bedrock documentation:

<https://aws.amazon.com/bedrock/guardrails/>

## Image Recognition (Legacy Cloud) AI

The VMS supports Amazon Rekognition.

For the full list of features please refer to Amazon Rekognition documentation

<https://aws.amazon.com/rekognition/image-features/>

### Other Cloud AI engines

Amazon Rekognition can be replaced with similar engines from other vendors:

Azure Cognitive Services:

<https://azure.microsoft.com/en-us/services/cognitive-services/computer-vision/#features>

Google Vision API:

<https://cloud.google.com/vision#section-11>

---
language: "en"
---
# Cloud configuration

**Step 1:** Stop server if server is currently running.

    user@user:~/VXG-Server$ ./stop.sh

**Step 2:** Modify the contents of the **config.txt** file by updating the **api_uri** and **cm_uri** to the corresponding URIs that belong to your cloud deployment.

    [CloudURL]
    api_uri=https://web.<INSERT CLOUD URL>/
    cm_uri=wss://cam.<INSERT CLOUD URL>:8883/

**Step 3:** Modify the contents of **docker_compose.yml** by adding your cloud deployment's backchannel URL to the environment variables.

    version: "3.3"

    services:
      main:
        image: vxg_server:${SERVER_VERSION:-latest}
        restart: unless-stopped
        privileged: true
        depends_on:
          - storage
          - db
        environment:
          BACK_CHANNEL_SRV: "backchannel.<INSERT CLOUD URL>"

**Step 4:** Start server.

    user@user:~/VXG-Server$ ./start.sh

---
language: "en"
---
# Gateway installation and setup

Cloud Gatewayis a software solution that runs on an on-premise computer and proxies local cameras in the network via ONVIF Uplink to the Cloud.  
* [Installing using Docker](https://help.videoexpertsgroup.com/kb/docker-gateway.md)
* [Installation on GL.iNET router](https://help.videoexpertsgroup.com/kb/gl-inet-router-uplink-plug-in.md)
* [Installation on Mikrotik Router](https://help.videoexpertsgroup.com/kb/installation-on-mikrotik-router.md)
* [Connecting RTSP streams from DVR/NVRs](https://help.videoexpertsgroup.com/kb/connecting-rtsp-camera-using-vxg-gateway.md)

---
language: "en"
---
# (Legacy) Cloud NVR setup

[Cloud Gateway](https://help.videoexpertsgroup.com/kb/cloud-gateway.md) is a newer product that is lightweight, easier to use and it is recommended for all new deployments.

Cloud NVR or **VXG Server**is a software that runs on an on-premise computer and performs the following operations:

1. Connects to IP cameras in a local network.

2. Relays video to the Cloud.

3. Records video on a local hard drive.

* [System requirements](https://help.videoexpertsgroup.com/kb/system-requirements.md)
* [Installation on Linux](https://help.videoexpertsgroup.com/kb/installation-on-linux.md)
* [Storage configuration](https://help.videoexpertsgroup.com/kb/storage-configuration.md)
* [Cloud configuration](https://help.videoexpertsgroup.com/kb/cloud-configuration.md)
* [Configuration of an AWS S3 bucket](https://help.videoexpertsgroup.com/kb/configuration-of-an-aws-s3-bucket.md)
* [Advanced configuration](https://help.videoexpertsgroup.com/kb/advanced-configuration.md)
* [How to connect a VXG Server to the Cloud VMS](https://help.videoexpertsgroup.com/kb/how-to-connect-a-vxg-server-to-web-front-end.md)
* [How to access Server API through the Cloud](https://help.videoexpertsgroup.com/kb/how-to-access-server-api-through-the-cloud.md)
* [How to enable relay to the Cloud using API](https://help.videoexpertsgroup.com/kb/how-to-enable-relay-to-the-cloud-using-api.md)
* [How to set a different disk partition as a VXG Server storage](https://help.videoexpertsgroup.com/kb/how-to-set-a-different-disk-partition-as-a-vxg-ser.md)
* [How to increase the storage space on VMWare for VXG Server](https://help.videoexpertsgroup.com/kb/how-to-increase-the-storage-space-on-vmware-for-vx.md)
* [Connecting Cameras To Cloud NVR](https://help.videoexpertsgroup.com/kb/connecting-cameras-to-vxg-gateway-nvr.md)
* [Cloud NVR curl: command not found](https://help.videoexpertsgroup.com/kb/cloud-nvr-vxg-server-curl-command-not-found.md)
* [Uplink Gateway / Cloud NVR Package](https://help.videoexpertsgroup.com/kb/uplink-gateway-cloud-nvr-package.md)

---
language: "en"
---
# Cloud NVR curl: command not found

If you try to install VXG Cloud NVR on a system that does not have curl, you will see an error message similar to the one below, when you are running `docker_install.sh`:

    DOCKER-COMPOSE IS NOT INSTALLED
    bash: line 7: curl: command not found

In this case, you need to:

* Install curl:

      sudo apt install curl

* If you haven't noticed the initial error and already executed the `start.sh` script, then you need to stop the server:

      sudo ./stop.sh

* Remove the Docker compose components:

      sudo apt remove docker-compose

* Repeat the installation:

      ./docker_install.sh

---
language: "en"
---
# Cloud services

Once cameras are connected to the VXG Cloud VMS platform, the videos can be relayed to various cloud services such as recording, streaming, and video analytics.

![image-20220601-173234.png](https://help.videoexpertsgroup.com/__attachments/a_8c187bcf95acb851ab0e60e8eade604eb91b30e765794c251d1cb87c573a986f/image-20220601-173234.png?cb=b9c06dccad3d6ab6b8cb8f0542a3419f)

## Recording

VXG uses object storage for video recording. For example, Cloud VMS will use AWS S3 for recording when deployed on AWS. If the platform is deployed on Kubernetes, it can use any S3-compatible object storage, such as Wasabi, LivyCloud, or MinIO.

## Streaming

VXG Cloud VMS has an internal fully scalable streaming service streaming data in all standard formats such as HLS, WebRTC, RTMP, and RTSP. VXG connects videos to Content Delivery Networks (CDN) to broadcast to any number of viewers. For example, VXG Cloud VMS will use AWS CloudFront CDN for video broadcasting when deployed on AWS.

## Processing

VXG pre-processes videos to make interfacing with other services, such as Video Analytics very efficient. VXG extracts images or clips from any number of cameras at any rate eventually sending a small fraction of data to analytics services. The platform is pre-integrated with leading Cloud AI services such as Amazon Rekognition, Google Vision AI, Azure Cognitive Services. VXG also hosts an open-source vision AI solution YOLO. VXG offers tools and API for connecting to 3rd party services and performs all sorts of preprocessing to make operations cost-efficient.

## Events

Cloud VMS handles any number of events generated by cameras or external services. It can extract images and clips for each event, forward events and associated data to other services, filter events based on specific criteria, record events and trigger notifications.

Read more about Cloud VMS [functions](https://help.videoexpertsgroup.com/kb/functions.md).

---
language: "en"
---
# Compatible IP cameras

Most IP cameras are designed to be interoperable according to the protocols defined by the [++Open Network Video Interface Forum (ONVIF)++](https://www.onvif.org/). This is what makes it possible to connect your IP cameras to VXG and other hardware and software regardless of the brand or manufacturer.

VXG Cloud VMS is compatible with the standard ONVIF protocol for IP cameras. A camera must support at least the ONVIF Profile S, the standard RTSP protocol, the H.264 codec, and optionally the H.265 codec.

ONVIF conformance is based on the IP camera vendor's self-declaration. VXG Cloud VMS has been successfully tested with a large number of camera brands, models, and firmware versions over the last 8 years, all of which were declared ONVIF conformant by the camera vendors.

VXG states that if a camera is declared ONVIF conformant, then VXG Cloud VMS is compatible with that camera. A list of ONVIF conformant IP cameras can be used as a reference. The official list of ONVIF conformant IP cameras can be obtained from the following URL:

<https://www.onvif.org/conformant-products/>

## Using Direct ONVIF

This method works **with any ONVIF camera**.

### Using Gateway

This method works **with any ONVIF camera**.

### Camera to Cloud

We need to run the Uplink module on a camera for direct camera-to-cloud connectivity. There are 2 options:

#### Plug-ins

Many camera vendors support 3rd party firmware applications (often called apps or plug-ins). This method doesn't require integration with camera firmware and requires little support from a camera vendor. The plug-in can be installed on a camera either using the camera Web UI or using tools provided by the vendor.

Here are the requirements from some of the camera vendors to support this method  

| **Vendor** |                 **Technology**                  |                     **Requirements**                     |
|------------|-------------------------------------------------|----------------------------------------------------------|
| AXIS       | ACAP- AXIS Camera Application Platform          | [AXIS setup](https://help.videoexpertsgroup.com/kb/axis-setup.md)                          |
| Hanwha     | WOP - Wisenet Open Platform                     | [Hanwha setup](https://help.videoexpertsgroup.com/kb/hanwha-setup.md)                      |
| i-Pro      | i-PRO Camera Application Platform               |                                                          |
| Vivotek    | VADP - VIVOTEK Application Development Platform | Requires a volume commitment for maintenance and support |
| Hikvision  | HEOP - Hikvision Embedded Open Platform         | Requires a volume commitment for maintenance and support |
| Dahua      | DHOP - Dahua Hardware Open Platform             | Requires a volume commitment for maintenance and support |

#### Firmware integration

If a camera doesn't support firmware applications, the Uplink module can be integrated with the camera firmware. The camera vendor can do this using the published Uplink module source code, or VXG can assist you with that. Below are vendors who integrated the Uplink module on the firmware level  

| **Vendor**  |           **Requirements**            |
|-------------|---------------------------------------|
| Homaxi      | Fully supported by the vendor         |
| Longse      | Requires coordination with the vendor |
| Uniview     | Requires coordination with the vendor |
| Grandstream | Requires coordination with the vendor |

**Build and update of the firmware requires coordination with a camera vendor.** Only the vendor can rebuild and distribute a special version of the firmware.

[Next Page](https://help.videoexpertsgroup.com/llms-full.txt/1)
