rtcbench

package module
v0.17.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2026 License: MIT Imports: 22 Imported by: 0

README

rtcbench-logo

CI

Benchmark large WebRTC video conferences using lightweight participant bots across multiple platforms (Jitsi, LiveKit, ...). Very light on CPU usage compared to Chrome.

Getting started

Launch 250 viewer bots with:

make
./rtcbench config-examples/jitsi/250-viewer-bots.yml

Go 1.25 or newer is required.

Examples

Contribution

Created by Evan Ram in the Internet Systems Lab at the University of Colorado Boulder.

This software is intended solely for legitimate testing and research purposes.

The authors and distributors of rtcbench do not condone or support any use of this tool to conduct denial‑of‑service attacks, disrupt services, or otherwise violate the laws of any jurisdiction. Users are responsible for ensuring that their use complies with all applicable regulations and the terms of service of the target system.

By downloading, building, or running rtcbench, you acknowledge that you understand these restrictions and agree to use the software only in lawful and authorized contexts.

Documentation

Index

Constants

View Source
const (
	APIVersionV1            = core.APIVersionV1
	KindVideoCallStressTest = core.KindVideoCallStressTest

	DefaultScenarioID = core.DefaultScenarioID
	ChurnScenarioID   = core.ChurnScenarioID

	Viewer = core.Viewer
	Sender = core.Sender
	Both   = core.Both

	StateNew    = core.StateNew
	StateJoined = core.StateJoined
	StateLeft   = core.StateLeft
	StateClosed = core.StateClosed
)

Variables

View Source
var (
	ErrUnsupportedRole       = core.ErrUnsupportedRole
	ErrUnsupportedCapability = core.ErrUnsupportedCapability
	ErrCannotJoinRoom        = core.ErrCannotJoinRoom
	ErrConnectionNotJoined   = core.ErrConnectionNotJoined
	ErrUnknownPlugin         = core.ErrUnknownPlugin
	ErrUnknownScenario       = core.ErrUnknownScenario
	ErrConnectionExists      = core.ErrConnectionExists
	ErrUserExists            = core.ErrUserExists
	ErrUserClosed            = core.ErrUserClosed
	ErrMissingRoomID         = core.ErrMissingRoomID
	ErrImpairmentUnsupported = core.ErrImpairmentUnsupported

	ErrMissingAPIVersion = core.ErrMissingAPIVersion
	ErrInvalidAPIVersion = core.ErrInvalidAPIVersion
	ErrMissingKind       = core.ErrMissingKind
	ErrInvalidKind       = core.ErrInvalidKind

	ErrMissingMetadata = core.ErrMissingMetadata
	ErrMissingName     = core.ErrMissingName
	ErrInvalidName     = core.ErrInvalidName

	ErrMissingSpec           = core.ErrMissingSpec
	ErrMissingPlugin         = core.ErrMissingPlugin
	ErrInvalidPlugin         = core.ErrInvalidPlugin
	ErrInvalidScenario       = core.ErrInvalidScenario
	ErrInvalidScenarioConfig = core.ErrInvalidScenarioConfig
	ErrMissingConference     = core.ErrMissingConference
	ErrMissingNetwork        = core.ErrMissingNetwork
	ErrMissingLogging        = core.ErrMissingLogging

	ErrMissingConferenceName   = core.ErrMissingConferenceName
	ErrInvalidConferenceName   = core.ErrInvalidConferenceName
	ErrMissingUsersPerRoom     = core.ErrMissingUsersPerRoom
	ErrNonPositiveUsersPerRoom = core.ErrNonPositiveUsersPerRoom
	ErrNonPositiveTotalRooms   = core.ErrNonPositiveTotalRooms
	ErrMissingJoinPolicy       = core.ErrMissingJoinPolicy

	ErrMissingCameraCountPerRoom   = core.ErrMissingCameraCountPerRoom
	ErrInvalidCameraCountPerRoom   = core.ErrInvalidCameraCountPerRoom
	ErrMissingCameraFileType       = core.ErrMissingCameraFileType
	ErrUnsupportedCameraFileType   = core.ErrUnsupportedCameraFileType
	ErrMissingCameraVideoCodec     = core.ErrMissingCameraVideoCodec
	ErrUnsupportedCameraVideoCodec = core.ErrUnsupportedCameraVideoCodec
	ErrMissingCameraDirectory      = core.ErrMissingCameraDirectory

	ErrMissingJoinPolicyConcurrency  = core.ErrMissingJoinPolicyConcurrency
	ErrNegativeJoinPolicyConcurrency = core.ErrNegativeJoinPolicyConcurrency
	ErrNegativeJoinStartSpacing      = core.ErrNegativeJoinStartSpacing

	ErrInvalidStatsBufferSize        = core.ErrInvalidStatsBufferSize
	ErrInvalidSVCMode                = core.ErrInvalidSVCMode
	ErrInvalidSVCSpatialLayers       = core.ErrInvalidSVCSpatialLayers
	ErrInvalidSVCTemporalLayers      = core.ErrInvalidSVCTemporalLayers
	ErrMissingRecordingDirectory     = core.ErrMissingRecordingDirectory
	ErrMissingPacketCaptureDirectory = core.ErrMissingPacketCaptureDirectory

	ErrMissingServerIP = core.ErrMissingServerIP
	ErrInvalidServerIP = core.ErrInvalidServerIP
	ErrInvalidClientIP = core.ErrInvalidClientIP

	ErrMissingLoggingDirectory = core.ErrMissingLoggingDirectory
	ErrInvalidConsoleLevel     = core.ErrInvalidConsoleLevel
	ErrInvalidFileLevel        = core.ErrInvalidFileLevel
	ErrInvalidMetricsThreshold = core.ErrInvalidMetricsThreshold

	ErrMissingLogStreamName  = core.ErrMissingLogStreamName
	ErrInvalidLogStreamName  = core.ErrInvalidLogStreamName
	ErrMissingLogStreamLevel = core.ErrMissingLogStreamLevel
	ErrInvalidLogStreamLevel = core.ErrInvalidLogStreamLevel
)
View Source
var (
	SupportedCameraVideoCodecs = core.SupportedCameraVideoCodecs
	SupportedCameraFileTypes   = core.SupportedCameraFileTypes
)
View Source
var (
	NewClient                  = core.NewClient
	NewStatsPipeline           = core.NewStatsPipeline
	EvaluateRunThresholds      = core.EvaluateRunThresholds
	EvaluateReceiverThresholds = core.EvaluateReceiverThresholds
	LoadCamerasFromConfig      = core.LoadCamerasFromConfig
	SetupPacketCaptureDir      = core.SetupPacketCaptureDir
)
View Source
var BuiltinPlugins embed.FS

