WebRTC media servers stress testing tool (currently only Janus)

GHODRAT

WebRTC media servers stress testing tool (currently only Janus)

Architecture

Janus media-server under load

Deployment

  • ghodrat

    # update or create manifests
    kubectl apply -f ./deployments/ghodrat/k8s/janus/configmap.yml
    kubectl apply -f ./deployments/ghodrat/k8s/janus/job.yml
    
    # delete manifests
    kubectl delete -f ./deployments/ghodrat/k8s/janus/configmap.yml
    kubectl delete -f ./deployments/ghodrat/k8s/janus/job.yml
  • 3p-janus

    helm upgrade --install janus ./deployments/third-parties/janus
    helm uninstall janus

troubleshooting image

  • docker container run --entrypoint /bin/sh -it --rm ghcr.io/snapp-incubator/ghodrat-janus:latest
Owner
Snapp Cab Incubators
Growing snapp-cab open source projects
Snapp Cab Incubators
Comments
  • Add ion-sfu support

    Add ion-sfu support

    I'd be happy to add support for load testing of ion-sfu. If there are any considerations in mind regarding support of a new media server (in this case ion-sfu), please share :)

  • panic: runtime error: invalid memory address or nil pointer dereference

    panic: runtime error: invalid memory address or nil pointer dereference

    Can you help me with this error?

    root@dadb8ebad7a4:/go/ghodrat# ./ghodrat janus --audio-file /go/ghodrat/static/audio.ogg --url ws://192.168.1.2:8188/ --call-count 2
    panic: runtime error: invalid memory address or nil pointer dereference
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x86446e]
    
    goroutine 40 [running]:
    github.com/pion/webrtc/v3.(*TrackLocalStaticSample).WriteSample(0x0, {{0xc0005521c0, 0x3f, 0x3f}, {0x0, 0x0, 0x0}, 0x0, 0x0, 0x0})
    	/go/pkg/mod/github.com/pion/webrtc/[email protected]/track_local_static.go:249 +0x2e
    github.com/snapp-incubator/ghodrat/internal/webrtc.(*Call).StreamAudioFile(0xc0002898f0, {0x7fffad64aecc, 0x0})
    	/go/ghodrat/internal/webrtc/handle.go:59 +0x2d1
    github.com/snapp-incubator/ghodrat/cmd/janus.run.func2()
    	/go/ghodrat/cmd/janus/main.go:73 +0x3b
    created by github.com/snapp-incubator/ghodrat/cmd/janus.run
    	/go/ghodrat/cmd/janus/main.go:72 +0x845
    
  • Add ion-sfu support

    Add ion-sfu support

    It is not ready to be used since it's not finalized and currently only contains stream subscription.

    With this PR I hope to demonstrate using another sfu alongside Janus.

  • resources usage

    resources usage

    I have a shot from 2 distinct times. I have made 40 calls at 19:55:25, 40 calls at 20:12:37 and 100 calls at 20:32:13 and see statistics:

    20:46:05

    Screenshot from 2021-10-23 20-46-05

    21:11:10

    Screenshot from 2021-10-23 21-11-10

    Detail

    Memory

    after each call when we reach to the peak, the resources will not freed up, this is a critical issue and should be resolved before any production level usage

    CPU

    the statistics of CPU is lot better than memory but still we can see a little threshold after each batch calls

    Filesystem

    it's fine, it's collection of logs and ...

    Network

    it's fine

  • Maximum number of calls in a single room

    Maximum number of calls in a single room

    Hi, Please correct me if I'm wrong here, I'n this testing when I provide no.of.calls:40, it is creating 40 rooms and in each room it is making a single call and testing , right?

  • Report Generation

    Report Generation

    Hi, I want a generate a report from this test results, can i generate an output report file with the command? If so, please help me with the command. Thanks

  • finding reclaimed calls cause

    finding reclaimed calls cause

    in a 100 calls I have gathered logs of call 69th

    {"level":"INFO","ts":"2021-10-23T17:02:11.220Z","logger":"goroutine: 69","caller":"janus/tear.go:6","msg":"inititate janus"}
    {"level":"INFO","ts":"2021-10-23T17:02:12.510Z","logger":"goroutine: 69","caller":"janus/tear.go:9","msg":"read RTCP packets"}
    {"level":"INFO","ts":"2021-10-23T17:02:12.510Z","logger":"goroutine: 69","caller":"janus/tear.go:13","msg":"stream Audio File"}
    {"level":"INFO","ts":"2021-10-23T17:02:12.510Z","logger":"goroutine: 69","caller":"janus/tear.go:17","msg":"create and set local offer"}
    {"level":"INFO","ts":"2021-10-23T17:02:13.306Z","logger":"goroutine: 69","caller":"janus/tear.go:20","msg":"start call"}
    {"level":"INFO","ts":"2021-10-23T17:02:13.603Z","logger":"goroutine: 69","caller":"janus/call.go:20","msg":"room created","room":6256690406467622}
    {"level":"INFO","ts":"2021-10-23T17:02:14.105Z","logger":"goroutine: 69","caller":"janus/call.go:30","msg":"joined to room","id":8117065589170429,"participants":[]}
    {"level":"INFO","ts":"2021-10-23T17:02:14.816Z","logger":"goroutine: 69","caller":"janus/call.go:43","msg":"offer has been sent"}
    {"level":"INFO","ts":"2021-10-23T17:02:15.111Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"checking"}
    {"level":"INFO","ts":"2021-10-23T17:02:16.812Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"connected"}
    {"level":"INFO","ts":"2021-10-23T17:02:18.115Z","logger":"goroutine: 69","caller":"janus/janus.go:141","msg":"WebRTCUp","id":4436228422124936}
    {"level":"INFO","ts":"2021-10-23T17:02:18.320Z","logger":"goroutine: 69","caller":"janus/persist.go:13","msg":"track has started","payload_type":111,"mime_type":"audio/opus"}
    {"level":"INFO","ts":"2021-10-23T17:02:23.314Z","logger":"goroutine: 69","caller":"janus/janus.go:139","msg":"MediaEvent","type":"audio","receiving":true}
    {"level":"INFO","ts":"2021-10-23T17:02:33.317Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"disconnected"}
    {"level":"INFO","ts":"2021-10-23T17:02:38.013Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"connected"}
    {"level":"INFO","ts":"2021-10-23T17:02:40.417Z","logger":"goroutine: 69","caller":"janus/janus.go:139","msg":"MediaEvent","type":"audio","receiving":true}
    {"level":"INFO","ts":"2021-10-23T17:02:40.520Z","logger":"goroutine: 69","caller":"janus/janus.go:139","msg":"MediaEvent","type":"audio","receiving":false}
    {"level":"INFO","ts":"2021-10-23T17:02:46.205Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"disconnected"}
    {"level":"INFO","ts":"2021-10-23T17:02:48.209Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"connected"}
    {"level":"INFO","ts":"2021-10-23T17:03:22.612Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"disconnected"}
    {"level":"INFO","ts":"2021-10-23T17:03:47.011Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"failed"}
    {"level":"INFO","ts":"2021-10-23T17:05:26.539Z","logger":"goroutine: 69","caller":"client/stream.go:48","msg":"all audio pages parsed and sent"}
    {"level":"INFO","ts":"2021-10-23T17:05:26.540Z","logger":"goroutine: 69","caller":"janus/janus.go:125","msg":"connection state has changed","state":"closed"}
    

    as you can see we connected twice, means:

    connected in 2021-10-23T17:02:16.812Z, disconnected in 2021-10-23T17:02:33.317Z

    and again:

    connected in 2021-10-23T17:02:38.013Z and disconnected in 2021-10-23T17:02:46.205Z

    and again:

    connected in 2021-10-23T17:02:48.209Z and disconnected in 2021-10-23T17:03:22.612Z

    it may be a source of problem, I think it worth if we take a look at.

    the sum of durations is 59 seconds but provided audio has length of 74 seconds

Related tags
Checks sneaker availability, currently Asos/JD/Nike + Air Force 1 '07 44 only

airforce Setup Requires a .env file with Twilio credentials and phone numbers. SID=AC0ae6d46612d3a0c3d49977485652f665 TOKEN=7ff8d07a7d0fc9e6432a14ad84

Dec 12, 2021
Server-tool - A simple tool to run and create Minecraft servers

Server Tool A simple tool to run and maintain different Minecraft servers. This

Dec 15, 2022
Pure Go implementation of the WebRTC API
Pure Go implementation of the WebRTC API

Pion WebRTC A pure Go implementation of the WebRTC API New Release Pion WebRTC v3.0.0 has been released! See the release notes to learn about new feat

Jan 1, 2023
Pure Go implementation of the WebRTC API
Pure Go implementation of the WebRTC API

Pure Go implementation of the WebRTC API

Jan 8, 2023
gRPC over WebRTC

gRPC over WebRTC Just a proof of concept, please be kind. How to Start all the things Client, create-react-app + grpc-web signaling + webrtc extension

Dec 16, 2022
A yet to be voice call application in terminal. with the power of go and webRTC (pion).

Kenny I'm just trying to make a cli operated voice call chat application using go with help of webRTC and PortAudio. It might stay a Work In Progress

Dec 2, 2022
A toy MMO example built using Ebiten and WebRTC DataChannels (UDP)
A toy MMO example built using Ebiten and WebRTC DataChannels (UDP)

Ebiten WebRTC Toy MMO ⚠️ This is a piece of incomplete hobby work and not robust. Please read the "Why does this project exist?" section. What is this

Aug 28, 2022
Scalable WebRTC Signaling Server with ayame-like protocol.

ayu ayu is WebRTC Signaling Server with ayame-like protocol. Scalable: ayu uses Redis to store room states, so it can be used on serverless platforms

Nov 11, 2022
Example of using Pion WebRTC to play H264 + Ogg from disk

This repo demonstrates how you can use Pion WebRTC to play H264 and Ogg from disk. These same APIs can be used to pull from other sources. You can use

Sep 18, 2021
Demonstration of using Pion WebRTC with a shared socket

pion-webrtc-shared-socket This example demonstrates how Pion WebRTC can use an already listening UDP socket. On startup we listen on UDP Socket 8000.

Apr 4, 2022
This project is the eloboration of pion/webrtc.

This project is the eloboration of pion/webrtc. The idea is to make the (pion/webrtc) sfu-ws example be able to handle multiple rooms

Nov 29, 2021
Go Webrtc Signaling Server

Go Webrtc Signaling Server This package is used to listen for Remote SDP (Sessio

Sep 7, 2022
Peerconnection_explainer - PeerConnection-Explainer parses WebRTC Offers/Answers then provides summaries and suggestions

PeerConnection Explainer PeerConnection Explainer decodes WebRTC... so you don't have too! PeerConnection Explainer parses WebRTC Offers/Answers then

Oct 31, 2022
Overlay networks based on WebRTC.
Overlay networks based on WebRTC.

weron Overlay networks based on WebRTC. ⚠️ weron has not yet been audited! While we try to make weron as secure as possible, it has not yet undergone

Jan 4, 2023
A Go package for sending and receiving ethernet frames. Currently supporting Linux, Freebsd, and OS X.

ether ether is a go package for sending and receiving ethernet frames. Currently supported platform: BPF based OS X FreeBSD AF_PACKET based Linux Docu

Sep 27, 2022
Antenna RPC is an RPC protocol for distributed computing, it's based on QUIC and Colfer. its currently an WIP.

aRPC - Antenna Remote Procedure Call Antenna remote procedure call (aRPC) is an RPC protocol focused on distributed processing and HPC. aRPC is implem

Jun 16, 2021
Your server for Media Station X

ServeMSX DIY content server for Media Station X It is underconstruction, for testing purposes only! Functionality Current Navigate & play local video

Jul 1, 2022
Pacemaker - Rate limit library. Currently implemented rate limits are

PaceMaker Rate limit library. Currently implemented rate limits are Fixed window

Nov 5, 2022
A yaml data-driven testing format together with golang testing library

Specified Yaml data-driven testing Specified is a yaml data format for data-driven testing. This enforces separation between feature being tested the

Jan 9, 2022