ONVIF Device Reference Design - High Level Design
Make sure you also check Onvif Device Reference Design's companion project: Onvif device server |
ONVIF Device Reference Design |
---|
Project Architecture |
Getting Started |
Reference Designs |
Customizing the Project |
Contact Us |
Now let's take a quick look at the design by going through the main blocks that conform the application.
High Level Design
The following figure shows you a high-level overview of the application:
And the purpose of each block is explained below:
- Base Server: This class abstracts the ONVIF-related functionality by making use of our ONVIF Device Server library. It takes care of Web services, profiles, configurations, and more. See an example here.
- iVideoSourceHandler: interface abstracting the device video source related options.
- JetsonSourceHandler: implementation of the iVideoSourceHandler interface for Jetson boards.
- iVideoEncoderHandler: interface abstracting the device video encoder related options.
- JetsonEncoderHandler: implementation of the iVideoEncoderHandler for Jetson boards.
- iRtspStreamHandler: interface abstracting the stream management.
- GstJetsonStreamHandler: manages the multimedia streams using GStreamer.
- Default Server: This class inherits from Base Server and sets the network interface, port, and factory of the ONVIF Media Client.
- Web Server: this class exposes a REST API that provides the Default Server information and also allows its modification through a web page. See the API here.
- Web Page: this is a web page developed by RidgeRun where you can see and modify some configurations of the Default Server using the REST Api. Flask is used for deploying the web page, so if you want to support this application in production this engine should be changed. Also, for the Web-RestApi communication, we used the example keys provided by OpenSSL. If you wanted to take this application to production, new custom keys should be generated. Feel free to contact the RidgeRun team if you need support.
This design can be used as a starting point for your own designs. Also, additional platforms can be supported by creating custom implementations of the provided interfaces for the given hardware.