SIPSorcery.VP8 10.0.8

dotnet add package SIPSorcery.VP8 --version 10.0.8
                    
NuGet\Install-Package SIPSorcery.VP8 -Version 10.0.8
                    
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="SIPSorcery.VP8" Version="10.0.8" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SIPSorcery.VP8" Version="10.0.8" />
                    
Directory.Packages.props
<PackageReference Include="SIPSorcery.VP8" />
                    
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 SIPSorcery.VP8 --version 10.0.8
                    
#r "nuget: SIPSorcery.VP8, 10.0.8"
                    
#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 SIPSorcery.VP8@10.0.8
                    
#: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=SIPSorcery.VP8&version=10.0.8
                    
Install as a Cake Addin
#tool nuget:?package=SIPSorcery.VP8&version=10.0.8
                    
Install as a Cake Tool

SIPSorcery.VP8

NuGet NuGet downloads

A pure C# VP8 video codec for the SIPSorcery real-time communications library. No native binaries, no PInvoke -- runs anywhere .NET runs.

This is a port of Google's reference VP8 implementation (libvpx) into managed C#. Use this package when you want VP8 video support without the FFmpeg native dependency required by SIPSorceryMedia.FFmpeg.

Status

Path State
Decoder Working. Functional but slow -- the C-to-C# port hasn't been performance-tuned. Acceptable for low-resolution / low-frame-rate WebRTC peers.
Encoder -- keyframe (I-frame) Working. DC_PRED for Y / UV, single token partition, default quantizer Q=32.
Encoder -- inter (P-frame) Working. ZEROMV referencing LAST_FRAME for every macroblock. No real motion estimation yet (NEWMV is on the roadmap).
WebRTC interop Verified end-to-end against Chrome via the example apps below.

For the technical write-up, the foundation-PR sequence, and the ongoing roadmap (real motion estimation, additional intra modes, GOLDEN / ALTREF references, loop filter), see diary/2026-04-26-Claude-Opus-4.7/result.md.

Installation

dotnet add package SIPSorcery
dotnet add package SIPSorcery.VP8

Quickstart -- send a VP8 test pattern over WebRTC

using SIPSorcery.Media;
using SIPSorcery.Net;
using Vpx.Net;

var pc = new RTCPeerConnection(null);

// VP8Codec implements both IVideoEncoder (encode) and IVideoSink (decode).
var vp8Codec = new VP8Codec();

// Wrap it as an encoder end-point.
var encoderEndPoint = new Vp8NetVideoEncoderEndPoint(vp8Codec);

// Drive it from a test pattern source -- pass the codec directly, no
// I420->BGR->I420 round-trip in the wiring.
var testPatternSource = new VideoTestPatternSource(vp8Codec);

var track = new MediaStreamTrack(testPatternSource.GetVideoSourceFormats(),
                                 MediaStreamStatusEnum.SendOnly);
pc.addTrack(track);

testPatternSource.OnVideoSourceEncodedSample += pc.SendVideo;
pc.OnVideoFormatsNegotiated += formats =>
    testPatternSource.SetVideoSourceFormat(formats.First());

await testPatternSource.StartVideo();

Configuration

VP8Codec exposes a few tuning knobs:

Property Default Purpose
BaseQIndex 32 VP8 base quantizer index, range 0-127. Lower = better quality, higher bitrate.
KeyframeIntervalFrames 30 One keyframe per N frames (1 keyframe/sec at 30 fps default). Set to 1 to force every frame to be a keyframe.

Examples

The repository includes two end-to-end demos that use this package:

  • WebRTCGetStarted -- the main repo getting-started demo. Pure C# WebRTC server streaming an animated test pattern + audio to a browser, using SIPSorcery.VP8 as the video encoder. (Originally WebRTCGetStartedVP8Net; promoted to be the canonical getting-started example now that the pure C# VP8 path is the default for in-tree WebRTC video.)
  • WebRTCClientVP8Net -- pure C# WebRTC client receiving a VP8 stream from a browser and decoding it locally.

Performance characteristics

  • Encoder: optimised for allocation hygiene -- effectively zero allocations per frame after warmup. Single-threaded; one core comfortably handles 30 fps at typical webcam resolutions on a modern CPU.
  • Decoder: not yet performance-tuned. For 1080p / 30 fps you'll want the FFmpeg-based decoder.

License

BSD 3-Clause License. See LICENSE at the repo root.

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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.8 99 5/23/2026
10.0.6 129 4/28/2026

-v10.0.8: Full library release.
-v10.0.7: Updated for main sipsorcery library release.
-v10.0.6: Initial release.