PowerVS is a standalone broadcast video server based on ffmpeg

Project logo

PowerVS


PowerVS is a standalone broadcast video server based on ffmpeg

📝 Table of Contents

🧐 About

The year was 2011, the broadcast company where I worked at needed to improve the production workflow, which at the time consisted in ingesting and recording hundreds of betacam tapes every week.

I took on the challenge to implement a playout server based on the then recent Blackmagic cards in order to speed up the process and taking advantage of the fact that everything was handled by digital files after the first ingest from the camera source.

The first engine I thought of implementing was ffmpeg but because we were using D10 IMX MXF files and also my lack of knowledge at the time on how ffmpeg worked, the first version came out using VLC as the decoding engine.

There were some limitations however on seeking files and lack of control, so I started working on a GStreamer solution that worked ok for a while also.

I ended up returning to ffmpeg after some more investigation and analysis of the ffmbc fork that is used for broadcast and created the functionality to also record files.

There were other contestant open-source solutions at the time like CasparCG, but none seemed to work correctly with broadcast formats.

This software has been running since 2012 with little to no bugs or issues. Development of new features stopped around 2018.

I spent much of my off time developing the software and I hope it will prove useful to others even if only for academic purposes 🙂

🏁 Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.

Prerequisites

Windows machine, tested on Windows 7 and 10

Blackmagic card, tested with:
	Decklink Duo 2
	Decklink Mini Monitor
	Decklink Mini Recorder
	Decklink Studio 4K
	UltraStudio SDI (USB 3.0)

Installing

If you have a licensed copy of Visual Studio 2010, install it and then jump to the Qt section

Compiler

  1. Install Visual C++ 2010 Express
  2. Uninstall any Visual C++ 2010 runtime/redistributable newer or equal to 10.0.30319 (Otherwise, it will cause a failure when installing Windows SDK)
  3. Install Windows SDK 7.1 (get the GRMSDKX_EN_DVD.iso and make sure to include headers, libraries, tools, compilers and the debugging tools). Make sure .NET framework 4.x is installed, installation of the WinSDK will not allow you to select compilers otherwise.
    • On Windows 10, there is an issue with the .NET framework, so you need to execute the setup from "Setup\SDKSetup.exe" to install the compilers and you may need to install the debugging tools after setup finishes from "Setup\WinSDKDebuggingTools\dbg_x86.exe"
  4. Install VS 2010 SP1 for the missing headers (this requires VS Express)
  5. Install MSVC 2010 SP1 Compiler Update for the compiler fixes.

Qt

  1. Install Qt 4.8
  2. Install Qt Creator

PowerVS Core submodule

If your git client does not download the contents of the PowerVS Core submodule, issue the following command:

git submodule update --init --recursive

Open the PowerVS.pro file in Qt Creator and build using the standard process.

🔧 Running the tests

Sadly, no automated tests were created yet since you need a physical card to test all the functionalities, usually you should have a folder with several test video files and run them through the GUI.

🎈 Usage

PowerVS allows the playout and ingest of different file formats and supports two SDI/HDMI video channels. The interface has two independent playlists, one for each channel. There is also a bridge mode that will clone one input to the other channel allowing the recording of two files for the same input source useful for example if you need to record the source and add an overlay on the other file.

Caracteristics

  • Supported resolutions: 625/25 PAL, 720p50, 720p59.94, 1080i50 e 1080i59.94 with software Up/Down conversion
  • Video output: SDI 10bit 4:2:2
  • Audio output: Embedded SDI audio 24 bit 48 kHz Stereo, up to 8 channels
  • Video reference: Blackburst or Tri-sync
  • Supported file formats for playout: MPG, AVI, MP4, MOV, OGG, MKV, MXF
  • Tested playout codecs: IMX 30 e 50 Mbits, DV, P2, h264, Theora, MPEG-2, MPEG-4, XDCAM HD, XDCAM EX

Interface functionalities

  • Add/remove and organize clips in the playlists
  • Save and load playlists
  • Chain playlist items (block play supported by selecting items to block chain)
  • Loop playlist or clip
  • Clip time visualization and timecode if available
  • Audio visualization up to 8 channels (2 at a time)
  • PAL aspect ratio 4x3 and 16x9
  • Fast-forward and slow motion option
  • Send embedded VITC and VANC on SDI cards (SD resolution only)
  • Fill+Key option to reproduce two simultaneous channels
  • Option to add a CG item overlay on the video, for example a "bug" logo

Basic shortcuts

  • Ctrl+Shift+F12 -> Access settings menu
  • F1 -> Take on channel A
  • F2 -> Drop on channel A
  • F3 -> Recue on channel A
  • F4 -> Activate/deactivate loop on channel A
  • F5 -> Activate/deactivate chain on playlist A
  • F6 -> Activate/deactivate loop on playlist A (chain must be activated)
  • F7 -> Activate/deactivate chain on playlist B
  • F8 -> Activate/deactivate loop on playlist B (chain must be activated)
  • F9 -> Take on channel B
  • F10 -> Drop on channel B
  • F11 -> Recue on channel B
  • F12 -> Activate/deactivate loop on channel B
  • + -> Take fill+key
  • - -> Drop fill+key

💭 Development

Check below an overview of the class relationships

Overview

Available Defines

  • DECKLINK - Enables Decklink code
  • GUI - Enables Graphic User Interface code
  • PORTAUDIO - Enables audio output for internal audio card

