NEW FEATURES
- 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 todeprecated_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
insrc/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 toComplexion
and its value set has been adjusted to match the ONVIF standard. - Attribute
Things of Person
andFace Object Types
have been replaced with more specific attributes likeMask
,Glasses
, etc.
- Attribute
- 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 toserverId()
- Stub Analytics Plugin, Motion sub-plugin: Fixed incorrect behavior when motion cell size is not 1x1.
- Taxonomy, Base Library: Renamed the attribute
Province
toState/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 newEngine
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 theerrorId
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
andisOwner
are removed from the User object. - The new field
controlPtz
has been added to the Layout Item object. - The new fields
creationStartTimeMs
andcreationEndTimeMs
have been added to the Bookmark object. - In
/rest/v1/devices/*/searches
, added a newmode
valueaddFoundDevices
. - 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 onlyGET
). - 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
andfalse
, 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
andformat
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 fieldstatusFlags
- In the function
/api/ptz
, added new values for thecommand
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 ofGET /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
andmetadataTypes
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 following optional parameters to the
- 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 hasoperator bool()
marked with explicit, which prohibits implicit conversion ofnx::sdk::Ptr
tobool
in contexts other that `if`/`for`/`while`.- nx_kit, IniConfig: Removed support for
double
params, which caused atomic-related multi-threading issues. Usefloat
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 constantsMEDIA_DATA_BUFFER_ALIGNMENT
andMEDIA_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
andAV_SAMPLE_FMT_S64P
- Metadata SDK:
- To implement it, the helper class
Plugin
now has a new virtual functioninstanceId()
which should reportpluginId
as found in theIPlugin
manifest. Constructors of helper classes likeEngine
andConsumingDeviceAgent
now require to pass the parent object in order to be able to query it for itsinstanceId
- 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).
- To implement it, the helper class
- For multi-IPlugin libraries (those exporting
createNxPluginByIndex()
instead ofcreateNxPlugin()
), 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) flaghidden
tohiddenDerivedType
.
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
, andownerWithFreshSession
- See details in API Changelog
- The result structure for the functions
POST /rest/v1/system/storageEncryption
andGET /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
(substitutelocalhost:7001
with the appropriate values if needed). - Renamed the values of
recordingType
parameter used in a number of API functions. Also, the accompanying parametermetadataTypes
is now mandatory, and its valuemetadataAndLow
is renamed tometadataAndLowQuality
. 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 flagSF_NewSystem
inserverFlags
has been deprecated. - In function
/ec2/bookmarks
, the undocumented filter parametersparsing
has been renamed tominVisibleLengthMs
and made documented./rest/v1/servers/{serverId}/backupPositions/{deviceId}
/rest/v1/servers/{serverId}/actualBackupPosition/{deviceId}
- 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 itseventType
field, and the set of values for the fieldreasonCode
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 theSpeed
text attribute (“60 kmph”, for example), the bounding box for the discoveredCar
object will be shown only for the moments when the value of theSpeed
text attribute was equal to “60 kmph”. No bounding box will be shown for the moments when the sameCar
object had the values of theSpeed
attribute different from "60 kmph".
- Example: If we are searching for an object of the type
Comments
0 comments
Article is closed for comments.