How to check camera recording status

I am developing a protocol integration that fits into an existing Linux-based Python application. I am testing against a C-Code server, XProtect Essential+

I am trying to determine if a specific camera is connected and recording, and is available to request video clips from.

I have four main questions:

  1. What API subset should I be using?
  2. What is the format for a request to that API?
  3. What is the order of operations to verify credentials, find the camera, request the status, etc?
  4. What do the values returned actually mean, in the context of camera and VMS operation?

Status Soap protocol towards the recording server(s).

See - http://doc.developer.milestonesys.com/html/index.html?base=statushelp/index.html&tree=tree_3.html

Make a login on the management server using Server Soap Protocol, get configuration to find the cameras, recording server(s), then use Status Soap.

http://doc.developer.milestonesys.com/html/index.html?base=serversoaphelp/index.html&tree=tree_3.html

http://doc.developer.milestonesys.com/html/index.html?base=gettingstarted/intro_soap_protocols.html&tree=tree_3.html

-it might be useful to explore the sample TCPVideoViewer which does a login (but does not use Status Soap)- http://download.milestonesys.com/MIPSDK/Samples/protocol_MIPSDK2019R1_BetaSamples.zip

The values should be self-explaining, try to run the Status Soap samples; Status Console, Status Session Console and System Status Client Console

http://doc.developer.milestonesys.com/html/index.html?base=samples/systemstatusclientconsole.html&tree=tree_2.html

Thank you for the guidance, i am now able to send Status SOAP Requests.

I am having some difficulty determining which specific request will actually give my the information that I want.

“GetCurrentDeviceStatus” seems to return details for all the available camera feeds, but the “Recording” field says “false” for each camera. I have checked in the Management Client and the camera’s native interface and both places confirm that the camera is recording.

Below is the response I get from the “GetCurrentDeviceStatus”.

Is there a different request I should be looking at that will tell me if the camera is recording?

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetCurrentDeviceStatusResponse xmlns="http://videoos.net/2/XProtectCSRecorderStatus2">
      <GetCurrentDeviceStatusResult>
        <CameraDeviceStatusArray>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2327178Z</Time>
            <DeviceId>07347210-82ed-4f3a-acc7-ab549163cc96</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>3b53a69b-cae7-4df9-8d15-113275a6b609</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>51a06f9b-5b12-44df-80d3-937ea948e799</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>53b87ef2-7ad8-44eb-bc1e-64360ef10507</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>false</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>false</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>66c4963f-6138-4603-abb6-9445a42d07a3</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>6773f7d0-6049-406f-baa6-86e3ed73b217</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>cf335d6d-50a9-4d5b-a6ff-02cafb976895</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
          <CameraDeviceStatus>
            <Time>2018-12-11T23:03:23.2342176Z</Time>
            <DeviceId>cf66d6fc-a993-4f68-8207-2de13d91e657</DeviceId>
            <IsChange>false</IsChange>
            <Enabled>true</Enabled>
            <Started>true</Started>
            <Error>true</Error>
            <ErrorNotLicensed>false</ErrorNotLicensed>
            <ErrorNoConnection>true</ErrorNoConnection>
            <Recording>false</Recording>
            <DbMoveInProgress>false</DbMoveInProgress>
            <ErrorOverflow>false</ErrorOverflow>
            <ErrorWritingGop>false</ErrorWritingGop>
            <DbRepairInProgress>false</DbRepairInProgress>
            <Motion>false</Motion>
          </CameraDeviceStatus>
        </CameraDeviceStatusArray>
        <InputDeviceStatusArray />
        <OutputDeviceStatusArray />
        <MicrophoneDeviceStatusArray />
        <SpeakerDeviceStatusArray />
        <MetadataDeviceStatusArray />
        <EventStatusArray />
        <HardwareStatusArray />
      </GetCurrentDeviceStatusResult>
    </GetCurrentDeviceStatusResponse>
  </soap:Body>
</soap:Envelope>

I see this is unanswered, I hope you might have found a way..

As you have an error (true) I believe the recording information is not to be trusted.

I wonder if you see this on perfectly working cameras where there is no error situation? Might you be able to troubleshoot the recording server remove the errors and see the correct status on recording?

I reposted my follow up as a separate questions but was ultimately unsuccessful in extracting the information I want. The camera seemed to be configured to only save recordings when motion was detected, rather than continuously, which may have had something to do with it. I ultimately gave up on this element of my design.