🚀 Deployment

You just need to install Microsoft Visual C++ 2010 Redistributable Package You should also copy the Qt, ffmpeg, portaudio and log4cxx shared libraries to the same location (check the releases for examples).

⛏️ Built Using

✍️ Authors

🎉 Acknowledgements

  • @kylelobo - For this doc template 🙂
  • @aescande - For the log4cxx build (forked it here also)
  • @bcoudurier - For the FFmbc fork that made it possible for me to create the recording functionality
  • @brandaopaulo - For the opportunity to work on this project
Similar Resources

FFmpeg powered audio player in node.js

sange FFmpeg powered audio player in node.js prerequisites node.js cmake sudo apt install cmake c++ compiler sudo apt install g++ gcc ffmpeg sudo apt

Nov 25, 2022

A UE4 plugin used ffmpeg library to record/publish game viewport output and in-game audio.

Streaming A UE4 plugin used ffmpeg library to record/publish game viewport output and in-game audio. GPL license beacuse used ffmpeg. Structures GameV

Aug 3, 2022

AAAAnimation - An ASCII Art animation program working with FFmpeg and Qt. Some code is written in assembly.

AAAAnimation - An ASCII Art animation program working with FFmpeg and Qt. Some code is written in assembly.

AAAAnimation About This is a term project of the Assembly Language and System Programming course in NCU. It decodes video with FFmpeg and plays ASCII

May 25, 2022

C++ wrapper for FFmpeg

AvCpp Wrapper for the FFmpeg that simplify usage it from C++ projects. Currently covered next functionality: Core helper & utility classes (AVFrame -

Dec 22, 2022

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

SRS is a simple, high efficiency and realtime video server, supports RTMP/WebRTC/HLS/HTTP-FLV/SRT/GB28181.

Jan 5, 2023

theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at this moment.

theora-player Description theora-player is an embeddable theora video player C++ library based on the libtheora sample. It has no audio support at thi

Jun 18, 2022

Free plugin-based video converter

Free plugin-based video converter

SEZE II Смотреть на русском SEZE is a plugin-based video converter for Windows/Linux. You can write your video filter in C++ (see section "How to make

Jan 3, 2023

media server based on c++11, support webrtc/rtmp/httpflv/websocket flv

cpp_media_server A media server is writen by C++11, and the network io is writen by Boost.Asio. It support rtmp/httpflv/websocket(flv)/webrtc. preinst

Jun 30, 2022

Open h.265 video codec implementation.

Open h.265 video codec implementation.

libde265 - open h.265 codec implementation libde265 is an open source implementation of the h.265 video codec. It is written from scratch and has a pl

Dec 30, 2022
Related tags
Implement a universal video player based on FFmpeg

qiaopcmusic 实现一个万能视频播放器 添加依赖方式: To get a Git project into your build: Step 1. Add the JitPack repository to your build file Add it in your root build.

Oct 15, 2021
Example how to use ffmpeg to decode video file.

FFMpeg-decode-example Example how to use ffmpeg to decode video file. Link to article about decode with FFMpeg. Russian article. Example shows you the

Nov 16, 2022
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.
Video stabilization is a software-based approach in real-time to eliminating environmental effects (wind, heavy vehicle etc.) and enhance the visual performance that degrade video streaming quality.

Video Stabilization Contents General Info Installation To Do General Info Video stabilization is a software-based approach in real-time to eliminating

Nov 23, 2022
Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content.
Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content.

This project is a Vulkan Video Sample Application demonstrating an end-to-end, all-Vulkan, processing of h.264/5 compressed video content. The application decodes the h.264/5 compressed content using an HW accelerated decoder, the decoded YCbCr frames are processed with Vulkan Graphics and then presented via the Vulkan WSI.

Dec 15, 2022
Minimalist video maker -- simplify your music score video making process!

VisualScores 极简视频制作程序,简化你的乐谱视频制作! 如果需要编译,请解压 lib 文件夹中压缩包。 使用前请参考 manual 文件夹中的用户手册。 请勿修改、移动或删除 resource 文件夹中的任何文件。 VisualScores Minimalist video maker

Sep 7, 2022
OpenShot Video Library (libopenshot) is a free, open-source C++ library dedicated to delivering high quality video editing, animation, and playback solutions to the world

OpenShot Video Library (libopenshot) is a free, open-source C++ library dedicated to delivering high quality video editing, animation, and playback solutions to the world

Jan 4, 2023
FFmpeg library inspector

ffmpeg-lib-info Prints the license, version, and configuration for FFmpeg libraries.

Jun 7, 2021
ffmpeg supporting EVC codec and file formats.

ffevc ffmpeg supporting EVC codec and file formats. MPEG-5 Essential Video Coding (EVC) integration with FFmpeg project. It is supported under Linux a

Nov 23, 2022
FFmpeg coding tutorial - learn how to code custom transmuxing, transcoding, metadata extraction, frame-by-frame reading and more

FFmpeg code examples FFmpeg coding tutorial - learn how to code custom transmuxing, transcoding, metadata extraction, frame-by-frame reading and more

Nov 29, 2022
Custom FFMpeg build script which support cross-compile to macOS/iOS/android

FFmpegCompileScript Custom FFMpeg build script which support cross-compile to macOS/iOS/Android Usage: First, init all submodule: git submodule update

Apr 20, 2022