Files
Administrator 14893e62a5 feat: Geutebruck GeViScope/GeViSoft Action Mapping System - MVP
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>
2025-12-31 18:10:54 +01:00

340 lines
14 KiB
HTML

<!DOCTYPE html>
<html xmlns:MadCap="http://www.madcapsoftware.com/Schemas/MadCap.xsd" lang="en" xml:lang="en" data-mc-search-type="Stem" data-mc-help-system-file-name="index.xml" data-mc-path-to-help-system="../" data-mc-target-type="WebHelp2" data-mc-runtime-file-type="Topic" data-mc-preload-images="false" data-mc-in-preview-mode="false" data-mc-toc-path="">
<!-- saved from url=(0014)about:internet -->
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>MCS Documentation</title>
<link href="Resources/TableStyles/Rows.css" rel="stylesheet" />
<link href="../Skins/Default/Stylesheets/TextEffects.css" rel="stylesheet" />
<link href="../Skins/Default/Stylesheets/Topic.css" rel="stylesheet" />
<link href="Resources/Stylesheets/Styles.css" rel="stylesheet" />
<script src="../Resources/Scripts/jquery.min.js">
</script>
<script src="../Resources/Scripts/plugins.min.js">
</script>
<script src="../Resources/Scripts/require.min.js">
</script>
<script src="../Resources/Scripts/require.config.js">
</script>
<script src="../Resources/Scripts/MadCapAll.js">
</script>
</head>
<body>
<h2><b>MCS Documentation</b>
</h2>
<h3><b>1. General</b>
</h3>
<p>MCS (Media Channel Simulator) is part of the GEUTEBRÜCK GSCSDK. It
serves for 2 purposes:
</p>
<p>&#160;</p>
<ul>
<li value="1">In binary form it is
part of the GeViScope SDK installation. The plugin resides within the directory
mediaplugins of the GeViScope software installation. The GeViScope server loads
the plugins of that directory on start. The MCS plugin simulates important
properties and functions of GeViScope media channels for the developer who
wants to use the GEUTEBRÜCK SDKs. This offers the comfortable possibility to
develop external software for the GeViScope DVR without having any DVSP4
compression hardware or physical image sources like IP cameras.
</li>
<li value="2">In source format the
MCS serves as a programming sample for the most important aspects of the GEUTEBRÜCK
GSCRecPluginSDK. This part of the GSCSDK may be used to integrate external
image sources like IP cameras, grabber boards or TV cards into the GeViScope
environment.
</li>
</ul>
<h3><b>2. MCS as media simulator for the GEUTEBRÜCK GSCSDK</b>
</h3>
<p>The GSCSDK installs the following 4 components which belong to the MCS
plugin:
</p>
<p>&#160;</p>
<ul>
<li value="1">The plugin itself
(MCS.DLL). It resides in the directory MEDIAPLUGINS
</li>
<li value="2">A GeViScope setup
file MCSDefaultSetup.set. You may upload that setup to the GeViScope server to
have basic operation of the simulated GeViScope environment directly available.
So there is no need to deal with the details of the complex parametrization
possibilities of GeViScope at least in the very beginning.
</li>
<li value="3">Some JPEG sample
image directories in the directory MCSIMAGES. The MCSDefaultSetup defines that
the first 4 channels of the 16 MCS channels get their images from these
directories. The other channels simulate images.
</li>
<li value="4">The source code of
the MCS sample as Borland C++ Builder version 6.0 project.
</li>
</ul>
<p>&#160;</p>
<p>MCS simulates:
</p>
<p>&#160;</p>
<ul>
<li value="1">The operation of 16
video channels. It may either generate simulated images or read images from
directory sources.
</li>
<li value="2">The generation of
actions which simulate video motion detections
</li>
<li value="3">The control of the 16
simulated video channels with certain commands like camera off / on or the simulation
of an alarm driven text overlay
</li>
<li value="4">The automatic quality
/ resolution changeover because of event driven recordings or for the GeViScope
feature dynamic live streaming (DLS)
</li>
</ul>
<p>&#160;</p>
<p>The MCSDefaultSetup of the GeViScope server realizes the following basic
functions:
</p>
<p>&#160;</p>
<ul>
<li value="1">Live access for all 16 MCS channels </li>
<li value="2">Event recording for
all 16 MCS channels. This is controled either by the internally simulated video
motion detection simulation or for testing with digital input contact simulations.
</li>
</ul>
<p>&#160;</p>
<p>The following image shows the display of the 16 MCS
channels within GSCView based on the MCSDefaultSetup.set file of the SDK.
</p>
<p>
<img src="Images/211image003_600x434.jpg" alt="MCS.JPG" class="padding600" style="width: 600;height: 434;" />
</p>
<h4><b>2.1 MCS parameters in GSCSetup</b>
</h4>
<p>The MCS plugin sample is controlled in the hardware configuration dialog
of GSCSetup. You may change the following global (for the complete virtual MCS
device) and individual channel parameters.
</p>
<p>&#160;</p>
<p><b>Global parameters:</b>
</p>
<p xmlns="">&#160;</p>
<table style="caption-side: top;mc-table-style: url('Resources/TableStyles/Rows.css');" class="TableStyle_Rows" cellspacing="0">
<col style="width: 120px;" />
<col style="width: 120px;" />
<col style="width: 220px;" />
<thead xmlns="">
<tr>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColSep">Parameter
</th>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColSep">Default value
</th>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColEnd">Meaning
</th>
</tr>
</thead>
<tbody xmlns="">
<tr>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">ImageDirectory
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">MCSIMAGES
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColEnd">The directory
which is used to fetch JPEG images as sources for the 16 MCS channels. Below
that root directory you may have 16 directories Ch0..Ch15. The MCS channels
read the JPEG images within these directories cyclically if the channel
dependent option SimulateImages is false.
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColSep">UseDefault
ImageDirectory
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColEnd">If
true the parameter ImageDirectory is ignored. Images are always read from the
path “GeViScope-Server directory”\MCSIMAGES
</td>
</tr>
</tbody>
</table>
<p>&#160;</p>
<p><b>Local channel parameters</b>
</p>
<p xmlns="">&#160;</p>
<table style="caption-side: top;mc-table-style: url('Resources/TableStyles/Rows.css');" class="TableStyle_Rows" cellspacing="0">
<col style="width: 120px;" />
<col style="width: 120px;" />
<col style="width: 220px;" />
<thead>
<tr>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColSep">Parameter</th>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColSep">Default value</th>
<th class="TableStyle_Rows_Head_0_0_RowSep_ColEnd">Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">ActivityFrequency
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">1
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColEnd">average
number of simulated VideoSensorAlarm actions per second per channel
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColSep">RandomActivities
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColEnd">simulated
activities are created randomly
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">ShowImageInfo
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColEnd">the created
simulated images show image info like compression method or image counters.
Ignored if images are read from an image directory
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColSep">ShowTicker
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowSep_ColEnd">turns
on/off the embedded live ticker of the produced simulated images. Ignored if
images are read from an image directory
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">SimulateActivity
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_0_0_RowSep_ColEnd">turns
VideoSensorAlarm simulation on/off
</td>
</tr>
<tr>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColSep">SimulateImages
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColSep">true
</td>
<td valign="top" class="TableStyle_Rows_Body_1_0_RowEnd_ColEnd">images
are either simulated or read from an image directory.
</td>
</tr>
</tbody>
</table>
<h4><b>2.2 Simulation of channel control with GeViScope
actions</b>
</h4>
<p>The MCS plugin
simulates some behaviour of real world video devices in relation to GeViScope
commands. The following 2 functions are supported for test purposes:
</p>
<p>&#160;</p>
<ul>
<li value="1">Camera off/on. If MCS
receives these commands from GeViScope it will simulate the turn on/off of a
real camera by producing black images
</li>
<li value="2">OSD text. By
receiving that command MCS will overlay the received text to the simulated
images it produces. This function is ignored in case of JPEG images which are
read from an image directory.
</li>
</ul>
<p>&#160;</p>
<p>You may explore that
behavior by using the GeViScope client tool GSCPlcSimulator which is part of
the GeViScope installation. It allows to simulate any command which is
understood by GeViScope. For the functions above you need for example the following
actions (for channel 1 of the plugin):
</p>
<p>&#160;</p>
<ul>
<li value="1">CameraOn (1)
</li>
<li value="2">CameraOff(1)
</li>
<li value="3">CameraRAWOutput (1,
"Hello world")
</li>
</ul>
<p>&#160;</p>
<p>You should see the result in GSCView directly.
</p>
<h4><b>3. MCS source code</b>
</h4>
<p>By analyzing the MCS
source code you may explore the implementation principles for the following
base tasks which are supported by the plugin SDK interface:
</p>
<p>&#160;</p>
<ul>
<li value="1">Registration of media
channels within the GeViScope environment
</li>
<li value="2">Streaming images from
a media source to the GeViScope server
</li>
<li value="3">Using the high speed
MJPEG encoder of the plugin SDK to compress bitmap images
</li>
<li value="4">Receiving stream
control information depending on internal events of the GeViScope system. These
notifications may be used to change video resolution, quality or image rates
inside the plugin.
</li>
<li value="5">Sending messages from
the plugin to the GeViScope server
</li>
<li value="6">Getting notifications
about GeViScope actions which may control the behaviour of the plugin
</li>
<li value="7">Getting access to the
GeViScope setup. The MCS demonstrates how plugins may embed their setup
parameters into the setup environment of GeViScope
</li>
</ul>
<p>&#160;</p>
<p>The GSCSDK installs the complete source code of the
MCS sample as Borland C++ 6.0 project.
</p>
</body>
</html>