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.
// 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();
Engineered for Broadcast, Built for Developers
How now2sdk compares to traditional media frameworks and heavy broadcast engines.
| Feature | FFmpeg | OBS SDK | GStreamer | now2sdk |
|---|---|---|---|---|
| Clean Object-Oriented C++ API | ✗ | ✗ | ✗ | ✓ |
| Instant Sports Replay Engine | ✗ | ✗ | ✗ | ✓ |
| Multi-Channel Live Switcher | ✗ | Plugin | ✗ | ✓ |
| Built-in DeckLink / NDI / Live Capture | ✗ | Plugin | Plugin | ✓ |
| Zero-Copy Memory Pipeline | ✗ | ✗ | △ | ✓ |
| Qt6 & GTK4 Native Preview Widgets | ✗ | ✗ | △ | ✓ |
Source → Route → Sink → Preview.
That's the whole API.
Every class follows the same pattern: LObject sources produce frames, you connect them to LSink targets. LPreview wraps the Qt6/GTK4 widgets so you never touch them directly.
LPreview in your app.
Load, Preview, and Play.
Set up media playout streams with absolute simplicity. Load your source media files, attach them to your user-facing UI preview widget (Qt6 or GTK4 native wrappers), and start the playback pipeline instantly.
Whether you are handling high-bitrate MXF wrappers, NDI feeds, or standard MP4 loops — the basic setup code remains exactly the same.
l_File->fileNameSet(path.toStdString());
l_Preview->previewEnable(ui->playerPreview, false, true);
l_Preview->previewObject(l_File);
l_File->play();
One SDK.
Every platform.
now2sdk ships as a single .so library. Drop it into any Linux project — Qt6 or GTK4 — and
get playout, capture, recording, mixing and SDI output without writing a single FFmpeg call.
#include "now2sdk.h"
LFile* m_lFile = new LFile();
LPreview* m_lPreview = new LPreview();
LOutput* m_lOutput = new LOutput();
// Props
m_lFile->setProps("eof_hold", "true");
// Preview (Qt6 widget)
m_lPreview->previewEnable(ui->previewWidget, true, true);
m_lPreview->previewObject(m_lFile);
m_lPreview->setProps("audio_meter", "true");
m_lPreview->setProps("timecode.preview", "true");
// SDI output
m_lOutput->setSource(m_lFile);
m_lOutput->setDevice(0);
m_lOutput->DeviceFormatVideoSet(0); // 1080p50
m_lOutput->setProps("scaling_quality", "lanczos");
m_lOutput->setProps("timecode", "true");
m_lOutput->setProps("keying", "internal");
m_lFile->play();
m_lOutput->setEnabled(true); // → ON AIR
Free Core
No license key.
No watermark.
Core playout, capture, recording, streaming, CG is free. Advanced broadcast features require a license.
LFile PlayoutLLive CaptureLRecorder RecordLStream StreamLMixer CompositorLAudioMixer Audio MixLCharacter CGLStreamPlay Net PlayLFilter A/V FilterLSignal Test GenLReader Meta ProbeLOutput Dev OutputLFrame Raw GrabLConvert TranscoderLPreview Preview UILFormat ConfigLLicenseManager SecLSwitcher SwitcherLAnimation LottieLStinger StingersLReplay ReplayLMultiview Multiview
Playout &
Live Capture
Play any media file with millisecond-precise seeking, timecode support, and variable rate. Capture from Blackmagic DeckLink (SDI/HDMI) or NewTek NDI® sources on the same network.
Switch &
Composite
Professional A/B program switcher with auto-transitions, Stinger overlays, and built-in CG burn-in. Compose unlimited GPU-accelerated layers with the OpenGL-powered LMixer.
Record &
Stream Live
Record to MP4, MKV, MOV or MXF with any FFmpeg codec (libx264, h264_nvenc). Simultaneously stream to RTMP, SRT or NDI — both from the same switcher output.
rec.setVideoCodec("h264_nvenc");
stream.setStreamUrl("srt://...");
// record + stream simultaneously
switcher.addSink(&rec);
switcher.addSink(&stream);
Live CG &
Lottie Graphics
Cairo-powered vector character generator with lower-thirds, auto-scrolling tickers, crawls, clocks and dynamic countdown timers. Per-item keyframe animation (Linear / EaseIn / EaseOut / EaseInOut, custom Bezier), pre-baked playback timelines and XML template persistence. LAnimation renders Lottie JSON templates with runtime data injection.
Powered by the best
open-source stack.
now2sdk integrates battle-tested libraries directly — no abstraction layers, no hidden wrappers. You get the full power of each technology with a clean C++ API on top.
Every module, explained
21 classes. One pattern. Infinite combinations.
Free core.
Licensed add-ons.
Core SDK is free: playout, capture, record, stream, CG, GPU mix. LSwitcher, LAnimation, LStinger, LReplay and LMultiview are licensed add-ons.
The complete broadcast SDK. No license file, no watermark, no restrictions. Ship commercial products freely.
Download Free SDK- ✓LFile — media file playout
- ✓LLive — DeckLink SDI/HDMI + NDI
- ✓LRecorder — MP4/MKV/MOV/MXF
- ✓LStream — RTMP / SRT / NDI out
- ✓LMixer — OpenGL GPU compositor
- ✓LCharacter — Cairo CG / tickers
- ✓LOutput — DeckLink hardware out
- ✓LFrame — raw frame grabber
- ✓Qt6, GTK4 & WinForms previews
- ✓Linux & Windows support
- ✓Commercial use allowed
Professional broadcast modules licensed per deployment. Simple license activation files.
Request License- +LSwitcher — A/B program switcher
- +LAnimation — Lottie / ThorVG engine
- +LStinger — PNG-seq stinger transitions
- +LReplay — instant replay engine
- +LMultiview — camera monitoring grid
- ·License key activation
- ·Demo/watermark mode without key
- ·Requires Core SDK (free)
Start building broadcast apps
today. For free.
now2sdk runs on Linux and Windows. Drop in the library, include the header, ship your app.
cmake -DCMAKE_PREFIX_PATH=./now2sdk .. && make