BuiltinPlugins contains manifests for the plugins registered by the standard CLI

Functions

func Run added in v0.17.1

func Run(ctx context.Context, args []string, options Options) error

Run handles the RTCBench CLI, serving the API and bundled app when no config is given It reads <data>/rtcbench.yml and stops on context cancellation or an interrupt

Types

type AssignmentSelector

type AssignmentSelector = core.AssignmentSelector

type CameraConfig

type CameraConfig = core.CameraConfig

type ChurnScenario

type ChurnScenario = core.ChurnScenario

type Client

type Client = core.Client

type ConferenceConfig

type ConferenceConfig = core.ConferenceConfig

type Config

type Config = core.Config

type ConnectionState

type ConnectionState = core.ConnectionState

type DefaultScenario

type DefaultScenario = core.DefaultScenario

type GaugeSummary

type GaugeSummary = core.GaugeSummary

type HistogramSnapshot

type HistogramSnapshot = core.HistogramSnapshot

type HistogramSummary

type HistogramSummary = core.HistogramSummary

type ImpairmentAssignment

type ImpairmentAssignment = core.ImpairmentAssignment

type ImpairmentConfig

type ImpairmentConfig = core.ImpairmentConfig

type ImpairmentProfile

type ImpairmentProfile = core.ImpairmentProfile

type JoinPolicyConfig

type JoinPolicyConfig = core.JoinPolicyConfig

type JoinRequest

type JoinRequest = core.JoinRequest

type Labels

type Labels = core.Labels

type LeaveRequest

type LeaveRequest = core.LeaveRequest

type LogStreamConfig

type LogStreamConfig = core.LogStreamConfig

type LoggingConfig

type LoggingConfig = core.LoggingConfig

type MetadataConfig

type MetadataConfig = core.MetadataConfig

type MetricsCollector

type MetricsCollector = core.MetricsCollector

type MetricsConfig

type MetricsConfig = core.MetricsConfig

type NetworkConfig

type NetworkConfig = core.NetworkConfig

type OperationSummary

type OperationSummary = core.OperationSummary

type Options added in v0.17.1

type Options struct {
	// Deployments supplies optional deployment support for plugins
	Deployments []deployment.Plugin
	Version     string
	// Web serves a frontend built and embedded by the caller
	Web fs.FS
	// Plugins supplies plugin.yml manifests for the plugins compiled into the binary
	Plugins fs.FS
	// Register adds plugins and scenarios to each new client, including API runs
	// It may be called concurrently, so register factories rather than shared instances
	Register func(*Client)
}

