Add README with database format, placeholders, presets and SQLite docs

This commit is contained in:
eduard256
2026-03-23 16:24:10 +00:00
parent 0b9be5b711
commit 85f731a96f
+140
View File
@@ -0,0 +1,140 @@
# StrixCamDB
Open database of IP camera stream URLs. 3600+ brands -- from Hikvision to AliExpress no-name cameras. Primarily used in [Strix](https://github.com/eduard256/Strix), but can be used in any project.
## Database Format
Each brand is a separate JSON file in `brands/` directory. Filename matches `brand_id`.
```json
{
"version": 2,
"brand": "Dahua",
"brand_id": "dahua",
"streams": [
{
"id": "dahua-1",
"url": "/cam/realmonitor?channel=1&subtype=0&unicast=true&proto=Onvif",
"protocol": "rtsp",
"port": 554,
"models": ["IPC-HDW1220S", "IPC-HDW1431S-S4", "IPC-HFW1531S"]
},
{
"id": "dahua-2",
"url": "/live",
"protocol": "rtsp",
"port": 554,
"models": ["IPC-EB5541-AS", "IPC-HDBW5502N"]
}
]
}
```
**Stream fields:**
| Field | Type | Description |
|-------|------|-------------|
| `id` | string | Unique within brand |
| `url` | string | URL path with placeholders |
| `protocol` | string | `rtsp`, `http`, `https`, `rtsps`, `rtmp`, `mms`, `bubble`, `rtp` |
| `port` | int | Port number. `0` = unknown, use default for protocol |
| `models` | array | Camera models. `["*"]` = works for all models of this brand |
| `notes` | string | Optional. Human-readable notes |
## Placeholders
URL paths can contain placeholders. The application replaces them before making requests.
| Placeholder | Description |
|-------------|-------------|
| `[CHANNEL]` | Camera channel number (0-based) |
| `[CHANNEL+1]` | Camera channel number (1-based) |
| `[USERNAME]` | Login username |
| `[PASSWORD]` | Login password |
| `[WIDTH]` | Video width |
| `[HEIGHT]` | Video height |
| `[IP]` | Camera IP address |
| `[PORT]` | Port number |
| `[AUTH]` | Base64-encoded `username:password` |
Alternative forms are also supported: `[USER]`, `[PASS]`, `[PWD]`, `{CHANNEL}`, `{channel+1}`, etc.
## Presets
Presets are curated lists of the most popular URL patterns. Useful for brute-force scanning when the camera brand is unknown.
Available in `presets/` directory:
| File | Patterns | Description |
|------|----------|-------------|
| `top-150.json` | 150 | Quick scan |
| `top-1000.json` | 1000 | Covers most cameras |
| `top-5000.json` | 3028 | Comprehensive |
```json
{
"version": 1,
"name": "Top 150 Stream Patterns",
"preset_id": "top-150",
"streams": [
{
"url": "/Streaming/Channels/101",
"protocol": "rtsp",
"port": 554,
"brand_count": 229
}
]
}
```
`brand_count` -- number of brands that use this URL pattern.
## SQLite
Pre-built `cameras.db` is available in [GitHub Releases](https://github.com/eduard256/StrixCamDB/releases). Updated automatically on every push to `main`.
Download latest:
```
https://github.com/eduard256/StrixCamDB/releases/download/latest/cameras.db
```
### Tables
```sql
brands (id, brand_id, brand)
streams (id, brand_id, stream_id, url, protocol, port, notes)
stream_models (stream_id, model)
presets (id, preset_id, name, description)
preset_streams (id, preset_id, url, protocol, port, notes, brand_count)
meta (key, value)
```
### Example queries
```sql
-- All streams for a brand
SELECT url, protocol, port FROM streams WHERE brand_id = 'hikvision';
-- Find streams by camera model
SELECT b.brand, s.url, s.protocol, s.port
FROM stream_models sm
JOIN streams s ON s.id = sm.stream_id
JOIN brands b ON b.brand_id = s.brand_id
WHERE sm.model = 'DCS-930L';
-- Top 10 most popular URL patterns
SELECT url, brand_count FROM preset_streams
WHERE preset_id = 'top-150'
ORDER BY brand_count DESC LIMIT 10;
```
## License
Database: [CC BY-NC 4.0](LICENSE). Free for non-commercial use. Commercial use requires permission.
Code in [Strix](https://github.com/eduard256/Strix): MIT.
## Attribution
Most of the database was originally sourced from [ispyconnect.com](https://www.ispyconnect.com).