A complete WebRTC video conferencing system in Rust for Taller de ProgramaciΓ³n I (75.42) at FIUBA
RoomRTC is a comprehensive WebRTC implementation developed by the Rusty Coders team. This project provides a complete peer-to-peer video conferencing solution with a central signaling server, emphasizing:
- π¦ Pure Rust Implementation: Custom WebRTC stack built from scratch
- π₯ Real-Time Video: H.264 encoding with low-latency optimizations
- π Security: DTLS/SRTP encryption for secure communications
- ποΈ Robust Architecture: Clean, modular, and maintainable design
- π Comprehensive Testing: Unit and integration test coverage
- π Team Collaboration: Agile development with code reviews
This repository contains all source code, documentation, and configuration files needed to build, test, and run the RoomRTC system.
- π Overview
- π₯ Team Members
- βΉοΈ About the Project
- β¨ Features
- ποΈ Architecture
- π οΈ Prerequisites
- π Quick Start
- βοΈ Configuration
- ποΈ Project Structure
- π§ͺ Testing
- π Documentation
- π€ Contributing
- π License
| StudentID | Name | Github |
|---|---|---|
| 103384 | Adriana Macarena Iglesias Tripodi | AIglesiasT |
| 105288 | SebastiΓ‘n Brizuela | SebaB29 |
| 105400 | Franco Altieri Lamas | FrancoAltieri |
| 105907 | NicolΓ‘s Chen | nichen710 |
RoomRTC is a complete video conferencing system that implements the WebRTC protocol stack in Rust. The project consists of three main components:
- WebRTC Library: A standalone, plug-and-play library implementing ICE, SDP, STUN, RTP/RTCP, and H.264 codec
- Signaling Server: Central server handling user authentication, discovery, and SDP/ICE exchange
- Client Application: GUI application with camera capture and video display
The system enables direct peer-to-peer video calls between users after initial connection establishment through the signaling server.
- SDP (Session Description Protocol): Offer/answer generation and parsing
- ICE (Interactive Connectivity Establishment): Host candidate gathering and connectivity checks
- STUN Client: RFC 5389 compliant for NAT traversal
- RTP/RTCP: Video transport with H.264 packetization
- H.264 Codec: Hardware-accelerated encoding/decoding with FFmpeg
- Camera Capture: OpenCV-based HD video capture (1280x720 @ 30 FPS)
- P2P Session: Direct peer-to-peer video streaming
- Frontend GUI: egui-based interface with video display
- Logging System: Structured logging with configurable levels
- Configuration: TOML-based .conf files for all parameters
- DTLS/SRTP Encryption: Secure media transport (implemented in network layer)
- Advanced NAT Traversal: Enhanced TURN relay support
- Production Deployment: Docker containerization and deployment scripts
- Performance Optimization: Reduced latency and improved bandwidth usage
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RoomRTC System β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ Signaling βββββββββββββββ β
β β Client A βββββββββββββββββββββββββββββββΊβ Client B β β
β β β β β β
β β βββββββββ β β βββββββββ β β
β β β GUI β β ββββββββββββββββ β β GUI β β β
β β βββββ¬ββββ β β Signaling β β βββββ¬ββββ β β
β β β ββββββββΊβ Server ββββββββΊβ β β β
β β βββββΌββββ β TCP β β TCP β βββββΌββββ β β
β β βWebRTC β β β - Auth β β βWebRTC β β β
β β βManagerβ β β - Users β β βManagerβ β β
β β βββββ¬ββββ β β - SDP Relay β β βββββ¬ββββ β β
β β β β ββββββββββββββββ β β β β
β β βββββΌββββ β β βββββΌββββ β β
β β βCamera β β P2P Media β βCamera β β β
β β βββββ¬ββββ βββββββββββββββββββββββββββββββΊβ βββββ¬ββββ β β
β β β β DTLS/SRTP (RTP) β β β β
β β βββββΌββββ β β βββββΌββββ β β
β β βH.264 β β β βH.264 β β β
β β βEncoderβ β β βDecoderβ β β
β β βββββββββ β β βββββββββ β β
β βββββββββββββββ βββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-
WebRTC Library (
webrtc/): Core protocol implementationsice/: ICE candidate gathering and connectivity checkssdp/: SDP parsing and generationstun/: STUN client for NAT discovery and reflexive candidatesturn/: TURN client for relay allocation (RFC 5766)network/: RTP/RTCP transport, DTLS/SRTP encryptionmedia/: Camera capture and H.264/VP8 codec support
-
Signaling Server (
backend/server/): Central coordination- User authentication (register/login)
- User directory and presence
- SDP offer/answer relay
- ICE candidate exchange
-
Client (
frontend/): User interface- Video display (local and remote)
- Camera controls
- Connection management
- User login/selection
RoomRTC demonstrates a complete understanding of WebRTC by implementing all major components from scratch
TBD
- Clone the repository:
git clone https://github.com/taller-1-fiuba-rust/25C2-rusty-coders.git
cd 25C2-rusty-coders- Build the project:
cargo build --release- Run the application:
cargo run --release
# or, if you built the release binary directly:
./target/release/roome- Run tests:
cargo test- Run tests with coverage:
cargo test -- --test-threads=1 --nocaptureNote: If this repository is not a Rust project, please substitute the appropriate build and test commands (e.g.,
npm install/npm test,mvn test,python -m pytest, etc.).
TBD
We welcome contributions from all team members! Please follow these guidelines:
- Create an issue describing the feature, enhancement, or bug fix
- Create a branch from
main:git checkout -b feature/your-feature-name
- Make your changes following Rust best practices and coding standards
- Add tests to ensure your changes work as expected
- Run the test suite to verify everything passes:
cargo test cargo clippy -- -D warnings # Check for common mistakes cargo fmt -- --check # Verify formatting
- Commit your changes with clear, descriptive messages
- Push your branch and open a pull request against
main - Request review from at least one team member
- Follow Rust's official style guidelines
- Use
cargo fmtbefore committing - Ensure
cargo clippypasses without warnings - Write clear documentation comments (
///) for public APIs
This repository includes a LICENSE file. Please refer to it for detailed license information.
Developed with π¦ by Rusty Coders | Taller de ProgramaciΓ³n I - FIUBA - 2025