Awesome
WebRTC Load Testing Tool Zakuro
About Shiguredo's open source software
We will not respond to PRs or issues that have not been discussed on Discord. Also, Discord is only available in Japanese.
Please read https://github.com/shiguredo/oss before use.
時雨堂のオープンソースソフトウェアについて
利用前に https://github.com/shiguredo/oss をお読みください。
WebRTC Load Testing Tool Zakuro について
WebRTC Load Testing Tool Zakuro は libwebrtc を利用した WebRTC SFU Sora 向けの WebRTC 負荷試験ツールです。
特徴
- 最新の WebRTC SFU Sora に対応
- YAML による設定ファイルへ対応
- 動的インスタンス作成へ対応
- クラスター機能への対応
- フェイク音声/映像に対応
- データチャネルメッセージング機能へ対応
- フェイクネットワークへ対応
- クライアント証明書へ対応
- 最新の libwebrtc へ対応
- OpenH264 対応
- Sora C++ SDK ベース
- 期間繰り返し
- 30 秒負荷かけて切断を繰り返すなど
使ってみる
Zakuro を使ってみたい人は USE.md をお読みください。
ビルドする
Zakuro のビルドしたい人は BUILD.md をお読みください
FAQ
FAQ.md をお読みください。
ヘルプ
$ ./zakuro --help
Zakuro - WebRTC Load Testing Tool
Usage: [OPTIONS]
Options:
-h,--help Print this help message and exit
--version Show version information
--config TEXT:FILE YAML config file path
--log-level INT:value in {verbose->0,info->1,warning->2,error->3,none->4} OR {0,1,2,3,4}
Log severity level threshold
--port INT:INT in [-1 - 65535]
Port number (default: -1)
--output-file-connection-id TEXT
Output to specified file with connection IDs
--instance-hatch-rate FLOAT:FLOAT in [0.1 - 100]
Spawned instance per seconds (default: 1.0)
--name TEXT Client Name
--vcs INT:INT in [1 - 1000] Virtual Clients (default: 1)
--vcs-hatch-rate FLOAT:FLOAT in [0.1 - 100]
Spawned virtual clients per seconds (default: 1.0)
--duration FLOAT (Experimental) Duration of virtual client running in seconds (if not zero) (default: 0.0)
--repeat-interval FLOAT (Experimental) (If duration is set) Interval to reconnect after disconnection (default: 0.0)
--max-retry INT (Experimental) Max retries when a connection fails (default: 0)
--retry-interval FLOAT (Experimental) (If max-retry is set) Interval to reconnect after connection fails (default: 60)
--no-video-device Do not use video device (default: false)
--no-audio-device Do not use audio device (default: false)
--fake-capture-device Fake Capture Device (default: true)
--fake-video-capture TEXT:FILE
Fake Video from File
--fake-audio-capture TEXT:FILE
Fake Audio from File
--sandstorm Fake Sandstorm Video (default: false)
--video-device TEXT:FILE Use the video input device specified by a name (some device will be used if not specified)
--resolution TEXT Video resolution (one of QVGA, VGA, HD, FHD, 4K, or [WIDTH]x[HEIGHT]) (default: VGA)
--framerate INT:INT in [1 - 60]
Video framerate (default: 30)
--fixed-resolution Maintain video resolution in degradation (default: false)
--priority TEXT:{BALANCE,FRAMERATE,RESOLUTION}
(Experimental) Preference in video degradation (default: BALANCE)
--insecure Allow insecure server connections when using SSL (default: false)
--openh264 TEXT:FILE OpenH264 dynamic library path. "OpenH264 Video Codec provided by Cisco Systems, Inc."
--game TEXT:{kuzushi} Play game
--scenario TEXT:{reconnect} Scenario type
--client-cert TEXT:FILE Cert file path for client certification (PEM format)
--client-key TEXT:FILE Private key file path for client certification (PEM format)
--initial-mute-video BOOLEAN:value in {false->0,true->1} OR {0,1}
Mute video initialy (default: false)
--initial-mute-audio BOOLEAN:value in {false->0,true->1} OR {0,1}
Mute audio initialy (default: false)
--sora-signaling-url TEXT ...
Signaling URLs
--sora-disable-signaling-url-randomization
Disable random connections to signaling URLs (default: false)
--sora-channel-id TEXT Channel ID
--sora-client-id TEXT Client ID
--sora-bundle-id TEXT Bundle ID
--sora-role TEXT:{sendonly,recvonly,sendrecv}
Role
--sora-video BOOLEAN:value in {false->0,true->1} OR {0,1}
Send video to sora (default: true)
--sora-audio BOOLEAN:value in {false->0,true->1} OR {0,1}
Send audio to sora (default: true)
--sora-video-codec-type TEXT:{VP8,VP9,AV1,H264}
Video codec for send (default: none)
--sora-audio-codec-type TEXT:{OPUS,LYRA}
Audio codec for send (default: none)
--sora-audio-codec-lyra-bitrate INT:INT in [0 - 9200]
Lyra audio codec bitrate (default: none)
--sora-audio-codec-lyra-usedtx TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--}
Lyra usedtx (default: none)
--sora-check-lyra-version BOOLEAN
Lyra version check (default: false)
--sora-video-bit-rate INT:INT in [0 - 30000]
Video bit rate (default: none)
--sora-audio-bit-rate INT:INT in [0 - 510]
Audio bit rate (default: none)
--sora-multistream BOOLEAN:value in {false->0,true->1} OR {0,1}
Use multistream (default: false)
--sora-simulcast BOOLEAN:value in {false->0,true->1} OR {0,1}
Use simulcast (default: false)
--sora-simulcast-rid TEXT Simulcast rid (default: none)
--sora-spotlight BOOLEAN:value in {false->0,true->1} OR {0,1}
Use spotlight (default: none)
--sora-spotlight-number INT:INT in [0 - 8]
Number of spotlight (default: none)
--sora-spotlight-focus-rid TEXT
Spotlight focus rid (default: none)
--sora-spotlight-unfocus-rid TEXT
Spotlight unfocus rid (default: none)
--sora-data-channel-signaling TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--}
Use DataChannel for Sora signaling (default: none)
--sora-data-channel-signaling-timeout INT:POSITIVE
Timeout for Data Channel in seconds (default: 180)
--sora-ignore-disconnect-websocket TEXT:value in {false-> 0,true-> 1,none->--} OR { 0, 1,--}
Ignore WebSocket disconnection if using Data Channel (default: none)
--sora-disconnect-wait-timeout INT:POSITIVE
Disconnecting timeout for Data Channel in seconds (default: 5)
--sora-metadata TEXT:JSON Value
Signaling metadata used in connect message (default: none)
--sora-signaling-notify-metadata TEXT:JSON Value
Signaling metadata (default: none)
--sora-data-channels TEXT:JSON Value
DataChannels (default: none)
--fake-network-send-queue-length-packets UINT
Queue length in number of packets for sending
--fake-network-send-queue-delay-ms INT
Delay in addition to capacity induced delay for sending
--fake-network-send-delay-standard-deviation-ms INT
Standard deviation of the extra delay for sending
--fake-network-send-link-capacity-kbps INT
Link capacity in kbps for sending
--fake-network-send-loss-percent INT
Random packet loss for sending
--fake-network-send-allow-reordering BOOLEAN:value in {false->0,true->1} OR {0,1}
If packets are allowed to be reordered for sending
--fake-network-send-avg-burst-loss-length INT
The average length of a burst of lost packets for sending
--fake-network-send-packet-overhead INT
Additional bytes to add to packet size for sending
--fake-network-receive-queue-length-packets UINT
Queue length in number of packets for receiving
--fake-network-receive-queue-delay-ms INT
Delay in addition to capacity induced delay for receiving
--fake-network-receive-delay-standard-deviation-ms INT
Standard deviation of the extra delay for receiving
--fake-network-receive-link-capacity-kbps INT
Link capacity in kbps for receiving
--fake-network-receive-loss-percent INT
Random packet loss for receiving
--fake-network-receive-allow-reordering BOOLEAN:value in {false->0,true->1} OR {0,1}
If packets are allowed to be reordered for receiving
--fake-network-receive-avg-burst-loss-length INT
The average length of a burst of lost packets for receiving
--fake-network-receive-packet-overhead INT
Additional bytes to add to packet size for receiving
ライセンス
Apache License 2.0
Copyright 2020-2023, Wandbox LLC (Original Author)
Copyright 2020-2023, Shiguredo Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
OpenH264
https://www.openh264.org/BINARY_LICENSE.txt
"OpenH264 Video Codec provided by Cisco Systems, Inc."
音声ファイルのライセンス
スポットライト機能検証時に利用する音声ファイルには あみたろの声素材工房 様の声素材を使用しています。
優先実装
優先実装とは Sora のライセンスを契約頂いているお客様限定で Zakuro の実装予定機能を有償にて前倒しで実装することです。
優先実装が可能な機能一覧
詳細は Discord やメールなどでお気軽にお問い合わせください
- Content Hint への対応
- --fake-video-capture で mjpeg も指定可能にする
- --audio-device 追加