a5c769dd6c58e7d68f1b3ca822cc3483638b800e
Embed username:password@ credentials in discovered stream URLs for basic_auth and combined authentication methods, making URLs directly usable by clients without additional auth handling. **Changes:** - Add embedCredentialsInURL() function in scanner.go - Embed credentials for basic_auth and combined methods only - Skip embedding for no_auth, query_params, digest, url_embedded - Handle edge cases: empty credentials, existing credentials in URL - Apply in scanDirectStream() and testURLsConcurrently() **Security:** - URL encoding handled by url.UserPassword() - Checks prevent credential duplication - Only processes when username AND password are provided **Results:** Before: http://10.0.20.112/snapshot.jpg After: http://admin:password@10.0.20.112/snapshot.jpg Tested with Zosi ZG23213M camera - all 6 streams working correctly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
🦉 Strix - Smart IP Camera Stream Discovery System
Strix is an intelligent IP camera stream discovery system that acts as a bridge between users and streaming servers like go2rtc. It automatically discovers and validates camera streams, eliminating the need for manual URL configuration.
🎯 Features
- Intelligent Camera Search: Fuzzy search across 3,600+ camera models
- Automatic Stream Discovery: ONVIF, database patterns, and popular URL detection
- Real-time Updates: Server-Sent Events (SSE) for live discovery progress
- Universal Protocol Support: RTSP, HTTP, MJPEG, JPEG snapshots, and more
- Smart URL Building: Automatic placeholder replacement and authentication handling
- Concurrent Testing: Fast parallel stream validation with ffprobe
- Memory Efficient: Streaming JSON parsing for large camera databases
- API-First Design: RESTful API with comprehensive documentation
🚀 Quick Start
Prerequisites
- Go 1.21 or higher
- ffprobe (optional, for enhanced stream validation)
Installation
# Clone the repository
git clone https://github.com/strix-project/strix
cd strix
# Install dependencies
make deps
# Build the application
make build
# Run the application
make run
📡 API Endpoints
Health Check
GET /api/v1/health
Camera Search
POST /api/v1/cameras/search
{
"query": "zosi zg23213m",
"limit": 10
}
Stream Discovery (SSE)
POST /api/v1/streams/discover
{
"target": "192.168.1.100", # IP or stream URL
"model": "zosi zg23213m", # Optional camera model
"username": "admin", # Optional
"password": "password", # Optional
"timeout": 240, # Seconds (default: 240)
"max_streams": 10, # Maximum streams to find
"channel": 0 # For NVR systems
}
🔍 How It Works
- Camera Search: Intelligent fuzzy matching across brand and model database
- URL Collection: Combines ONVIF discovery, model-specific patterns, and popular URLs
- Stream Validation: Concurrent testing using ffprobe and HTTP requests
- Real-time Updates: SSE streams provide instant feedback on discovered streams
- Smart Filtering: Deduplicates URLs and prioritizes working streams
📁 Project Structure
strix/
├── cmd/strix/ # Application entry point
├── internal/ # Private application code
│ ├── api/ # HTTP handlers and routing
│ ├── camera/ # Camera database and discovery
│ │ ├── database/ # Database loading and search
│ │ ├── discovery/ # ONVIF and stream discovery
│ │ └── stream/ # URL building and validation
│ ├── config/ # Configuration management
│ └── models/ # Data structures
├── pkg/ # Public packages
│ └── sse/ # Server-Sent Events
├── data/ # Camera database (3,600+ models)
│ ├── brands/ # Brand-specific JSON files
│ ├── popular_stream_patterns.json
│ └── query_parameters.json
└── go.mod
🛠️ Configuration
Environment variables:
STRIX_HOST=0.0.0.0 # Server host (default: 0.0.0.0)
STRIX_PORT=8080 # Server port (default: 8080)
STRIX_LOG_LEVEL=info # Log level: debug, info, warn, error
STRIX_LOG_FORMAT=json # Log format: json, text
📊 Camera Database
The system includes a comprehensive database of camera models:
- 3,600+ camera brands
- 150+ popular stream patterns
- 258 query parameter variations
- Automatic placeholder replacement
🔧 Development
# Run tests
make test
# Format code
make fmt
# Run linter
make lint
# Build for all platforms
make build-all
# Development mode with live reload
make dev
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
🙏 Acknowledgments
- Camera database sourced from ispyconnect.com
- Inspired by go2rtc project
- Built with Go and Chi router
Made with ❤️ for the home automation community
Languages
HTML
63.1%
Shell
21.6%
Go
15.2%
Dockerfile
0.1%