Is the Nx Cloud up? Visit our Status Page for the current health and performance of the Nx Cloud.

Status Page

expected lifecycle for an old-SDK DtsArchiveReader

Comments

2 comments

  • Anderson Chang
    • Network Optix team

    Hi Richard,

    Thanks for the detailed report with a clear timeline of the processes.
    This makes it easier for us to understand the issue.

    Please find the replies to your questions below.

    1. Is the described Playback -> Live -> Playback behaviour a known issue in Nx Witness Media Server 6.1.2.42921 when using the old Server Plugin SDK DtsArchiveReader bridge?

    This issue has not been reported.
    We find the possible cause in the 6.1.2.42921, and will forward this issue to our dev team for further inspection.
     

    2. When Nx releases its external StreamReader reference on the switch to Live but retains the DtsArchiveReader, what is the expected public SDK sequence for the plugin to resume archive playback on a later seek?

    At this time there is no such sequence. When the problem occurs, the server has no StreamReader to poll, and the bridge does not call getStreamReader() again. Nothing the plugin returns from seek() can change this.

     

    3. After a successful seek() on an existing DtsArchiveReader, should Media Server call getStreamReader() again, or should it automatically resume polling the previously returned StreamReader? In the failing state neither happens.

    The server should call getStreamReader() again. The bridge calls it only from its open step, which runs DtsArchiveReader::open() and then getStreamReader().
     

    4. Is there a supported plugin-side API call, return code, property, command, or sequence that explicitly resets/re-arms/reopens the old-SDK archive delegate?

    No. The seek() return codes are converted as follows:
    - NX_NO_ERROR returns the selected position.
    - NX_NO_DATA returns "end of archive" (or "start of archive" in reverse mode).
    - Any other code returns "no position".

    None of these codes makes the server reopen the delegate or replace it.
     

    5. We observed the internal symbol name QnAbstractArchiveDelegate::reopen() while inspecting the server binary. Is there a public old-SDK mechanism that maps to this behaviour, or is this entirely internal?

    This function is internal, and the old-SDK archive delegate does not implement it. The server also does not call it in this playback path.
     

    6. Is there a server diagnostic/INI setting that enables detailed logging for the old-SDK camera/archive adapter so we can see why the delegate remains at EOF after a successful plugin seek?

    You can set the Server log level to verbose with filters for QnArchiveStreamReader and QnRtspConnectionProcessor. These logs show the provider stop and restart, the seeks, and the "EOF from delegate" line.
     

    7. If this is a limitation or bug in the old SDK bridge, is there a recommended newer SDK/API for third-party remote archive playback, and is there a migration example for a DtsArchiveReader-style integration?

    Starting with version 6.0, the Video Source, Storage and Cloud Storage SDKs are part of one Server Plugin SDK. For device integration, that SDK still uses the nxcip interfaces, and DtsArchiveReader is the only interface for archive playback from a camera or an NVR. 


    Thank you.

     

    0
  • Richard Bell

     Thank you for the reply

     

    This clarifies the behaviour we saw, your explanation matches what we observed in the diagnostic logs: after switching to Live, the external StreamReader reference is released while the DtsArchiveReader remains alive etc. 

    A later seek() succeeds, but because the bridge does not execute its open step again, getStreamReader() is never called and Media Server has no StreamReader to poll.

    As you have confirmed that there is no plugin-side API, return code or reopen sequence capable of restoring the delegate, I will leave the plugin implementation unchanged and log it on my side as the only issue/bug found during testing.

    Thanks again for escalating this to the development team, hopefully they can see a workaround or add a way for us to reset the process and request a new one, i could see ONVIF profile G supported edge playback but i dont have a camera to test if that has the same playback/live/playback issue.

    It's a shame as this is the only bug/issue stopping us from releasing the plugin for full HikVision camera edge and NVR storage support, but i have some internal politics to deal with before we can release it anyway, so hopefully there is a resolution for the playback issue by the time i'm ready to release it.

     

    Best Regards

    Richard

     

    0

Please sign in to leave a comment.