The Architecture of Fast Video Cataloger

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 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.

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 ensure we can handle really large 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 links 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 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.

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 game communicates through a memory pipe or tcp/ip.

Server

When running the Fast video cataloger serverthe WCF component is hosted as a Windows service and communicates with the game over TCP.

Conclusion

You can download a trial version of Fast video cataloger

How to share a catalog over the internet

How to share a video catalog over the internet

In Fast video Cataloger 7 we have added the ability to share a video catalog across a windows network or over the internet. It is easy and you just follow the wizard.

web server for videos

When sharing over the internet you first need to have a web server setup and configured. There are plenty of guides for how to set that up on the internet. If you don’t have a webserver already we recommend iis that comes with Windows or the Apache server. We use the Apache version that is distributed with Bitnami. After you have installed the server make sure it is working and that you can connect to it. Start with localhost and then try from a remote computer. If you don’t have a working web server the videos will not play but you will be able to browse the catalog and search. All metadata is loaded using the Fast video cataloger server and not the webserver. The webserver is only used for loading videos and companion images (and if you are using the generated web pages).
Videos need to be at the root of the webserver. The catalog you share should only have videos that are in the root of the webserver. The catalog file you share should not be in the root of the webserver.

 

You share a catalog if you want other users to access it, perhaps at the same time as you are. This is how you create a shared video library for your entire company or a project.

You can stop the server and work on it again as a local catalog when if no other user needs access.

When you share a catalog other users can add videos or photos to the catalog. When they add videos the video files are indexed locally and then uploaded over the Fast video cataloger service. Loading videos and images are done directly through a windows share while all metadata is accessed over the Fast video cataloger service.

Download the latest version of Fast video cataloger. If you have an older version you will need to update to version 7 as that is the first version that has support for sharing a catalog over the internet.

Share a video catalog in a Windows network

How to share a video catalog in a Windows network

In Fast video Cataloger 7 we have added the ability to share a video catalog across a windows network. It is super easy and you just follow the wizard.

 

You share a catalog if you want other users to access it, perhaps at the same time as you are. This is how you create a shared video library for your entire company, one place where all the videos are easily accessible and searchable.

You can stop the server and work on it again as a local catalog when if no other user needs access.

When you share a catalog other users can add videos or photos to the catalog. When they add videos the video files are indexed locally and then uploaded over the Fast video cataloger service. Loading videos and images are done directly through a windows share while all metadata is accessed over the Fast video cataloger service.

Fast Video Cataloger 7 – Share video catalogs

After lots of work and testing, we are really happy to finally announce Fast video cataloger 7 with new support to share video catalogs in a local network or over the internet.

Video server

The big new thing in this version is that it includes the Fast video cataloger server. The server allows you to share a video catalog in a local network or over the internet if you host your videos on a web server. You can easily go between using a local video catalog to a video catalog hosted by the server. The server is run as a windows service so it can keep running in the background even if you do not have the Fast video cataloger program running. When a catalog is shared several people can access the catalog at the same time. If anyone adds a video to the catalog it will be indexed locally and uploaded to the server.

We have worked on the server for a number of years now with internal beta versions and lots of testing, I am super happy to finally be able to share this work with all users.

You start the server from the Share menu.

Rest API

We have a rest API for use from web pages. the rest API has functions for reading and search a catalog. When you share a catalog over the internet you have the option to generate a sample web page that uses the API. The API allows you to build web solutions that get video data from the Fast video cataloger server.

Updated style

We have gone through the program and added icons. It does look prettier but the real reason we did it is to make it easier to find the windows you need as there starts to be quite a lot of windows now in Fast video cataloger.

Copy & Paste keywords

We have added two new icons to the thumbnails when you hover with the mouse. Click the buttons to copy and paste keywords to the scene. You can separate the keywords with a ,. And, it uses the standard Windows clipboard so you can mark text in another program and click the paste button to make that text a keyword for the scene thumbnail.

Performance

When you select a video the thumbs are displayed faster. This is very evident if you have videos with hundreds of thumbnails. We have also done a big performance pass on rendering, it should run smoother especially on large screens.

And lot of other smaller improvements. Download the latest version or upgrade from inside the program.