Complete architecture rewrite following go2rtc patterns:
- pkg/ for pure logic (camdb, tester, probe, generate)
- internal/ for application glue with Init() modules
- Single HTTP server on :4567 with all endpoints
- zerolog with password masking and memory ring buffer
- Environment-based config only (no YAML files)
API endpoints: /api/search, /api/streams, /api/test,
/api/probe, /api/generate, /api/health, /api/log
Dependencies: go2rtc v1.9.14, go-sqlite3, miekg/dns, zerolog
- Fixed channel numbering for Hikvision-style cameras (reported by @sergbond_com)
- Added universal [CHANNEL+1] placeholder support
- Supports both 0-based and 1-based channel numbering
- Updated 14 camera brands with universal patterns
- Fixed brand+model search matching
- Removed invalid test data from database
Major architectural improvement to eliminate duplicate credential embedding
and simplify authentication logic across the codebase.
Changes:
- Builder now generates all URL variants with proper authentication upfront
* RTSP: generates URLs with embedded credentials and without (for open cameras)
* HTTP/JPEG/MJPEG: generates variants with query params and for Basic Auth
- Tester simplified to only test ready-to-use URLs without modification
* Removed auth chain logic and multiple authentication method attempts
* Removed AuthMethod enum and related complexity
* Credentials automatically extracted from URLs when needed
- Scanner cleaned up by removing embedCredentialsInURL function
* All TestStream calls now use single URL parameter
* Removed AuthMethod from DiscoveredStream model
Benefits:
- Eliminates bug where credentials were added up to 3 times
- Centralizes all URL generation logic in one place (Builder)
- Cleaner, more maintainable code with clear separation of concerns
- Reduces complexity by ~200 lines of code
- All authentication scenarios still fully supported