This MVP release provides a complete full-stack solution for managing action mappings in Geutebruck's GeViScope and GeViSoft video surveillance systems. ## Features ### Flutter Web Application (Port 8081) - Modern, responsive UI for managing action mappings - Action picker dialog with full parameter configuration - Support for both GSC (GeViScope) and G-Core server actions - Consistent UI for input and output actions with edit/delete capabilities - Real-time action mapping creation, editing, and deletion - Server categorization (GSC: prefix for GeViScope, G-Core: prefix for G-Core servers) ### FastAPI REST Backend (Port 8000) - RESTful API for action mapping CRUD operations - Action template service with comprehensive action catalog (247 actions) - Server management (G-Core and GeViScope servers) - Configuration tree reading and writing - JWT authentication with role-based access control - PostgreSQL database integration ### C# SDK Bridge (gRPC, Port 50051) - Native integration with GeViSoft SDK (GeViProcAPINET_4_0.dll) - Action mapping creation with correct binary format - Support for GSC and G-Core action types - Proper Camera parameter inclusion in action strings (fixes CrossSwitch bug) - Action ID lookup table with server-specific action IDs - Configuration reading/writing via SetupClient ## Bug Fixes - **CrossSwitch Bug**: GSC and G-Core actions now correctly display camera/PTZ head parameters in GeViSet - Action strings now include Camera parameter: `@ PanLeft (Comment: "", Camera: 101028)` - Proper filter flags and VideoInput=0 for action mappings - Correct action ID assignment (4198 for GSC, 9294 for G-Core PanLeft) ## Technical Stack - **Frontend**: Flutter Web, Dart, Dio HTTP client - **Backend**: Python FastAPI, PostgreSQL, Redis - **SDK Bridge**: C# .NET 8.0, gRPC, GeViSoft SDK - **Authentication**: JWT tokens - **Configuration**: GeViSoft .set files (binary format) ## Credentials - GeViSoft/GeViScope: username=sysadmin, password=masterkey - Default admin: username=admin, password=admin123 ## Deployment All services run on localhost: - Flutter Web: http://localhost:8081 - FastAPI: http://localhost:8000 - SDK Bridge gRPC: localhost:50051 - GeViServer: localhost (default port) Generated with Claude Code (https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
394 lines
21 KiB
Plaintext
394 lines
21 KiB
Plaintext
================================================================================
|
||
GeViScope_SDK.pdf - Pages 21 to 30
|
||
================================================================================
|
||
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 21
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
Backgroundinformation
|
||
InGeViScopesystemsactionsareusedtocommunicatebetweentheGeViScopeserver
|
||
andanyclientapplication.Allavailableactionscanbedividedintothreegroups:
|
||
Notificationactions(forexample“UserLogin”),commandactions(forexample“Viewercon-
|
||
nectlive”)andlogicalactions(theseactionsarenotdirectlycreatedbytheGeViScope
|
||
serverandtheydon’tdirectlyresultinanyreactionintheGeViScopeserver,forexample
|
||
“Customaction”).
|
||
Allactionsaregroupedindifferentcategories.Thecategory“Vieweractions”containsall
|
||
actionsthatarerelevantforremotecontrollingGSCView.
|
||
TogetnotificationsaboutGSCViewactivities,oneoftheoptions“Sendnotificationactions”
|
||
intheprofilemanagerofGSCViewhastobeset.Allpossiblenotificationactionsarecol-
|
||
lectedintheactioncategory“Viewernotifications”.
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 22
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
Moredetailedinformationaboutallavailableactionscanbefoundinthetopic“Actiondoc-
|
||
umentation”(especiallyVieweractionsandViewernotifications).
|
||
PleasebeawareofthefactthatGSCViewisworkinginanasynchronousmode.Ifacustom
|
||
applicationsendsanaction,thatdependsontheresultoftheprevioussentactiontheremay
|
||
betheneedforinsertingapausetimebeforesendingthesecondaction(e.g.sendaction
|
||
“Viewerconnectlive”,waitonesecond,sendaction“Viewerprintpicture”).GSCViewdoes
|
||
nothaveaninputqueueforremotecontrolactions.
|
||
Supporteddevelopmentplatforms
|
||
TheSDKisdesignedandtestedtobeusedwiththefollowingdevelopmentenvironments:
|
||
l CodeGearC++Builder6©
|
||
l CodeGearC++Builder2009©
|
||
l CodeGearDelphi7©
|
||
l CodeGearDelphi2005©
|
||
l CodeGearDelphi2009©
|
||
l MicrosoftVisualStudio2005,C++,MFC©
|
||
l MicrosoftVisualStudio2008,C++,MFC©
|
||
l MicrosoftVisualStudio2005,C++/CLI©
|
||
l Microsoft.NET ©(wrapperclassesarecontainedinthe“Examples”folder)
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 23
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
Guidelinesandhints
|
||
Introduction
|
||
ItisrecommendedtobefamiliarwiththeGeViScopesystemandthepossibilitiesofmodern
|
||
videosurveillancesystemsandvideomanagementsystems.Beforestartingprogramming
|
||
yourcustomGeViScopeclientyoushouldknowbasicsofvideoformats,videocom-
|
||
pression,GeViScopeevents,GeViScopeactionsandtheprinciplesofaclient-servernet-
|
||
workcommunication.
|
||
ThefollowingsectionssupportyouwithsomesuggestionsandhintsaboutusingtheSDK
|
||
interfaces.
|
||
Generalhints
|
||
IfyourapplicationneedstolistentoeventsandactionspleaseusetheapplicationPLCSim-
|
||
ulator.exethatyoucanfindonYourGeViScopedevice.Thissoftwareallowsyoutostart
|
||
actionsandeventswhichmightbeusedbyyourprogram.
|
||
YoushouldworkanddosometestswitharealGeViScopedeviceorwiththevirtualtest
|
||
environmentbelongingtotheSDK.Createsomeeventsandactions,startthemwith
|
||
PLCSimulator.exe.
|
||
StartingthesetupsoftwareGSCSetup.exewiththecommandlineparameter/utilitieswill
|
||
offeryouthepossibilitytoopenDBITesttodiscoverthedatabasestructureandtoevaluate
|
||
andtestselectstatementsagainstthedatabase.Additionallythistooloffersyouthepos-
|
||
sibilitytostarttheregistryeditortoevaluatetheinternalstructureoftheGeViScopesetup.
|
||
MakesuretodeleteallobjectsthatarecreatedinsideofDLLs.Theobjects
|
||
themselvesshouldalwaysofferaDestroy()orFree()methodforthat.
|
||
Callbackfunctions,whicharecalledoutoftheSDKDLLs,arecalledfromthreads,which
|
||
werecreatedinsidetheDLLs.Variablesandpointersthatarepassedasargumentsofthe
|
||
callbackmaynotbeusedoutsidethecallbackcontext.Theyareonlyvalidfortheduration
|
||
ofthecallbackcall.
|
||
StructuresthatareusedasargumentsforSDKfunctionsshouldalwaysbeinitializedbythe
|
||
functionmemset().Aftersettingallthestructureelementstozero,thesizeorstructsizeele-
|
||
menthastobeinitializedwiththesizeof()function.
|
||
MPEG-2filesthatwerecreatedbySDKfunctionscanpossiblynotbeplayedwiththewin-
|
||
dowsmediaplayer.ThereasonisamissingMPEG-2decoder.WerecommendusingDVD
|
||
playersoftwarelikePowerDVDortheVCLMediaPlayersoftware.
|
||
Workingwithhandlesandinstances
|
||
IntegralpartoftheSDKareunitsthatgivetheuseracomfortableaccesstotheplainfunc-
|
||
tionsoftheDLL,e.g.GSCDBI.h/.cpp/.pas.Intheseunitsclassesencapsulateaccessto
|
||
instancesofobjectswhicharecreatedinsidetheDLL.Tohaveaccessfromoutsidethe
|
||
DLL(customapplication)totheinsideresidinginstances,handlesareused.Theunitshave
|
||
tobeaddedtotheprojectrespectivelytothesolutiontoavoidlinkererrors.
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 24
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
Afterworkwithinstancesisfinished,theinstanceshavetobedeletedbycallingtheirdes-
|
||
troy()orfree()method.Otherwisetherewillbememoryleaksleft.
|
||
UsingtheplainexportedfunctionsoftheDLLisnotrecommended.Togetaccesstofull
|
||
functionalityyoushouldusetheunitsinstead(pasfilesorh/cppfiles).
|
||
Thefollowingexample(inpseudocode)shouldillustratetheabovefacts:
|
||
//defineahandletoaserverobject
|
||
HGscServerMyServer;
|
||
//createaserverobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
MyServer=DBICreateRemoteserver();
|
||
...
|
||
//workwiththeobjectinstancewiththehelpofthehandle
|
||
MyServer->Connect();
|
||
...
|
||
//defineahandletoaPLCobject
|
||
HGscPLCPLC;
|
||
//createaPLCobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
PLC=MyServer.CreatePLC();
|
||
...
|
||
//workwiththeobjectinstancewiththehelpofthehandle
|
||
PLC->OpenPushCallback(...);
|
||
...
|
||
//destroyPLCobject
|
||
PLC->Destroy();
|
||
...
|
||
//destroyserverobject
|
||
MyServer->Destroy();
|
||
InteractionbetweenDBIandMediaPlayer
|
||
TheDBIinterfacegivesaccesstoGeViScopeserverfunctionality.Aftercreatingan
|
||
instancewiththefunctionDBICreateRemoteserver()aconnectiontotheservercanbe
|
||
establishedbycallingthemethodConnect()oftheserverobjectinstance.
|
||
Thefollowingmethodsofaserverobjectinstancecanbecalledtogetaccesstodifferent
|
||
kindsoffunctions(notacompletelist):
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 25
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
Method Function
|
||
CreateDataSet(),
|
||
CreateDataPacket()
|
||
Fetchdatafromserverdatabase
|
||
CreateLiveStream() Fetchlivedatafromserver
|
||
CreateRegistry() Fetchsetupdatafromserver(mediachannelinformation,event
|
||
information,…)
|
||
CreatePLC() Listento,createandsendactions
|
||
Theexample(inpseudocode)ofthepreviouschaptershouldillustratetheabovefacts.
|
||
TheMediaPlayerinterfaceofferssimpletouseobjectstodisplayliveandrecordedvideoin
|
||
windowscontrols.Aviewerobjectinstanceneedstobecreatedbycalling
|
||
GMPCreateViewer().Theviewerneedsahandletoawindowscontrolandahandletoa
|
||
serverobjectinstance.Ithandlesfetchingdata,decompressingdataanddisplayingvideoin
|
||
thelinkedwindowscontrolbyitself.
|
||
Thefollowingmethodsofaviewerobjectinstancecanbecalledtogetaccesstodifferent
|
||
kindsoffunctions(notacompletelist):
|
||
Method Function
|
||
ConnectDB() Fetchvideodatafromthedatabaseanddisplayitinanyplaymoderequired.
|
||
Filterandsearchcriteriacanoptionallybedefined.
|
||
SetPlayMode
|
||
(pmPlayNextEvent)
|
||
Displaythenextavailableeventpictures
|
||
Thefollowingexample(inpseudocode)showshowtocreateavieweranduseitafter-
|
||
wards:
|
||
//defineahandletoaviewerobject
|
||
HGscViewerMyViewer;
|
||
//createaviewerobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
MyViewer=GMPCreateViewer(WindowHandle,...);
|
||
//defineastructurewithdataneededtolink
|
||
//theviewertoamediachannelintheserver
|
||
TMPConnectDataMyViewerConnectData;
|
||
//handletotheserverobjectinstance
|
||
MyViewerConnectData.Connection=MyServer;
|
||
MyViewerConnectData.ServerType=ctGSCServer;
|
||
MyViewerConnectData.MediaType=mtServer;
|
||
//IDofthemediachannelthatshouldbedisplayed
|
||
MyViewerConnectData.MediaChID=...
|
||
//linktheviewertoamediachannelanddisplaylivedata
|
||
MyViewer->ConnectDB(MyViewerConnectData,pmPlayStream,...);
|
||
//destroyviewerobject
|
||
MyViewer->Destroy();
|
||
BesidetheviewerobjectclassthereisanotherclassintheMediaPlayerinterface:Theoff-
|
||
screenviewerobjectclass.Ifyouwanttodecompressmedia,whichshouldnotbe
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 26
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
displayedwiththehelpoftheviewerobject,youcanusetheoffscreenviewerobject.An
|
||
instancecanbecreatedwiththefunctionGMPCreateOffscreenViewer().Theoffscreen
|
||
viewerobjectinstanceprovidesnearlythesamefunctionalityastheviewerobjectclass
|
||
does.Thevideofootageisnotrenderedinawindow,itisdecompressedinaspecialDecom-
|
||
pBufferobjectinstance.Afterthedecompressionisdoneinsidetheoffscreenviewer,the
|
||
hostingapplicationcanbenotifiedwiththehelpofacallbackfunction.Insidethecallback
|
||
thedecompressedimagecanbeaccessed.
|
||
TheDecompBufferclassencapsulatesspecialfunctionsforeffectivedecompressing.Soit
|
||
isrecommendtouseit.Creatinganinstanceofthebuffercanbereachedbycallingthefunc-
|
||
tionGMPCreateDecompBuffer().Theinstancecanbeusedforasmanydecompressions
|
||
asneeded.ThemethodGetBufPointer()givesaccesstotherawpicturedatainsidethebuf-
|
||
fer.
|
||
Hereisashortexample(inpseudocode)howtoworkwithanoffscreenviewerobject:
|
||
//defineahandletoaDecompBufferobject
|
||
HGscDecompBufferMyDecompBuffer;
|
||
//createaDecompBufferobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
MyDecompBuffer=GMPCreateDecompBuffer();
|
||
//defineahandletoaoffscreenviewerobject
|
||
HGscViewerMyOffscreenViewer;
|
||
//createanoffscreenviewerobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
MyOffscreenViewer=GMPCreateOffscreenViewer(MyDecompBuffer);
|
||
//setcallbackoftheoffscreenviewerobject
|
||
MyOffscreenViewer.SetNewOffscreenImageCallBack(NewOff-
|
||
screenImageCallback);
|
||
//defineastructurewithdataneededtolink
|
||
//theoffscreenviewertoamediachannelintheserver
|
||
TMPConnectDataMyOffscreenViewerConnectData;
|
||
//handletotheserverobjectinstance
|
||
MyOffscreenViewerConnectData.Connection=MyServer;
|
||
MyOffscreenViewerConnectData.ServerType=ctGSCServer;
|
||
MyOffscreenViewerConnectData.MediaType=mtServer;
|
||
//IDofthemediachannelthatshouldbedecompressed
|
||
MyOffscreenViewerConnectData.MediaChID=...
|
||
//linktheoffscreenviewertoamediachannelanddecompresslivedata
|
||
MyOffscreenViewer->ConnectDB(MyOffscreenViewerConnectData,pmPlayStream,
|
||
...);
|
||
...
|
||
//destroyoffscreenviewerobject
|
||
MyOffscreenViewer->Destroy();
|
||
//destroyDecompBufferobject
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 27
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
MyDecompBuffer->Destroy();
|
||
...
|
||
//callbackfunction,thatiscalledafterimageshavebeendecompressed
|
||
...
|
||
//getarawpointertothepictureintheDecompBuffer
|
||
//object
|
||
MyDecompBuffer->GetBufPointer(BufferPointer,...);
|
||
//copythepictureintoawindowsbitmapresource
|
||
//forexample
|
||
SetDIBits(...,BitmapHandle,...,BufferPointer,...,DIB_RGB_COLORS);
|
||
...
|
||
Enumerationofsetupdata
|
||
GeViScopeServerresourcescanbeenumeratedbycustomapplications.Thesetupobject,
|
||
whichcanbeinstantiatedbycallingtheservermethodCreateRegistry(),offersfunctionality
|
||
forthis.
|
||
Enumerationofresourcesnormallyisdoneinfoursteps:
|
||
1. DefineanarrayoftypeGSCSetupReadRequestwiththeonlyelement“/”.This
|
||
causesthemethodReadNodes()totransferthewholesetupfromtheservertothe
|
||
customapplication.
|
||
2. CallthemethodReadNodes()ofthesetupobjecttogetthewholesetupfromthe
|
||
server.
|
||
3. CalloneoftheGet…()methodsofthesetupobjecttogetanarrayofGUIDsrep-
|
||
resentingthelistofresources.TherearedifferentGet…()methods,e.g.GetMe-
|
||
diaChannels()orGetEvents().
|
||
4. UsetheGUIDarraytoreceivetheresourcesdatabycallingGet…Settings()meth-
|
||
ods,e.g.GetMediaChannelSettings()orGetEventSettings().
|
||
Hereisanexample(inpseudocode),thatshowshowtoenumeratethemediachannels:
|
||
...
|
||
//connecttotheserver
|
||
MyServer->Connect();
|
||
...
|
||
//defineahandletoasetupobject
|
||
HGscRegistryMySetup;
|
||
//createasetupobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
MySetup=MyServer->CreateRegistry();
|
||
//defineaarrayforthesetupreadrequest
|
||
GscSetupReadRequestSetupReadRequest[1];
|
||
SetupReadRequest[0].NodeName="/";
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 28
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
//readthesetupdatafromtheserver
|
||
MySetup->ReadNodes(&SetupReadRequest,...);
|
||
//defineaGUIDarrayfortheGUIDsofthe
|
||
//existingmediachannels
|
||
GuidDynArrayMediaChannels;
|
||
//gettheGUIDarrayoutofthesetupdata
|
||
MySetup->GetMediaChannels(MediaChannels);
|
||
//getthedataofeachsinglemediachannel
|
||
foreachMediaChannelGUIDinMediaChannels
|
||
MySetup->GetMediaChannelSettings(MediaChannelGUID,
|
||
MediaChannelID,
|
||
GlobalNumber,
|
||
...);
|
||
...
|
||
//destroysetupobject
|
||
MySetup->Destroy();
|
||
//destroyserverobject
|
||
MyServer->Destroy();
|
||
...
|
||
Pleasenotethatespeciallythemediachannelscanbeenumeratedbyusingtheglobalfunc-
|
||
tionGMPQueryMediaChannelList()oftheMediaPlayerinterfaceaswell.
|
||
PLC,actionsandevents
|
||
ThePLC(PrcessLogicControl)objectsupportsyouwithfunctionalityforhandlingnoti-
|
||
fications,actionsandevents.ThemethodCreatePLC()oftheserverobjectclasscreatesa
|
||
handletoaPLCobjectinsidetheDBIDLL.
|
||
ThefollowingmethodsofaPLCobjectinstancecanbecalledtogetaccesstodifferent
|
||
kindsoffunctions(notacompletelist):
|
||
Method Function
|
||
SendAction() Sendanactiontotheconnectedserver
|
||
StartEvent() Startaneventoftheconnectedserver
|
||
SubscribeActions() Subscribealistofactionsthatshouldbenotifiedbyaregisteredcallback
|
||
function
|
||
OpenPushCallback
|
||
()
|
||
Registeracallbackfunction,thatiscalledifannotificationarrivesora
|
||
eventstarts/stopsorifoneofthesubscribedactionsarrives
|
||
ToreceiveNotificationsandactionsacallbackfunctioncanberegisteredwiththemethod
|
||
OpenPushCallback().Afterreceivinganaction,theactionshouldbedecodedanddis-
|
||
patchedbytheaninstanceoftheclassGSCActionDispatcher.Theactiondispatchergives
|
||
youasimplewaytoreactonspecificactions.Hereisashortexample(inpseudocode):
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 29
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
//initializationcode:
|
||
...
|
||
//connecttotheserver
|
||
MyServer->Connect();
|
||
...
|
||
//defineahandletoaPLCobject
|
||
HGSCPLCPLC;
|
||
//createaPLCobjectinstanceinsidetheDLLand
|
||
//getahandletoit
|
||
PLC=MyServer.CreatePLC();
|
||
...
|
||
//linkyourcallbackfunctionforacustomaction
|
||
//totheactiondispatcher,sothatthecallbackfunction
|
||
//iscalledautomaticallyifacutsomactionarrives
|
||
ActionDispatcher->OnCustomAction=this->MyCustomActionHandler;
|
||
//registeracallbackfunctionfornotifications,
|
||
//eventsandactions(thiscallbackfunctiondispatches
|
||
//allreceivedactionswiththehelpofthe
|
||
//GSCActionDispatcher)
|
||
PLC->OpenPushCallback(...);
|
||
...
|
||
//destroyPLCobject
|
||
PLC->Destroy();
|
||
...
|
||
//destroyserverobject
|
||
MyServer->Destroy();
|
||
//callbackfunctionforallnotifications,eventsand
|
||
//subscribedactions:
|
||
...
|
||
//dispatchthereceivedactiontothelinked
|
||
//callbackfunctions
|
||
ActionDispatcher->Dispatch(ActionHandle);
|
||
...
|
||
MediachannelIDs
|
||
TheexistingmediachannelscanbedisplayedbytheviewerobjectsoftheMediaPlayer
|
||
interface.NormallythisisdonewiththemethodConnectDB().Thismethodneedsthe
|
||
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
Page 30
|
||
────────────────────────────────────────────────────────────────────────────────
|
||
|
||
mediachannelIDtoidentifythemediachannel(camera)thatshouldbedisplayed.
|
||
ThemediachannelIDsaregeneratedautomaticallybytheGeViScopeserver.Everycre-
|
||
atedmediachannelgetsanIDthatisalwaysunique.Soifyouremovemediachannelsfrom
|
||
thesetupandaddthemagain,theywillsurereceivesomenewIDs.
|
||
ForthatreasonmediachannelsshouldnotbeaccessedbyconstantIDs.Itisrecommend
|
||
usingglobalnumbersinstead,becausetheycanbechangedinthesetup.Tofindthefitting
|
||
mediachannelIDforagivenglobalnumber,themediachannelsshouldbeenumeratedfrom
|
||
theserversetup.Pleaserefertochapter“Enumerationofsetupdata”inthisdocumentto
|
||
seehowthisisdone.
|
||
Thereisasimilardifficultywithevents,digitalinputsandoutputs.Eventsdon’thaveglobal
|
||
numbers.Heretheeventnameshouldbeusedinstead.
|
||
Handlingconnectioncollapses
|
||
ThecallbackOpenPushCallback()ofthePLCobjectenablestolistentodifferentkindsof
|
||
notificationsfromthePLCobject.Oneisthe“plcnPushCallbackLost”notification.Itisfired
|
||
ifaconnectionisinternallydetectedascollapsed.Asareactiononthiseventyoushould
|
||
destroyorfreeallobjectsthatwerecreatedinsidetheDLLsandstartaphaseofreconnect
|
||
tries.Thereconnecttriesshouldstartevery30secondsforexample.Additionallyyour
|
||
applicationcanlistentoUDPbroadcaststhataresentbytheGeViScopeserver.Afteryour
|
||
applicationreceivedthisbroadcastitcandirectlytrytoreconnecttotheserver.Pleasebe
|
||
awareofthefact,thatbroadcastsonlyworkinLAN–routersnormallyblockbroadcasts.
|
||
UsingMediaPlayerwithGeViScopeandMULTISCOPEIII
|
||
servers
|
||
GenerallytheMediaPlayerinterfacecanbeusedwithGeViScopeaswellasMULTISCOPE
|
||
IIIservers.Tolinktheserverconnectiontotheviewerobject,theconnectiondatastructure
|
||
hastobedefined.Thetypeofthestructureis“TMPConnectData”.Theelement“Server-
|
||
Type”identifiesthekindofserverwhosemediashouldbedisplayedintheviewer.
|
||
Pleasehavealookontheexample(inpseudocode)inthechapter“InteractionbetweenDBI
|
||
andMediaPlayer”inthisdocument.
|
||
Forcreatingdifferentkindofconnections,differentDLLshavetobeused.ForGeViScope
|
||
theDLL“GSCDBI.DLL”andforMULTISCOPEIIItheDLL“MscDBI.DLL”hastobe
|
||
includedintheprojectorsolutionofthecustomapplication.Theycancoexist.
|
||
HandlingaconnectiontoaMULTISCOPEIIIserverissimilartoGeViScope.Detailscanbe
|
||
foundintheMULTISCOPEIIISDKdocumentation.
|
||
UsingtheSDKwith.NET
|
||
TomaketheusageofthenativeWin32DLLseasierin.NETlanguageslikeC#orVB.NET,
|
||
theSDKcontainssomewrapperassembliesaroundtheplainSDKDLLs.
|