Introduction
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.
Main application
The main application is written in C# using Visual Studio and the .NET framework. We use 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 quite a few tricks to work around these performance issues.
User interface
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 handle huge video collections with good performance.
Scripting
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 link to C# scripts.
Encryption
Video encryption uses Aes encryption and we hook the filesystem to be able to work on a stream level.
Web Browser
WPF has a web browser component but that uses internet explorer. The browser window is a hosted Chromium web browser, CEF sharp.
Video player
WPF has a video player component but that one has pretty bad performance and does 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# allows us pretty easy access to interface with c components. We build the graph manually to avoid the common issues 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.
Video indexer
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.
Video database
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 main application communicates through a memory pipe or TCP/IP.
Server
When running the Fast video cataloger server the WCF component is hosted as a Windows service and communicates with the game over TCP.