# bwe-test **Repository Path**: mirrors_pion/bwe-test ## Basic Information - **Project Name**: bwe-test - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-27 - **Last Updated**: 2025-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README


Pion Bandwidth Estimation Test Runner

Test runner for congestion control and bandwidth estimation algorithms in Pion

Pion webrtc join us on Discord Follow us on Bluesky
GoDoc Coverage Status Go Report Card License: MIT


This repository implements the test cases for congestion control for interactive real-time media described in [RFC8867](https://www.rfc-editor.org/rfc/rfc8867.html) for the algorithm(s) [implemented in Pion](https://github.com/pion/interceptor). ### Implemented/Planned Test Cases and Applications The current implementation uses [`vnet.Net` from pion/transport](https://github.com/pion/transport) to simulate network constraints. There are three test applications: 1. **Simulcast-like setup** - Uses a simple simulcast configuration 2. **Adaptive bitrate streaming** - Uses synthetic encoder for adaptive bitrate 3. **Video file reader** - Reads numbered JPG image files and sends them as video frames #### Video File Reader The video file reader (`VideoFileReader`) reads series of numbered JPG image files (e.g., `frame_000.jpg`, `frame_001.jpg`, etc.) from a directory and sends them as individual video frames using an `RTCSender`. This allows testing with real video content while maintaining precise control over frame timing and network conditions. To use the video file reader test: - Create directories with numbered JPG files (e.g., `../sample_videos_0/`, `../sample_videos_1/`) - Files should be named with sequential numbers (frame_000.jpg, frame_001.jpg, etc.) - The reader automatically discovers, sorts, and cycles through the frames To run the simulcast test, you must create three input video files as described in the [bandwidth-esimation-from-disk example](https://github.com/pion/webrtc/tree/master/examples/bandwidth-estimation-from-disk) and place them in the `vnet` directory. - [ ] **Variable Available Capacity with a Single Flow** - [ ] **Variable Available Capacity with Multiple Flows** - [x] **Dual Video Tracks with Variable Available Capacity** - Uses video file reader with multiple video tracks - [ ] **Congested Feedback Link with Bi-directional Media Flows** - [ ] **Competing Media Flows with the Same Congestion Control Algorithm** - [ ] **Round Trip Time Fairness** - [ ] **Media Flow Competing with a Long TCP Flow** - [ ] **Media Flow Competing with Short TCP Flows** - [ ] **Media Pause and Resume** - [ ] **Media Flows with Priority** - [ ] **Explicit Congestion Notification Usage** - [ ] **Multiple Bottlenecks** ### Evaluation [RFC 8868](https://www.rfc-editor.org/rfc/rfc8868.html) describes guidelines to evaluate congestion control algorithms for interactive real-time media. Currently, live statistics can be viewed during the test run via a web interface. In future, we might automate the evaluation. ### Running To run the tests, run `go test -v ./vnet/`. To run the main test application with all test cases (including the video file reader test): ```bash cd vnet go run . ``` The application will run multiple test scenarios including: - ABR (Adaptive Bitrate) tests with single and multiple flows - Simulcast tests with single and multiple flows - Video file reader test with dual video tracks (requires sample video directories) #### Video File Reader Test Requirements **Dependencies:** - Test depends on libvpx-dev library. The procedure to install the library on linux machine is: ```bash sudo apt-get update sudo apt-get install -y libvpx-dev pkg-config ``` **Video Preparation:** - User needs to first decode two videos into sequenced jpg files and put the files under `sample_videos_0` and `sample_videos_1` directories - The command to use ffmpeg to decode the video is as follows: ```bash mkdir -p sample_videos_0 ffmpeg -i /path/to/input/video0.mp4 -vsync 0 sample_videos_0/frame_%04d.jpg mkdir -p sample_videos_1 ffmpeg -i /path/to/input/video1.mp4 -vsync 0 sample_videos_1/frame_%04d.jpg ``` ### Roadmap The library is used as a part of our WebRTC implementation. Please refer to that [roadmap](https://github.com/pion/webrtc/issues/9) to track our major milestones. ### Community Pion has an active community on the [Discord](https://discord.gg/PngbdqpFbt). Follow the [Pion Bluesky](https://bsky.app/profile/pion.ly) or [Pion Twitter](https://twitter.com/_pion) for project updates and important WebRTC news. We are always looking to support **your projects**. Please reach out if you have something to build! If you need commercial support or don't want to use public methods you can contact us at [team@pion.ly](mailto:team@pion.ly) ### Contributing Check out the [contributing wiki](https://github.com/pion/webrtc/wiki/Contributing) to join the group of amazing people making this project possible ### License MIT License - see [LICENSE](LICENSE) for full text