Here is a very high overview of the technology we have used to build Fast Video Cataloger. The goal has always been to provide a video content management system for Windows with great performance.
The main application is written in C# using Visual studio and the .NET framework. We us a lot of async/await for threading as wait as background workers and explicit threading. C# is generally pretty efficient and we have access to most of the windows system using the .Net framework. We have had quite a bit of performance issues with garbage collection and use quite a bit of tricks to work around these performance issues.
The user interface in Fast video cataloger is done in WPF and a few extra UI components. WPF uses DirectX internally, and DirectX uses graphics hardware for rendering. We have made quite a few optimizations to ensure we can handle really large video collections with good performance.
The scripting interface uses CSScript and we expose the API through some abstract interface classes as well as the direct WCF interfaces. You can extend Fast Video Cataloger with C# either by loading the scripts in the console windows or by creating actions that links to C# scripts.
Video encryption uses Aes encryption and we hook the filesystem to be able to work on a stream level.
WPF has a web browser component but that uses internet explorer. The browser window is a hosted Chromium web browser, CEF sharp.
WPF has a video player component but that one has pretty bad performance and do not support all video formats. The video player in Fast video cataloger is custom for FVC and is written in C++ and uses a DirectShow filter graph to play videos. C# allow us pretty easy access to interface with c components. We build the graph manually to avoid common issue where a system has badly configured filter priorities (Select the player from preferences). We support a few different renderers that you can select from the preferences.
The video indexer is custom for FVC and is written in C++. We use a custom DirectShow filter graph with a few custom DirectShow filters for the capture. The video indexer subsystem is something we have developed for over 10 years. It contains quite a lot of “special” code to handle errors and all sorts of broken files and codecs.
The video database engine is SQLite and we have built a custom WCF interface. Locally the WCF server is run as a separate process and the game communicates through a memory pipe or tcp/ip.
When running the Fast video cataloger serverthe WCF component is hosted as a Windows service and communicates with the game over TCP.