type PacketCaptureConfig

type PacketCaptureConfig = core.PacketCaptureConfig

type Participant

type Participant = core.Participant

type Plugin

type Plugin = core.Plugin

type PluginEnv

type PluginEnv = core.PluginEnv

type PluginFactory

type PluginFactory = core.PluginFactory

type PluginRegistry

type PluginRegistry = core.PluginRegistry

type PublishVideoRequest

type PublishVideoRequest = core.PublishVideoRequest

type ReceiverSummary

type ReceiverSummary = core.ReceiverSummary

type ReceiverThresholdConfig

type ReceiverThresholdConfig = core.ReceiverThresholdConfig

type ReceiverThresholdFailure

type ReceiverThresholdFailure = core.ReceiverThresholdFailure

type RecordingConfig

type RecordingConfig = core.RecordingConfig

type RunMetricsSnapshot

type RunMetricsSnapshot = core.RunMetricsSnapshot

type RunMetricsSummary

type RunMetricsSummary = core.RunMetricsSummary

type RunThresholdConfig

type RunThresholdConfig = core.RunThresholdConfig

type SVCCameraConfig

type SVCCameraConfig = core.SVCCameraConfig

type Scenario

type Scenario = core.Scenario

type ScenarioEnv

type ScenarioEnv = core.ScenarioEnv

type ScenarioFactory

type ScenarioFactory = core.ScenarioFactory

type ScenarioRegistry

type ScenarioRegistry = core.ScenarioRegistry

type SpecConfig

type SpecConfig = core.SpecConfig

type StatsPipeline

type StatsPipeline = core.StatsPipeline

type ThresholdFailure

type ThresholdFailure = core.ThresholdFailure

type UnpublishVideoRequest

type UnpublishVideoRequest = core.UnpublishVideoRequest

type User

type User = core.User

type UserConfig

type UserConfig = core.UserConfig

type UserMetrics

type UserMetrics = core.UserMetrics

type UserRole

type UserRole = core.UserRole

type VideoPublisher

type VideoPublisher = core.VideoPublisher

type YAMLCameraConfig

type YAMLCameraConfig = core.YAMLCameraConfig

type YAMLConferenceConfig

type YAMLConferenceConfig = core.YAMLConferenceConfig

type YAMLConfig

type YAMLConfig = core.YAMLConfig

type YAMLJoinPolicyConfig

type YAMLJoinPolicyConfig = core.YAMLJoinPolicyConfig

type YAMLLogStreamConfig

type YAMLLogStreamConfig = core.YAMLLogStreamConfig

type YAMLLoggingConfig

type YAMLLoggingConfig = core.YAMLLoggingConfig

type YAMLMetadataConfig

type YAMLMetadataConfig = core.YAMLMetadataConfig

type YAMLMetricsConfig

type YAMLMetricsConfig = core.YAMLMetricsConfig

type YAMLNetworkConfig

type YAMLNetworkConfig = core.YAMLNetworkConfig

type YAMLPacketCaptureConfig

type YAMLPacketCaptureConfig = core.YAMLPacketCaptureConfig

type YAMLRecordingConfig

type YAMLRecordingConfig = core.YAMLRecordingConfig

type YAMLRunThresholdConfig

type YAMLRunThresholdConfig = core.YAMLRunThresholdConfig

type YAMLSVCCamConfig

type YAMLSVCCamConfig = core.YAMLSVCCamConfig

type YAMLSpecConfig

type YAMLSpecConfig = core.YAMLSpecConfig

Directories

Path Synopsis
cmd
ivf-svc command
ivf-svc repackages VP9 IVF files into a multi-spatial-layer superframe IVF suitable for SVC testing.
ivf-svc repackages VP9 IVF files into a multi-spatial-layer superframe IVF suitable for SVC testing.
rtcbench command
examples
custom-scenario command
internal
api
appicon
Package appicon draws the RTCBench logo, so the desktop builds need no image files.
Package appicon draws the RTCBench logo, so the desktop builds need no image files.
appicon/winicon command
Command winicon writes the icon and manifest resources that go build links into rtcbench.exe.
Command winicon writes the icon and manifest resources that go build links into rtcbench.exe.
pkg
arrival
Package arrival provides a pion interceptor that timestamps incoming RTP packets at the network layer (before pion's internal jitter buffer).
Package arrival provides a pion interceptor that timestamps incoming RTP packets at the network layer (before pion's internal jitter buffer).
gcc
ivf
log
vp9
plugin

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL