qumo is a Media over QUIC (MoQ) relay server and CDN implementation, providing high-performance media streaming over the QUIC transport protocol.
- π High-performance media relay using QUIC
- π‘ Support for Media over QUIC protocol
- π Built-in TLS/security support
- π Prometheus metrics for monitoring
- βοΈ Flexible YAML-based configuration
- π³ Docker support (coming soon)
Standard Ports:
6670/udp- QUIC/MoQT relay server8080/tcp- Health check & metrics HTTP endpoint5173/tcp- Web demo frontend (development only)
URLs:
- Relay:
https://localhost:6670 - Health:
http://localhost:8080/health - Web Demo:
http://localhost:5173
- Go 1.21 or higher
- Basic understanding of QUIC protocol
go install github.com/okdaichi/qumo/cmd/qumo-relay@latestgit clone https://github.com/okdaichi/qumo.git
cd qumo
go build -o bin/qumo-relay ./cmd/qumo-relay# Copy the example configuration
cp configs/config.example.yaml config.yaml
# Edit the configuration as needed
# vim config.yaml
# Run the relay server
./bin/qumo-relay --config config.yamlSee configs/config.example.yaml for a complete configuration example with detailed comments.
Basic configuration structure:
server:
address: "0.0.0.0:6670"
cert_file: "certs/server.crt"
key_file: "certs/server.key"
health_check_addr: ":8080"
relay:
upstream_url: "" # Optional upstream server
group_cache_size: 8 # Number of groups to cache
frame_capacity: 1500 # Frame buffer size in bytesqumo implements a high-performance MOQT relay using:
- Frame Pool: Zero-allocation frame reuse for optimal memory efficiency
- Group Cache: Ring buffer-based caching with configurable size
- Broadcast Pattern: Efficient subscriber notification with buffered channels
- Concurrent Safety: Comprehensive mutex protection and atomic operations
- Frame pooling reduces GC pressure
- Optimized 1ms notification timeout (based on benchmarks)
- Lock-free operations where possible
- Efficient ring buffer for group caching
qumo/
βββ cmd/
β βββ qumo-relay/ # Main relay server application
βββ relay/ # Core relay implementation
β βββ server.go # MOQT server wrapper
β βββ handler.go # Track relay handler
β βββ frame_pool.go # Memory-efficient frame pooling
β βββ group_cache.go # Ring buffer group cache
β βββ config.go # Configuration structures
β βββ health/ # Health check endpoints
βββ solid-deno/ # SolidJS web demo application
βββ configs/ # Configuration examples
βββ certs/ # TLS certificates
βββ docs/ # Documentation
βββ README.md
qumo has comprehensive test coverage:
# Run all tests
go test ./...
# Run tests with coverage
go test -cover ./...
# Run with race detector
go test -race ./...Key performance characteristics:
- Low Latency: 1ms notification timeout for optimal balance
- Memory Efficient: Frame pooling prevents allocation overhead
- Scalable: Tested with 1000+ concurrent subscribers
- Concurrent: Thread-safe operations with minimal lock contention
Benchmarks (see relay/*_test.go):
- Frame pool operations: ~0 allocations per Get/Put cycle
- Broadcast to 1000 subscribers: <1ms
- Group cache operations: Constant-time access
# Run all tests
go test ./...
# Run tests with coverage
go test -coverprofile=coverage.out ./...
# Run tests with race detector
go test -race ./...golangci-lint runWe welcome contributions! Please see our Contributing Guidelines for details.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Discussions - Ask questions and discuss ideas
- Issues - Report bugs and request features
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- Media over QUIC (MoQ) Working Group
- IETF QUIC Working Group