Viewing footage exported via 2020R1 SDK fails when using 2019R3 or older Smart Client

Hello,

We have an application that we use to export footage for Milestone using the SDK (in Milestone .blk format), where it gets used with many different versions of Milestone. Previously we have had no issues, however now that I have recompiled the application using the 2020R1 SDK the export no longer work on versions of Milestone < 2020R1.

When attempting to open the exported project with the 2019R3 Smart Client the following exception gets thrown:

************** Exception Text **************
 
************** Outer Exception **************
Exception type:System.Runtime.InteropServices.SEHException
Exception message:External component has thrown an exception.
Exception source:VideoOS.DatabaseUtility.MediaStorage
Exception Target Site: NmDatabase.Utility.CmBankInfo.IsEncrypted
   at NmDatabase.Utility.CmBankInfo.IsEncrypted(CmBankInfo* )
   at VideoOS.RemoteClient.Application.Managers.FileManagers.FileManagerOffline.GetPasswordProtectedSources()
   at VideoOS.RemoteClient.Application.Managers.FileManagers.FileManagerOffline.get_ProjectFileProtectionLevel()
   at VideoOS.RemoteClient.Application.Managers.Offline.OfflineLoginManager..ctor(IControllerManager controllerManager, IServerConfiguration serverConfig, FrontPageModel frontPageModel)
   at VideoOS.RemoteClient.Application.Managers.OfflineManager.Login(Boolean firstLogin)
   at VideoOS.RemoteClient.Application.Application.Login(Boolean firstLogin)
   at VideoOS.RemoteClient.Application.Application.Start()
   at VideoOS.RemoteClient.MainApp.MainWindow.Start()
   at VideoOS.RemoteClient.MainApp.App.OnStartup(StartupEventArgs e)
   at System.Windows.Application.<.ctor>b__1_0(Object unused)
   at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
   at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)

If the same export is opened in 2020R1 Smart Client it works as expected. I have tried exporting with and without encryption but there appears to be no difference.

Thanks,

Andrew

It is a link for the manual regarding this question, please see this -

https://doc.milestonesys.com/2020R1/en-US/standard_features/sf_sc/sf_common/sc_exportingevidence.htm?tocpath=XProtect%20Smart%20Client%7cXProtect%20Smart%20Client%7cOperation%7c_____7#XProtectformatsettings

Hello Rie,

Thank you for your reply.

I’m sorry if I am missing something in the link you provided, but I can’t see where it explains why I would be receiving the exception I am when trying to view an export using the 2019 R3 Smart Client. The issue I am having is that if I create an application with the 2020 R1 SDK and connect it to a 2019 R3 or lower Milestone Server, I cannot view the exported footage with on the 2019R3 machine. Previously this has worked fine.

Any further help would be appreciated.

Thanks,

Andrew

The link is to the Smart Client manual and explains how an export made with the 2020R1 Smart Client has to be opened with a a 2020R1 Smart Client (or newer). What is not mentioned is that the MIP SDK uses the same methods internally as does the Smart Client. The effect is that an export made with MIP SDK 2020R1 will need to be opened by Smart Client 2020R1 or newer.

Thanks for the clarification, I see that now. Do you know if an application compiled with the 2019 R3 SDK would continue to work with a 2020 R1 install of Milestone, as ideally a single version of the application would work with 2019/2020.

Could you tell me what has changed that has caused this loss of backwards compatibility?

Yes, a solution compiled with one version of the MIP SDK will in general be working for future versions of XProtect. This is the knowledge base article on the subject..

https://developer.milestonesys.com/s/article/about-MIP-SDK-compatibility-with-XProtect-product-versions

The database format has been changed, I believe it was a change to improve security but I was unable to confirm this so this is only a guess on my part.

We generally very strongly recommend using the newest possible MIP SDK as this is also to way to get improvements and bugfixes, if you for a time want to keep your solution in an older version it is possible for you to do so.

Thank you for all the helpful information. We will most likely go ahead using the latest SDK as recommended and look at updating the installed Smart Clients to 2020 R1 where possible.