Introduced an Advanced Search feature in the Desktop Client that allows users to filter analytics objects via attributes and object types from Taxonomy.
Updated the CRUD-based HTTP API:
POST /rest/v1/servers/{id}/detach
POST /rest/v1/servers/{id}/reset
POST /rest/v1/servers/{id}/restart
/rest/v1/system/cloudSignature
The following functions have been added:
The new enum field errorId has been added to the object containing the error code and the error message (it is a symbolic representation of the numeric error code).
Updated the sample SDK building scripts:
The default build configuration has been set to “Release”.
For Debug, use the new --debug command-line option. The option --release has been removed.
Metadata SDK:
object_streamer - generates Objects based on a JSON program supplied in the Engine settings.
best_shots - accommodates all variants of Object Best Shot generation.
object_actions - demonstrates handling User-triggered Actions for Analytics Objects.
object_detection - demonstrates life-like scenarios of generating Analytics Objects based on the Base Library of Object Types.
Such declaration is done in Manifests in the typeLibrary section instead of the now-deprecated sections objectTypes and eventTypes (an example is available in Stub Analytics Plugin).
Added the liveOnly and nonIndexable flags to typeLibrary. See details in taxonomy.md. This addresses issues with long-live objects, such as temperature
NOTE: The documentation for Taxonomy language capabilities is going to be provided in the upcoming Meta VMS releases.
ATTENTION: Nx Meta Server contains a library of recommended Object types, so that Plugins can produce Objects of types and with Attributes conforming to a common standard. But for now, this library is not documented. It is going to be published in the upcoming Meta VMS releases.
Stub Analytics Plugin: The Plugin has been reworked into a number of small specialized plugins, all residing in the same dynamic library but representing themselves as independent IPlugin instances (previously demonstrated all together in the object_detection sub-plugin), thus appearing in the GUI as separate plugins and requiring separate turning on. Each of the small plugins is dedicated to a single specific SDK feature, like generating Objects, generating Events, receiving video frames in the particular format, etc:
Analytics Plugins which produce Events and Objects can and should now declare their Attributes in an OOP-style manner, as named classes with support for inheritance. This new feature is called "Taxonomy".
The old object_detection sub-plugin has been renamed to deprecated_object_detection and will be removed in the future versions.
SDK, nx_kit library:
These files are located in the Metadata SDK, as a first step to combining all SDKs into one based on Metadata SDK.
NOTE: This plugin type is currently a work in progress, and may have limitations and/or incompleteness, as well as runtime issues.
debug.h: Added the macro NX_SAVE_BIN() which saves the binary array to a file.
test.h: Added the possibility for the test executable to have extra arguments following --
Added the following functions to nx/kit/utils.h:
stringStartsWith()
stringEndsWith()
trimString()
Added a new plugin type creating stream-based storage. See nx::sdk::archive::IPlugin in src/nx/sdk/archive/i_plugin.h
Introduced a new Nx Meta Server HTTP API designed in RESTful style as opposed to RPC style found in the old Nx Meta Server HTTP API:
The new RESTful API is not complete yet, and will not be complete at the time of the VMS 5.0 release. It is a work in progress, so features missing from the new API are still covered by the old API for now.
The old API is going to be supported for several upcoming VMS releases, although it may become officially deprecated at some point in the future.
Nx Meta Server WebAdmin now includes the documentation for the new and deprecated API.
Added a new “Analytics Object Detected” event to Event Rules.
Object type selection and attributes filter are available for the event.
NOTE: This event is currently under development. Bugs and performance issues may occur.
Added the parameter periodType to /rest/v1/devices/{id}/footage
Added the function /ec2/transactionBus/http and documented it.
IMPROVEMENTS
Video Source/Camera SDK
Added a comment to MediaDataPacket::codecType() explaining that plugged-in cameras cannot supply uncompressed video.
Storage SDK:
Added a clarification for the possible values of StorageFactory::storageType()
Metadata SDK:
Attribute Race has been renamed to Complexion and its value set has been adjusted to match the ONVIF standard.
Attribute Things of Person and Face Object Types have been replaced with more specific attributes like Mask, Glasses, etc.
SDK, nx_kit: IniConfig has a new method getParamTypeAndValue()
Documentation for the Taxonomy (describing attributes of Object types and Event types, and the relations between these types) has been introduced. See src/nx/sdk/analytics/taxonomy.md, or the corresponding page in the Doxygen documentation.
Fixed errata: in the main readme.md, explained that the dynamic library of Stub Analytics Plugin now contains a number of stub plugins for various purposes. The old stub plugin has been split into many, but the readme did not reflect that.
Added a universal unit test which tests the specified dynamic library to be an Analytics Plugin. In the sample building scripts, this test is applied to Sample Analytics Plugin and Stub Analytics Plugin, but can be easily applied by the user to almost any other plugin - just call the test executable with the required parameters; see its command-line help for details.
Added a clarification to IEngine::obtainDeviceAgent() that the null result is not treated as an error.
Added the nx::sdk::IUtilityProvider method to serverId()
Stub Analytics Plugin, Motion sub-plugin: Fixed incorrect behavior when motion cell size is not 1x1.
Taxonomy, Base Library: Renamed the attribute Province to State/Province.
Stub Analytics Plugin, Object Detection and Taxonomy Features sub-plugins: Added settings to individually control generation of various Object types.
Fixed building the SDK with old CMake (starting from 3.3.2).
Base Library of Object Types has the following breaking changes:
In the motion sub-plugin of the Stub Analytics Plugin, the number of Objects generated to visualize the motion grid has been significantly reduced to avoid performance issues. The new Engine settings allow to choose the granularity (resolution) of the grid visualization; the default is generating Objects of size 8x8 grid cells.
Nx Meta Server HTTP API documentation (the API behavior remains intact):
/rest/v1/devices/{id}/footage returns an array of objects rather than an object.
Many functions in the legacy API have been incorrectly documented to return a data object, but actually return an object with the error code, error message, and the data object in the reply field.
Added missing description of enum items.
Added missing Information about the expected values of certain string and integer fields.
Removed non-existing values with symbolic names from the list of values of the deprecated error field in the result of typical functions: only the numeric values can be returned in that field, the symbolic values are returned in the errorId field.
/ec2/saveCameraUserAttributesList
/ec2/saveCameraUserAttributes
/ec2/saveUserRole
/ec2/saveUsers
/ec2/getPredefinedRoles
/ec2/pluginInfo
/api/pluginInfo
/rest/v1/servers/{id}/storages/*/purge
/rest/v1/devices/{deviceId}/bookmarks/{id}
The actual behavior of these three functions was the same in 4.2. Only the documentation itself had to be adjusted in 5.0.
The API documentation has been split into three sections: main (new CRUD-based) API, legacy (4.2-like) non-deprecated (yet) API, and legacy (4.2-like) deprecated API. See the details in the new preamble of the API Documentation page.
/rest/v1/servers/{id}/info: added new fields to the response: synchronizedTimeMs, cloudOwnerId, userProvidedCertificatePem.
Fixed errata in API Documentation:
The new User permission has been added: ownerWithoutFreshSession.
The fields type and isOwner are removed from the User object.
The new field controlPtz has been added to the Layout Item object.
The new fields creationStartTimeMs and creationEndTimeMs have been added to the Bookmark object.
In /rest/v1/devices/*/searches, added a new mode value addFoundDevices.
Added a new errorId value: sessionExpired.
Added a new value to the possible Event Types in related functions: serverCertificateError.
Added a new function /api/overlappedIds to support NVRs with overlapping video archives.
Added the HTTP method PUT to /rest/v1/servers/{serverId}/backupPositions (had only GET).
Added a new function GET /rest/v1/licenseSummaries.
Fixed errata in the Nx Meta Server HTTP API documentation:
Fixed the representation of flag URL parameters (those which either appear in the URL and may have =true which is ignored, or are missing entirely). They were incorrectly shown as booleans with two possible values: true and false, while specifying =false was treated as the presence of the flag.
Fixed the representation of POST function parameters, now they are properly shown as going into the body.
Added missing "Deprecated" prefixes to the documentation of deprecated entities.
Added missing eventType values to the documentation for /ec2/getEventRules
Added missing values to the sortOrder and format parameters to the documentation for /ec2/getEvents
Added missing EventState parameter to the documentation for /ec2/saveEventRule
In functions related to Device parameters, the new value CSF_InvalidScheduleFlag has been introduced for the field statusFlags
In the function /api/ptz, added new values for the command field: RelativeMovePtzCommand, RelativeFocusPtzCommand
In the documentation, the HTTP method of /ec2/manualCamera/stop and /ec2/manualCamera/search was changed from POST to GET (the behavior of the functions was not changed). Rationale: both POST and GET work since 5.0, but because in 4.2 POST did not work, and since 5.0 all these functions are deprecated completely in favor of the new Rest API, it has been decided to keep GET in the old API documentation for consistency with 4.2.
Added documentation for the name parameter of GET /api/showLog.
Added documentation for the function GET /ec2/getEvents
Fixed the set of values in the parameter reply.status.state in the documentation for /api/manualCamera/...
Fixed the set of values in the response parameter status.state for /rest/v1/devices/*/searches
Fixed the set of values for the fields recordingType and metadataTypes in the parameter scheduleTasks for the following functions:
Added missing values for the permissions field to the following functions:
Fixed the set of values for the response parameters status and errorCode to the following functions:
Fixed the set of values for the response parameter state for the following function:
Added missing documentation for the parameters for the following function:
The function /ec2/transactionBus has been deprecated in favor of the new function /ec2/transactionBus/websocket (the deprecated function support expires after 5.0).
Extended Nx Meta Server HTTP API:
Added the following optional parameters to the /api/createEvent function:
event_type
eventResourceId
reasonCode
inputPortId
analyticsEngineId
Added the field locationId to the object that describes a Server for the following functions:
/ec2/getMediaServersEx
/ec2/saveMediaServerUserAttributes
/ec2/saveMediaServerUserAttributesList
/ec2/getFullInfo
/ec2/getStatisticsReport
Added the field locationId in the results of the /ec2/getMediaServerUserAttributesList function.
Added the field model to the object describing a camera in the /api/manualCamera/… functions.
Fixed building Metadata SDK and Video Source SDK with GCC 11.
Some of the deprecated API functions were considered insecure and were disabled, but can be enabled by changing the insecureDeprecatedApiEnabled setting in the Desktop Client (System Settings) or in the Web Admin (Advanced System Settings) (https://localhost:7001/#/settings/advanced). See API Changelog for details. Here is the list:
/api/detachFromCloud
/api/detachFromSystem
/api/mergeSystems
/api/restart
/api/restoreState
/api/saveCloudSystemCredentials
/api/setupCloudSystem
/api/setupLocalSystem
/ec2/dumpDatabase
/ec2/mergeStatus
/ec2/restoreDatabase
All request and response arguments remain unchanged for the /api/wearableCamera/{action} functions and were renamed to /api/virtualCamera/{action}
SDK CHANGES BREAKING PLUGIN COMPILATION:
nx::sdk::Ptr now has operator bool() marked with explicit, which prohibits implicit conversion of nx::sdk::Ptr to bool in contexts other that `if`/`for`/`while`.
nx_kit, IniConfig: Removed support for double params, which caused atomic-related multi-threading issues. Use float instead. Also fixed some multi-threading issues for string values; now old string values are kept in a list and thus are available from any thread forever.
Video Source/Camera SDK:
In camera/camera_plugin.h, the constants MEDIA_DATA_BUFFER_ALIGNMENT and MEDIA_PACKET_BUFFER_PADDING_SIZE have their values changed from 32 to 64.
New values of enum SampleFormat have been added to support signed 64-bit samples: AV_SAMPLE_FMT_S64 and AV_SAMPLE_FMT_S64P
Metadata SDK:
To implement it, the helper class Plugin now has a new virtual function instanceId() which should report pluginId as found in the IPlugin manifest. Constructors of helper classes like Engine and ConsumingDeviceAgent now require to pass the parent object in order to be able to query it for its instanceId
As an example how to migrate the existing code, see the diff for any Stub sub-plugins, e.g. video_frames (as one of the simplest and having no other changes since the previous MetaVMS).
For multi-IPlugin libraries (those exporting createNxPluginByIndex() instead of createNxPlugin()), dump files (captured Manifests, settings, etc.) and plugin logs in stderr now use the particular PluginId instead of the libName which is the same for all sub-plugins.
SDK CHANGES BREAKING PLUGIN BINARY COMPATIBILITY:
Taxonomy (taxonomy.md): Renamed the typeLibrary (previously Object Type) flag hidden to hiddenDerivedType.
REST API BREAKING CHANGES:
A new authentication method has been introduced instead of the now-deprecated HTTP Basic, Digest, and URL-based authentication methods. The deprecated methods can be used only for the users for which they have been explicitly enabled in the settings. Also, some new API functions can only be called with a fresh Session Token Authentication in order to ensure user password confirmation.
The User Role Permission value ownerWithoutFreshSession has been replaced with three new values: requireFreshSession, adminWithFreshSession, and ownerWithFreshSession
See details in API Changelog
The result structure for the functions POST /rest/v1/system/storageEncryption and GET /rest/v1/system/storageEncryption/{ivVect}, has been changed; see the API documentation for details.
See the complete list in API Changelog available in the Nx Meta Server's WebAdmin using the following URL: https://localhost:7001/static/api_changelog.html (substitute localhost:7001 with the appropriate values if needed).
Renamed the values of recordingType parameter used in a number of API functions. Also, the accompanying parameter metadataTypes is now mandatory, and its value metadataAndLow is renamed to metadataAndLowQuality. See the details in the API Changelog in the Nx Meta Server web-admin.
NOTE: These values were already renamed since 4.2, so instead of making a new entry in the API Changelog, the existing entry has been edited to reflect the new names.
Removed /rest/v1/system/reset
Certain features have been deprecated, see details in API Changelog:
A number of legacy API functions have been deprecated in favor of the corresponding new CRUD API functions.
In GET /api/moduleInformation, the flag SF_NewSystem in serverFlags has been deprecated.
In function /ec2/bookmarks, the undocumented filter parameter sparsing has been renamed to minVisibleLengthMs and made documented.
The following newly introduced API functions for Backup have been replaced with the single /rest/v1/servers/{serverId}/backupPositions:
Function /api/getEvents:
The actionParams inner structure has a number of fields removed and some fields added. See the API documentation for the details.
The eventParams inner structure has new values in its eventType field, and the set of values for the field reasonCode has both additions and deletions.
A new parameter has been added: compareString.
KNOWN ISSUES
Analytics:
It is not possible to modify DeviceAgent settings when the corresponding device is in Offline state (e.g. there’s currently no stream from the camera).
When searching for an attribute that changes over time, the corresponding bounding box is shown only for the time periods when the attribute value corresponds to the search string.
Example: If we are searching for an object of the type Car that was moving with a certain value of the Speed text attribute (“60 kmph”, for example), the bounding box for the discovered Car object will be shown only for the moments when the value of the Speed text attribute was equal to “60 kmph”. No bounding box will be shown for the moments when the same Car object had the values of the Speed attribute different from "60 kmph".
Comments
0 comments
Article is closed for comments.