Skip to main content

OvenMediaEngine Performance Benchmark: Single-Server Capacity

· 5 min read

This is a performance report for OvenMediaEngine (OME), measured on real servers.

A few questions come up from almost everyone evaluating OME:

"How many live streams can one server ingest?"
"How many viewers can it serve?"
"How many transcoding channels can it run?"

Until now, the honest answer has been "it depends on your hardware and configuration." That is true, but it doesn't help much when you are trying to decide how many servers to provision. To provide concrete numbers, streams and viewers were added to a single OME server until it reached its limit, and the load that one machine could actually handle was recorded.

The tests were run on bare-metal servers and on AWS EC2 instances, a widely used cloud platform. Testing is ongoing, and new results will be added to this post as they become available.

Test Scope​

  • Ingest: how many streams one server can receive at the same time (RTMP, SRT, WebRTC/WHIP)
  • Playback: how many viewers can watch a single stream at the same time (WebRTC, LL-HLS)
  • Transcoding: how many 1080p streams one server can transcode at the same time. Three renditions that are common in real services were used: 480p (500 Kbps), 720p (2.5 Mbps), and 1080p (5 Mbps).

Test Methodology​

The number of streams or viewers was increased gradually to find the highest load just before quality broke down. That load was then held for two minutes and recorded as the result only if no issues occurred.

The pass/fail criterion is the actual viewing quality, not CPU usage:

  • Ingest and playback fail when more than 1% of streams or viewers stall or fail to play.
  • Transcoding fails when encoding can no longer keep up with real time.

Every number below is therefore the maximum load at which quality holds. In production, plan for about 70–80% of these values to leave headroom for traffic spikes.

All machines ran the same OME version (v0.21.2), the same configuration, and the same test streams. Ingest and playback were measured without transcoding (bypass). Transcoding was measured by converting a 1080p 5 Mbps stream on the CPU with x264.

Test Environment​

Servers​

TypeMachineCPUMemoryNetwork
Cloud
(AWS EC2)
c5.2xlarge8 vCPU (Xeon Platinum 8275CL, 4 physical cores)
3.0 GHz (up to 3.9 GHz)
16 GBUp to
10 Gbps
Cloud
(AWS EC2)
c5.4xlarge16 vCPU (Xeon Platinum 8124M, 8 physical cores)
3.0 GHz (up to 3.5 GHz)
32 GBUp to
10 Gbps
Bare metal*Dell PowerEdge
R350
Intel Xeon E-2388G, 8 cores / 16 threads
3.2 GHz (up to 5.1 GHz)
64 GB10 Gbps
Bare metal*Supermicro
AS -3015MR-H8TNR
AMD EPYC 4564P, 16 cores / 32 threads
4.5 GHz (up to 5.7 GHz)
96 GB10 Gbps × 2
* Bare-metal servers (Dell PowerEdge R350 and Supermicro AS -3015MR-H8TNR) were provided by servers.com. Thank you for your support.

Input Streams​

Rendition*ResolutionVideo codecFrame rateVideo bitrate
480p854 × 480H.26430 fps500 Kbps
720p1280 × 720H.26430 fps2.5 Mbps
1080p1920 × 1080H.26430 fps5 Mbps
* The same streams were used for ingest and playback tests. Transcoding tests used the 1080p stream as input.

Test Results​

Ingest Capacity: Concurrent Input Streams​

ProtocolQualityc5.2xlarge
(cloud)
c5.4xlarge
(cloud)
Dell R350
(bare metal)
Supermicro
(bare metal)
RTMP480p90170300550
RTMP720p60120230380
RTMP1080p55100200230
SRT480p75+75+75+75+
SRT720p55+75+75+75+
SRT1080p45+75+75+75+
WebRTC (UDP)480p130220380530
WebRTC (UDP)720p90130190300
WebRTC (UDP)1080p6595130200
WebRTC (TCP)480p140230550700
WebRTC (TCP)720p95150240300
WebRTC (TCP)1080p70110160190
About the SRT numbers

For SRT, the load-generation tool reached its own SRT sending limit before OME did, so OME's true maximum could not be measured. The values above are lower bounds: OME handled at least this many SRT streams. Updated numbers will be published once the test tool has been improved.

Playback Capacity: Concurrent Viewers​

ProtocolQualityc5.2xlarge
(cloud)
c5.4xlarge
(cloud)
Dell R350
(bare metal)
Supermicro
(bare metal)
WebRTC480p1,9003,1003,8005,700
WebRTC720p7401,4001,6002,500
WebRTC1080p4507209001,500
LL-HLS480p3,4006,2006,70010,000
LL-HLS720p2,7003,3003,4005,100
LL-HLS1080p1,7001,7001,5002,500

Transcoding Capacity: Concurrent Channels (x264)​

Outputc5.2xlarge
(cloud)
c5.4xlarge
(cloud)
Dell R350
(bare metal)
Supermicro
(bare metal)
480p9212343
720p7101532
1080p46918
ABR
(1080p + 720p + 480p)
23510
About transcoding

Transcoding numbers are much lower than ingest and playback. Software transcoding on the CPU (x264) spends a lot of CPU on decoding and encoding every channel, which limits how many channels one server can handle. With a three-rendition ABR ladder, the results were only 2 channels on c5.2xlarge, 3 on c5.4xlarge, 5 on the Dell R350, and 10 on the Supermicro.

The next post will cover how many channels a single server can handle with hardware transcoding on NETINT VPUs and NVIDIA GPUs.

Conclusion​

These measurements replace "it depends" with a concrete baseline: with this kind of hardware, you can expect roughly this much. Whether you run your own bare-metal servers or are choosing an instance type on AWS, these numbers can help you size your deployment.

Of course, real-world results will vary with your hardware, network, and stream settings. Use these results as a starting point, and validate them in the environment you plan to run.

Thank you.