CodeBrix.VideoPlayback.MitLicenseForever 1.0.242.1044

dotnet add package CodeBrix.VideoPlayback.MitLicenseForever --version 1.0.242.1044
                    
NuGet\Install-Package CodeBrix.VideoPlayback.MitLicenseForever -Version 1.0.242.1044
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="CodeBrix.VideoPlayback.MitLicenseForever" Version="1.0.242.1044" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="CodeBrix.VideoPlayback.MitLicenseForever" Version="1.0.242.1044" />
                    
Directory.Packages.props
<PackageReference Include="CodeBrix.VideoPlayback.MitLicenseForever" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add CodeBrix.VideoPlayback.MitLicenseForever --version 1.0.242.1044
                    
#r "nuget: CodeBrix.VideoPlayback.MitLicenseForever, 1.0.242.1044"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package CodeBrix.VideoPlayback.MitLicenseForever@1.0.242.1044
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=CodeBrix.VideoPlayback.MitLicenseForever&version=1.0.242.1044
                    
Install as a Cake Addin
#tool nuget:?package=CodeBrix.VideoPlayback.MitLicenseForever&version=1.0.242.1044
                    
Install as a Cake Tool

CodeBrix.VideoPlayback

Royalty-free video playback for .NET 10, with no native binaries, no drawing dependency, and exactly one NuGet dependency.

It reads WebM and Matroska files carrying AV1 video with Opus or Vorbis audio and any number of text caption tracks, and .cbv — a bespoke container this library writes and reads, laid out so that the whole index and every caption cue sit in front of the media data, which is what makes a shipped-with-the-app clip start instantly and a seek cost one read.

What it gives you is the machinery around a codec, and no codec:

  • a playback session with a transport, a clock, A/V sync, seeking, looping, captions and chapters;
  • a frame-buffer pool whose layout lets a decoder write straight into the memory a presenter uploads from — no copy in between, and nothing allocated per frame once playback is warm;
  • a frame presenter: a one-slot mailbox that always holds the newest frame, so the drawing side never waits and never shows a stale picture;
  • a managed SIMD converter from planar YUV to BGRA, for when there is no graphics device to do it;
  • container readers for EBML, Matroska/WebM and .cbv, written clean-room from the published specifications;
  • an authoring muxer that turns an encoder's IVF and Ogg output, plus caption and chapter files, into a .cbv;
  • and a streamable-profile checker that says whether a file really is laid out the way a .cbv promises.

The video decoder itself arrives as a separate package and registers itself; audio plays through CodeBrix.Audio. A file whose codec has no decoder fails with a message naming the package to add.

The presenter

This repository also produces CodeBrix.VideoPlayback.Skia, which draws the frames the library above decodes. One class, SkiaVideoPresenter: it composes the newest frame on an off-screen surface — on the graphics device through a single SkSL shader that does the colour conversion and a whole chain of colour effects in one pass, or on the processor through the converter above — lets your application draw over it, and blits the result into whatever canvas your application owns, letterboxed however you asked. It depends on plain SkiaSharp and nothing else: no view package, no native asset, no windowing toolkit.

The two packages are separate so that the choice stays yours. An application that draws frames itself, or runs where Skia does not, takes the first alone. The split runs one way only: this package holds what genuinely needs SkiaSharp, and everything else a presenter is made of — the render paths, the letterbox arithmetic, the composed effect chain, the shader's source text — lives in the drawing-free library above, so a presenter built on some other drawing library shares those pieces instead of copying them.

The authoring library

The third package, CodeBrix.VideoPlayback.Authoring, writes the files the first one reads. One call turns a source video, plus its caption files and a chapter file, into a .cbv — in either flavour: one FFmpeg pass for the WebM-profile one, two passes and this repository's own muxer for the bespoke one. Frame sizes, rate control, device-class presets, a colour grade baked with the same composer the presenter uses live, a dry run that renders every command line without running anything, and a streamable-profile report over the finished file.

It drives the FFmpeg installed on the authoring workstation, which is the ONE tool .cbv authoring is allowed to need — not mkvtoolnix, not a dav1d command-line tool, not Python. It belongs in a build tool or an asset pipeline, never in a shipped application: FFmpeg's binaries carry exactly the licences this family exists to keep out of one.

Installing

dotnet add package CodeBrix.VideoPlayback.MitLicenseForever
dotnet add package CodeBrix.VideoPlayback.Skia.MitLicenseForever   # optional: the presenter

And, on the machine that authors video rather than plays it:

dotnet add package CodeBrix.VideoPlayback.Authoring.MitLicenseForever

The three are published together at one version.

Playing something

using CodeBrix.VideoPlayback;
using CodeBrix.VideoPlayback.Frames;

VideoPlaybackSession session = new VideoPlaybackSession();
session.FrameReady += (s, e) => myView.Invalidate();
session.Open("clip.cbv");
session.Play();

// ...on the thread that draws:
if (session.Presenter.TryTakeLatest(out VideoFrame frame))
{
    using (frame)
    {
        // frame.Y / frame.U / frame.V are the planes, with their colour metadata.
    }
}

Looking inside a file

dotnet run --project tools/CodeBrix.VideoPlayback.Tools -- cbvinfo clip.webm
dotnet run --project tools/CodeBrix.VideoPlayback.Tools -- cbvdecode --headless clip.cbv

cbvinfo prints the tracks, the index, the captions and the chapters, and checks the file against the streamable profile rules. cbvdecode decodes every frame to a hash and a timing summary with no display and no sound device — which is how a build is verified on a small board or a build agent.

Documentation

Licence

MIT, all three packages. See LICENSE and THIRD-PARTY-NOTICES.txt — nothing is vendored, and every container reader and every line of the colour shader here was written from its published specification.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on CodeBrix.VideoPlayback.MitLicenseForever:

Package Downloads
CodeBrix.VideoPlayback.Authoring.MitLicenseForever

Authors ".cbv" video files in both of their flavours - the WebM-profile one that FFmpeg writes in a single pass, and the bespoke one that FFmpeg's IVF and Ogg output is muxed into by CodeBrix.VideoPlayback's own muxer - from one request object: AV1 video, Opus or Vorbis audio, WebVTT or SubRip caption tracks with their language, name and flags, chapters from an FFmpeg metadata file, an optional colour-grade chain baked to one lookup table, device-class presets, a dry run that renders every command line without starting anything, and a streamable-profile report over the finished file. This is a DEVELOPER-MACHINE tool: it drives the FFmpeg on the authoring workstation through CodeBrix.VideoProcessing and never belongs in a shipped application.

CodeBrix.VideoPlayback.Dav1d.BsdLicenseForever

AV1 video decoding for CodeBrix.VideoPlayback. A source-generated binding over the dav1d decoder that decodes straight into the playback session's own frame-buffer pool - no copy between the decoder's output and the graphics upload - with self-built native libraries for Windows x64 and ARM64, macOS Intel and Apple Silicon, and Linux x64, ARM64 and RISC-V 64. One Register() call at start-up makes AV1 playable; nothing else in an application ever names a decoder type.

CodeBrix.VideoPlayback.Skia.MitLicenseForever

Draws CodeBrix.VideoPlayback frames through SkiaSharp. SkiaVideoPresenter takes the newest decoded frame and composes it on an off-screen surface - on the GPU through one SkSL shader that does YUV-to-RGB and a resultant colour LUT in a single pass, or on the CPU through the core's SIMD converter - then blits the result into whatever canvas the application owns, with letterboxing, drawable overlay layers and a composed-frame capture. Plain SkiaSharp only: no view package, no native asset, no windowing dependency.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.242.1044 0 8/30/2026
1.0.242.419 37 8/30/2026
1.0.241.1343 51 8/29/2026