Free Core
Object-based C++ broadcast framework Linux & Windows SDK
·
FFmpeg · Win32 · Qt6 · GTK4
Source → Route → Sink → Preview.
That's the whole API.
No FFmpeg code. No DeckLink SDK. No OpenGL shaders. Just clean, object-oriented C++ for broadcast engineering.
C++17 · now2sdk
// LFile — from Example/Playout
#include "now2sdk.h"
LFile* m_lFile = new LFile();
LPreview* m_lPreview = new LPreview();
// Set props before play
m_lFile->setProps("loop", "true");
m_lFile->setProps("audio_gain", "85");
m_lFile->setProps("eof_hold", "true");
// Attach preview to Qt widget
m_lPreview->previewEnable(ui->playerPreview, true, true);
m_lPreview->previewObject(m_lFile);
m_lPreview->setProps("audio_meter", "true");
m_lFile->fileNameSet("/media/news_package.mp4");
m_lFile->play();
// Seek to 10 seconds
m_lFile->PosSet(10000.0);
// LLive — from Example/LiveDevice
#include "now2sdk.h"
LLive* m_lLive = new LLive();
LPreview* m_lPreview = new LPreview();
// Enable GPU decode & timecode
m_lLive->setProps("gpu", "true");
m_lLive->setProps("timecode", "true");
// Enumerate DeckLink cards
int count = 0;
m_lLive->DeviceGetCount(count);
m_lLive->DeviceSet(0); // select first card
m_lLive->DeviceChannelSet(0); // SDI input
m_lLive->DeviceFormatVideoSet(0); // 1080p50
// Attach preview
m_lPreview->previewEnable(ui->livePreview, true, true);
m_lPreview->previewObject(m_lLive);
m_lPreview->setProps("timecode.preview", "true");
m_lLive->Start();
// LRecorder — from Example/Recorder
#include "now2sdk.h"
LLive* m_lLive = new LLive();
LRecorder* m_lRecorder = new LRecorder();
// Configure output format
m_lRecorder->setContainer("mp4");
m_lRecorder->setVideoCodec("libx264");
m_lRecorder->setAudioCodec("aac");
m_lRecorder->setVideoBitrate(10000); // 10 Mbps
m_lRecorder->setAudioBitrate(192);
m_lRecorder->setFilePath("/out/recording.mp4");
// Connect live source
m_lRecorder->recordObject(m_lLive);
m_lLive->Start();
m_lRecorder->Record(); // non-blocking
// Live stats
LRecorder::Stats stats;
m_lRecorder->getStats(stats); // fileSizeBytes, fps...
// LMixer + LSwitcher — from Example/Switcher
#include "now2sdk.h"
LFile* m_lFile1 = new LFile();
LFile* m_lFile2 = new LFile();
LMixer* m_lMixer = new LMixer();
// Layer 0: full-screen base
m_lMixer->addLayer("base", m_lFile1, 0, 0, 0, 255, 1920, 1080);
// Layer 1: picture-in-picture
auto pip = m_lMixer->addLayer("pip", m_lFile2, 1, 1200, 100, 255, 640, 360);
pip->borderColor = "#FFFFFF";
pip->borderSize = 5;
m_lFile1->play();
m_lFile2->play();
Debian / Ubuntu
🎩 Fedora / RHEL
🐧 Arch Linux
🪟 Windows (Win32/C#)
🖥 Qt6, GTK4 & .NET
⚡ C++17 / C++20
🎬 FFmpeg