c++soaponvif

How to retrieve the records list on a device with ONVIF profile G?


On a network camera I've many records. Each record has many tracks (audio, video and Metadata). To create a new record on a camera, you must restart the recording.

With ONVIF profile G I would like to retrieve each record, so I use the GetMediaAttributes method in a C++ code.

#include "soapSearchBindingProxy.h"
std::unique_ptr<SearchBindingProxy> deviceSearchBindingProxy = std::unique_ptr<SearchBindingProxy>(new SearchBindingProxy());
_tse__GetMediaAttributes GetMediaAttributes_tmp;
_tse__GetMediaAttributesResponse GetMediaAttributesResponse_tmp;

GetMediaAttributes_tmp.Time = 0;//from beginning

deviceSearchBindingProxy->GetMediaAttributes(&GetMediaAttributes_tmp, GetMediaAttributesResponse_tmp);

the response doesn't give me all the record list, it contains just 1 record. The records on camera are melted in that record, but I need to retrieve each record separately.

Is my implementation correct to retrieve the list of records?


Solution

  • I've tested 3 cameras from different manufacturers recently and I believe the only way is to retrieve recorded events and then use RTSP to get audio/video fragments using timestamps obtained from this events. Event types vary between cameras.

    All 3 cameras had also their own custom APIs to search and retrieve recordings (and this was the way distributors were recommending), but this is not related to ONVIF.