If the Zoom VideoSDK DLLs and resources (v1.8.5) and the NDI library Processing.NDI.Lib.x64.dll (v5.6.0) all reside together in the application folder, the Video SDK will attempt to load the Processing.NDI.Lib.x64.dll in the application folder instead of one offered by the normal NDI install. This leads to an show stopping alert dialog that says:
videosdk.dll is using Processing.NDI.Lib.x64.dll from an unknown publisher. Are you sure you want to run this software?
To avoid, you can package the all VideoSDK resources in a folder inside the application folder (aka a side-by-side assembly) and to reference this folder using a manifest entry in your application. Becaues the videosdk.dll does not reside at the same level as the Processing.NDI.Lib.x64.dll, the VideoSDK will use the Processing.NDI.Lib.x64.dll version it references.
STEP 1: Organize the structure of the application folder
You need to delete all Video SDK DLLs and resources from the application folder where your app resides; at the time of this writing, these items are:
aomagent.dll
aomhost64.exe
cares.dll
clDNN64.dll
Cmmlib.dll
CptShare.dll
crashrpt_lang.ini
dvf.dll
libcml.dll
libcrypto-1_1.dll
libmpg123.dll
libssl-1_1.dll
mcm.dll
mkldnn.dll
nydus.dll
ssb_sdk.dll
tp.dll
turbojpeg.dll
util.dll
videosdk.dll
viper.dll
XmppDll.dll
zCrashReport64.dll
zCrashReport64.exe
zcscpthost.exe
zData.dll
zKBCrypto.dll
zlt.dll
zoombase_crypto_shared.dll
zoom_meeting_bridge.dll
zVideoApp.dll
zWebService.dll
STEP 2: Create the ZMVideoSDK folder to hold the VideoSDK DLLs and resources
You will need a folder alongside your application to hold the VideoSDK DLLs and resources as a side-by-side assembly. Create this folder so that your application folder looks like this:
C:\MyApp
– MyApp.exe
– Processing.NDI.Lib.x64.dll
– ZMVideoSDK (folder; empty at this point)
– other application resources
STEP 3: Create a manifest file for the ZMVideoSDK folder
Next you need to create a manifest file for the ZMVideoSDK folder called ZMVideoSDK.manifest. This needs to list all DLLs and other resources used by the Zoom Video SDK. At the time of this writing, this is the text that should be in the ZMVideoSDK.manifest file. If Zoom adds or removes DLLs or resources in a subsequent version of the SDK, you will need to update this list. A clever solution would be to generate this file in your script that copies DLLs and resources from the latest Video SDK version.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="Win32" processorArchitecture="AMD64" name="ZMVideoSDK" version="1.0.0.0" />
<file name="aomagent.dll" />
<file name="aomhost64.exe" />
<file name="cares.dll" />
<file name="clDNN64.dll" />
<file name="Cmmlib.dll" />
<file name="CptShare.dll" />
<file name="crashrpt_lang.ini" />
<file name="dvf.dll" />
<file name="libcml.dll" />
<file name="libcrypto-1_1.dll" />
<file name="libmpg123.dll" />
<file name="libssl-1_1.dll" />
<file name="mcm.dll" />
<file name="mkldnn.dll" />
<file name="nydus.dll" />
<file name="ssb_sdk.dll" />
<file name="tp.dll" />
<file name="turbojpeg.dll" />
<file name="util.dll" />
<file name="videosdk.dll" />
<file name="viper.dll" />
<file name="XmppDll.dll" />
<file name="zCrashReport64.dll" />
<file name="zCrashReport64.exe" />
<file name="zcscpthost.exe" />
<file name="zData.dll" />
<file name="zKBCrypto.dll" />
<file name="zlt.dll" />
<file name="zoombase_crypto_shared.dll" />
<file name="zoom_meeting_bridge.dll" />
<file name="zVideoApp.dll" />
<file name="zWebService.dll" />
</assembly>
STEP 4: Copy all Zoom VideoSDK DLLs and Resources, along with the ZMVideoSDK.manifest File, into the ZMVideoSDK folder
Ideally, you will have a script that will copy all the Zoom VideoSDK DLLs and Resources, along with the new ZMVideoSDK.manifest file to the newly created ZMVideoSDK folder inside your application folder. You can, of course, copy these files manually if you don’t have a script.
STEP 5: Reference the Manifest in Your Application
Somewhere in your app, add the following line to ensure the ZMVideoSDK assembly is referenced by your app.
#pragma comment(linker, "\"/manifestdependency:type='Win32' name='ZMVideoSDK' version='1.0.0.0' processorArchitecture='AMD64' language='*'\"")
You can then build and link the project.
CONCLUSION
For our application, the VideoSDK is used by plugin DLLs that are loaded by the main application. For our case, the steps above allowed our app and its plugins to use the VideoSDK without the conflict alert being displayed.